summaryrefslogtreecommitdiff
path: root/lib/lettering/font.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lettering/font.py')
-rw-r--r--lib/lettering/font.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/lettering/font.py b/lib/lettering/font.py
index 8d2a0c4b..6dca4094 100644
--- a/lib/lettering/font.py
+++ b/lib/lettering/font.py
@@ -125,6 +125,8 @@ class Font(object):
name = font_metadata('name', '')
description = localized_font_metadata('description', '')
keywords = font_metadata('keywords', '')
+ json_default_variant = font_metadata('default_variant', FontVariant.LEFT_TO_RIGHT)
+ text_direction = font_metadata('text_direction', 'ltr')
letter_case = font_metadata('letter_case', '')
default_glyph = font_metadata('default_glyph', "�")
leading = font_metadata('leading', 100)
@@ -158,7 +160,7 @@ class Font(object):
@property
def default_variant(self):
# Set default variant to any existing variant if default font file is missing
- default_variant = font_metadata('default_variant', FontVariant.LEFT_TO_RIGHT)
+ default_variant = self.json_default_variant
font_variants = self.has_variants()
if default_variant not in font_variants and len(font_variants) > 0:
default_variant = font_variants[0]
@@ -224,8 +226,12 @@ class Font(object):
glyph_set = glyph_sets[i % 2]
line = line.strip()
+ if self.text_direction == "rtl":
+ line = line[::-1]
+
letter_group = self._render_line(destination_group, line, position, glyph_set)
- if (back_and_forth and self.reversible and i % 2 == 1) or variant == '←':
+ if ((variant == '→' and back_and_forth and self.reversible and i % 2 == 1) or
+ (variant == '←' and not (back_and_forth and self.reversible and i % 2 == 1))):
letter_group[:] = reversed(letter_group)
for group in letter_group:
group[:] = reversed(group)
@@ -257,8 +263,6 @@ class Font(object):
if text_align in [3, 4]:
for line_group in destination_group.iterchildren():
- # print(line_group.label, len(line_group), file=sys.stderr)
- # print(line_group.bounding_box().width, max_line_width, file=sys.stderr)
if text_align == 4 and len(line_group) == 1:
line_group = line_group[0]
if len(line_group) > 1:
@@ -377,7 +381,10 @@ class Font(object):
node = deepcopy(glyph.node)
if last_character is not None:
- position.x += glyph.min_x - self.kerning_pairs.get(last_character + character, 0)
+ if self.text_direction != "rtl":
+ position.x += glyph.min_x - self.kerning_pairs.get(last_character + character, 0)
+ else:
+ position.x += glyph.min_x - self.kerning_pairs.get(character + last_character, 0)
transform = "translate(%s, %s)" % position.as_tuple()
node.set('transform', transform)