@@ -132,7 +132,6 @@ def _load_variants(self):
132132 name = font_metadata ('name' , '' )
133133 description = localized_font_metadata ('description' , '' )
134134 keywords = font_metadata ('keywords' , '' )
135- json_default_variant = font_metadata ('default_variant' , FontVariant .LEFT_TO_RIGHT )
136135 text_direction = font_metadata ('text_direction' , 'ltr' )
137136 letter_case = font_metadata ('letter_case' , '' )
138137 default_glyph = font_metadata ('default_glyph' , "�" )
@@ -143,6 +142,15 @@ def _load_variants(self):
143142 max_scale = font_metadata ('max_scale' , 1.0 )
144143 size = font_metadata ('size' , 0 )
145144 available_glyphs = font_metadata ('glyphs' , [])
145+ json_variant = font_metadata ('default_variant' , FontVariant .LEFT_TO_RIGHT [1 ])
146+
147+ @property
148+ def json_default_variant (self ):
149+ variant = self .json_variant
150+ if variant in FontVariant .LEGACY_VARIANT_TYPES :
151+ index = FontVariant .LEGACY_VARIANT_TYPES .index (variant )
152+ variant = FontVariant .VARIANT_TYPES [index ]
153+ return variant
146154
147155 # use values from SVG Font, example:
148156 # <font horiz-adv-x="45" ... <glyph .... horiz-adv-x="49" glyph-name="A" /> ... <hkern ... k="3"g1="A" g2="B" /> .... />
@@ -183,16 +191,22 @@ def preview_image(self):
183191 def has_variants (self ):
184192 # returns available variants
185193 font_variants = []
186- for variant in FontVariant .VARIANT_TYPES :
187- if os .path .isfile (os .path .join (self .path , "%s.svg" % variant )):
188- font_variants .append (variant )
189- elif (os .path .isdir (os .path .join (self .path , "%s" % variant )) and
190- [svg for svg in os .listdir (os .path .join (self .path , "%s" % variant )) if svg .endswith ('.svg' )]):
194+ for variant , legacy_variant in zip (FontVariant .VARIANT_TYPES , FontVariant .LEGACY_VARIANT_TYPES ):
195+ if self ._has_variant (variant ) or self ._has_variant (legacy_variant ):
191196 font_variants .append (variant )
192197 if not font_variants :
198+ # still no variants, raise FontError
193199 raise FontError (_ ("The font '%s' has no variants." ) % self .name )
194200 return font_variants
195201
202+ def _has_variant (self , variant ):
203+ if (os .path .isfile (os .path .join (self .path , "%s.svg" % variant )) or (
204+ os .path .isdir (os .path .join (self .path , "%s" % variant )) and
205+ [svg for svg in os .listdir (os .path .join (self .path , "%s" % variant )) if svg .endswith ('.svg' )])):
206+ return True
207+ else :
208+ return False
209+
196210 @property
197211 def marked_custom_font_id (self ):
198212 if not self .is_custom_font ():
@@ -241,8 +255,8 @@ def render_text(self, text, destination_group, variant=None, back_and_forth=True
241255 line = line [::- 1 ]
242256
243257 letter_group = self ._render_line (destination_group , line , position , glyph_set , i , letter_spacing , word_spacing )
244- if ((variant == '→' and back_and_forth and self .reversible and i % 2 == 1 ) or
245- (variant == '←' and not (back_and_forth and self .reversible and i % 2 == 1 ))):
258+ if ((variant in FontVariant . LEFT_TO_RIGHT and back_and_forth and self .reversible and i % 2 == 1 ) or
259+ (variant in FontVariant . RIGHT_TO_LEFT and not (back_and_forth and self .reversible and i % 2 == 1 ))):
246260 letter_group [:] = reversed (letter_group )
247261 for group in letter_group :
248262 group [:] = reversed (group )
0 commit comments