293 lines
6.8 KiB
Plaintext
293 lines
6.8 KiB
Plaintext
@startuml v5_class_diagram
|
|
|
|
title
|
|
Designspace v5 Class Diagram
|
|
|
|
<size:12>Note: the ""Descriptor"" suffix is omitted from most classes
|
|
end title
|
|
|
|
' left to right direction
|
|
|
|
skinparam class {
|
|
BackgroundColor<<New>> PaleGreen
|
|
}
|
|
|
|
class DesignSpaceDocument {
|
|
+ formatVersion: str = None
|
|
+ <color:green><b><<New>> elidedFallbackName: str = None
|
|
+ rulesProcessingLast: bool = False
|
|
+ lib: Dict = {}
|
|
}
|
|
|
|
note left of DesignSpaceDocument::elidedFallbackName
|
|
STAT Style Attributes Header field ""elidedFallbackNameID""
|
|
end note
|
|
|
|
abstract class AbstractAxis {
|
|
+ tag: str
|
|
+ name: str
|
|
+ labelNames: Dict[str, str]
|
|
+ hidden: bool
|
|
+ map: List[Tuple[float, float]]
|
|
+ <color:green><b><<New>> axisOrdering: int
|
|
}
|
|
DesignSpaceDocument *-- "*" AbstractAxis: axes >
|
|
note right of AbstractAxis::axisOrdering
|
|
STAT Axis Record field
|
|
end note
|
|
|
|
class Axis {
|
|
+ minimum: float
|
|
+ maximum: float
|
|
+ default: float
|
|
}
|
|
AbstractAxis <|--- Axis
|
|
note bottom of Axis
|
|
This is the usual
|
|
Axis, with a range
|
|
of values.
|
|
end note
|
|
|
|
class DiscreteAxis <<New>> {
|
|
+ values: List[float]
|
|
+ default: float
|
|
}
|
|
AbstractAxis <|--- DiscreteAxis
|
|
note bottom of DiscreteAxis
|
|
A discrete axis is not
|
|
interpolable, e.g.
|
|
Uprights vs Italics, and
|
|
so has "discrete" stops
|
|
instead of a continuous
|
|
range of values.
|
|
end note
|
|
|
|
Axis .[hidden] DiscreteAxis
|
|
|
|
class AxisLabel <<New>> {
|
|
+ userMinimum: Optional[float]
|
|
+ userValue: float
|
|
+ userMaximum: Optional[float]
|
|
+ name: str
|
|
+ elidable: bool
|
|
+ olderSibling: bool
|
|
+ linkedUserValue: Optional[float]
|
|
+ labelNames: Dict[str, str]
|
|
|
|
+ getFormat(): 1 | 2 | 3
|
|
}
|
|
note right of AxisLabel
|
|
Label for a
|
|
stop on an Axis
|
|
(STAT format
|
|
1,2,3)
|
|
end note
|
|
AbstractAxis *-- "*" AxisLabel: <<New>> \n axisLabels >
|
|
|
|
class LocationLabel <<New>> {
|
|
+ name: str
|
|
+ location: Dict[str, float]
|
|
+ elidable: bool
|
|
+ olderSibling: bool
|
|
+ labelNames: Dict[str, str]
|
|
}
|
|
note right of LocationLabel
|
|
Label for a
|
|
freestanding
|
|
location
|
|
(STAT format 4)
|
|
end note
|
|
DesignSpaceDocument *--- "*" LocationLabel: <<New>> \n locationLabels >
|
|
|
|
class Rule {
|
|
+ name: str
|
|
+ conditionSets: List[ConditionSet]
|
|
+ subs: Dict[str, str]
|
|
}
|
|
DesignSpaceDocument *- "*" Rule: rules >
|
|
|
|
class Source {
|
|
+ name: Optional[str]
|
|
+ filename: str
|
|
+ path: str
|
|
+ layerName: Optional[str]
|
|
+ <color:brown><s><<Deprecated>> location: Location
|
|
+ <color:green><b><<New>> designLocation: SimpleLocation
|
|
....
|
|
+ font: Optional[Font]
|
|
....
|
|
+ familyName: Optional[str]
|
|
+ styleName: Optional[str]
|
|
+ <color:green><b><<New>> localisedFamilyName: Dict
|
|
....
|
|
+ <color:brown><s><<Deprecated>> copyLib: bool
|
|
+ <color:brown><s><<Deprecated>> copyInfo: bool
|
|
+ <color:brown><s><<Deprecated>> copyGroups: bool
|
|
+ <color:brown><s><<Deprecated>> copyFeatures: bool
|
|
....
|
|
+ muteKerning: bool
|
|
+ muteInfo: bool
|
|
+ mutedGlyphNames: List[str]
|
|
----
|
|
+ <color:green><b><<New>> getFullDesignLocation(doc)
|
|
}
|
|
DesignSpaceDocument *-- "*" Source: sources >
|
|
note right of Source::localisedFamilyName
|
|
New field to allow generation
|
|
of localised instance names using
|
|
STAT information.
|
|
end note
|
|
note right of Source::copyGroups
|
|
These fields are already not meaningful
|
|
anymore in version 4 (the default source
|
|
will be used as "neutral" for groups, info
|
|
and features. ''copyLib'' can be emulated
|
|
by putting content in the designspace's lib.
|
|
end note
|
|
|
|
note as NLocSource
|
|
The location of
|
|
sources can still only
|
|
be defined in design
|
|
coordinates, and now
|
|
also by relying on
|
|
axis defaults.
|
|
|
|
To build the final,
|
|
"full" location, a
|
|
helper method is
|
|
provided, that uses
|
|
axis defaults and
|
|
axis mappings to
|
|
fill in the blanks.
|
|
end note
|
|
NLocSource . Source::designLocation
|
|
NLocSource . Source::getFullDesignLocation
|
|
|
|
class VariableFont <<New>> {
|
|
+ filename: str
|
|
+ lib: Dict
|
|
}
|
|
DesignSpaceDocument *--- "*" VariableFont: <<New>> \n variableFonts >
|
|
note right of VariableFont
|
|
A variable font is a
|
|
subset of the designspace
|
|
where everything interpolates
|
|
(and so can be compiled into
|
|
an OpenType variable font).
|
|
end note
|
|
|
|
abstract class AbstractAxisSubset <<New>> {
|
|
+ name: str
|
|
}
|
|
VariableFont *-- "*" AbstractAxisSubset: <<New>> \n axisSubsets >
|
|
|
|
note right of AbstractAxisSubset
|
|
An axis subset selects a range
|
|
or a spot on each the available
|
|
axes from the whole designspace.
|
|
|
|
By default, only the default value
|
|
of each axis is used to define the
|
|
variable font.
|
|
|
|
Continuous axes can be specified
|
|
to include their full range instead;
|
|
or a subset of the range.
|
|
|
|
Discrete axes can be specified
|
|
to include a different spot than the
|
|
default.
|
|
end note
|
|
|
|
class RangeAxisSubset <<New>> {
|
|
+ userMinimum: float
|
|
+ userDefault: float
|
|
+ userMaximum: float
|
|
}
|
|
AbstractAxisSubset <|-- RangeAxisSubset
|
|
|
|
class ValueAxisSubset <<New>> {
|
|
+ userValue: float
|
|
}
|
|
AbstractAxisSubset <|-- ValueAxisSubset
|
|
|
|
class Instance {
|
|
+ filename: str
|
|
+ path: str
|
|
+ <color:brown><s><<Deprecated>> location: Location
|
|
+ <color:green><b><<New>> locationLabel: str
|
|
+ <color:green><b><<New>> designLocation: AnisotropicLocation
|
|
+ <color:green><b><<New>> userLocation: SimpleLocation
|
|
....
|
|
+ font: Optional[Font]
|
|
....
|
|
+ <color:orange><b><<Changed>> name: Optional[str]
|
|
+ <color:orange><b><<Changed>> familyName: Optional[str]
|
|
+ <color:orange><b><<Changed>> styleName: Optional[str]
|
|
+ <color:orange><b><<Changed>> postScriptFontName: Optional[str]
|
|
+ <color:orange><b><<Changed>> styleMapFamilyName: Optional[str]
|
|
+ <color:orange><b><<Changed>> styleMapStyleName: Optional[str]
|
|
+ localisedFamilyName: Dict
|
|
+ localisedStyleName: Dict
|
|
+ localisedStyleMapFamilyName: Dict
|
|
+ localisedStyleMapStyleName: Dict
|
|
....
|
|
+ <color:brown><s><<Deprecated>> glyphs: Dict
|
|
+ <color:brown><s><<Deprecated>> kerning: bool
|
|
+ <color:brown><s><<Deprecated>> info: bool
|
|
....
|
|
+ lib: Dict
|
|
----
|
|
+ <color:green><b><<New>> clearLocation()
|
|
+ <color:green><b><<New>> getLocationLabelDescriptor(doc)
|
|
+ <color:green><b><<New>> getFullDesignLocation(doc)
|
|
+ <color:green><b><<New>> getFullUserLocation(doc)
|
|
}
|
|
DesignSpaceDocument *-- "*" Instance: instances >
|
|
note right of Instance::locationLabel
|
|
The location can now alternatively
|
|
be a string = name of a LocationLabel
|
|
(STAT format 4). The instance then
|
|
adopts the location of that label.
|
|
See the Decovar example file.
|
|
end note
|
|
note right of Instance::styleMapStyleName
|
|
All the name field are now optional.
|
|
Their default values will be computed
|
|
using the provided STAT table data
|
|
and the STAT rules from the spec.
|
|
For styleMap{Family,Style}Name, they
|
|
would be computed using the STAT
|
|
""linkedUserValue"" fields.
|
|
end note
|
|
note right of Instance::glyphs
|
|
This attribute has been replaced by rules
|
|
end note
|
|
note right of Instance::kerning
|
|
All instances get kerning and info
|
|
nowadays.
|
|
end note
|
|
|
|
note as NLocInstance
|
|
The location of instances
|
|
can now be defined using
|
|
either:
|
|
- a STAT LocationLabel
|
|
- design coordinates
|
|
- user coordinates.
|
|
- relying on axis defaults
|
|
|
|
To build the final, "full"
|
|
location, a few helper
|
|
methods are provided,
|
|
that aggregate data from
|
|
these sources and apply
|
|
the axis mappings.
|
|
end note
|
|
NLocInstance . Instance::designLocation
|
|
NLocInstance . Instance::getFullDesignLocation
|
|
|
|
@enduml
|
|
|