prefig 0.4.5.dev20250925053340__py3-none-any.whl → 0.4.6.dev20250926053320__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
prefig/core/diagram.py CHANGED
@@ -109,6 +109,15 @@ class Diagram:
109
109
  if data_directory is not None:
110
110
  self.external = data_directory
111
111
 
112
+ templates = self.diagram_element.xpath('.//templates')
113
+ if len(templates) > 0:
114
+ templates_element = templates[0]
115
+ for template in templates:
116
+ templates_parent = template.getparent()
117
+ templates_parent.remove(template)
118
+ for child in templates_element:
119
+ self.defaults[child.tag] = child
120
+
112
121
  if self.defaults.get('macros', None) is not None:
113
122
  label.add_macros(self.defaults.get('macros').text)
114
123
 
@@ -487,6 +496,13 @@ class Diagram:
487
496
  def get_root(self):
488
497
  return self.root
489
498
 
499
+ def apply_defaults(self, tag, element):
500
+ default = self.defaults.get(tag, None)
501
+ if default is not None:
502
+ for attr, value in default.attrib.items():
503
+ if element.get(attr, None) is None:
504
+ element.set(attr, value)
505
+
490
506
  # when a graphical component is outlined, we first add the component's path
491
507
  # to <defs> so that it can be reused, then we stroke it with a thick white
492
508
  def add_outline(self, element, path, parent, outline_width = None):
prefig/core/label.py CHANGED
@@ -15,6 +15,8 @@ import tempfile
15
15
 
16
16
  log = logging.getLogger('prefigure')
17
17
 
18
+ allowed_fonts = {'serif','sans-serif','monospace'}
19
+
18
20
  def init(format, environment):
19
21
  global math_labels
20
22
  global text_measurements
@@ -465,10 +467,18 @@ def position_svg_label(element, diagram, ctm, group):
465
467
  # These lists contain: font, size, italics, bold, color
466
468
  label_color = element.get("color", None)
467
469
 
468
- std_font_face = ['sans', 14, False, False, label_color]
469
- it_font_face = ['sans', 14, True, False, label_color]
470
- b_font_face = ['sans', 14, False, True, label_color]
471
- it_b_font_face = ['sans', 14, True, True, label_color]
470
+ diagram.apply_defaults('label', element)
471
+
472
+ font_family = element.get('font', 'sans-serif').lower().strip()
473
+ if font_family not in allowed_fonts:
474
+ font_family = 'sans-serif'
475
+
476
+ font_size = un.valid_eval(element.get('font-size', '14'))
477
+
478
+ std_font_face = [font_family, font_size, False, False, label_color]
479
+ it_font_face = [font_family, font_size, True, False, label_color]
480
+ b_font_face = [font_family, font_size, False, True, label_color]
481
+ it_b_font_face = [font_family, font_size, True, True, label_color]
472
482
 
473
483
  label = element
474
484
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefig
3
- Version: 0.4.5.dev20250925053340
3
+ Version: 0.4.6.dev20250926053320
4
4
  Summary: An authoring system for mathematical diagrams
5
5
  Home-page: https://prefigure.org
6
6
  License: GPL-3.0-or-later
@@ -12,14 +12,14 @@ prefig/core/clip.py,sha256=X3TcFYPuZwjZ9SFBWMc1MYY__6XTJqLafPeOLFNOdIE,806
12
12
  prefig/core/compat.py,sha256=_dI4aGtDrfhcw33r1SQS6kMwwgJj8dJ2A2GcLmtwX7o,729
13
13
  prefig/core/coordinates.py,sha256=vEAJ8kL9S1VylxWysqY5qW2WyCMyHj42yFkuAzjfqFs,3518
14
14
  prefig/core/definition.py,sha256=7LiaCxQwwEPdcnMpcMgrkZEfAoTc5ng8LO6Nf50Htwg,1033
15
- prefig/core/diagram.py,sha256=7Hsa8xOpGmLnln2Chl-ofVl_bG6ZOEJPGV2vE1V8RnI,22599
15
+ prefig/core/diagram.py,sha256=-8zjo6FgDs74OLMkd3rgncBHrEue3S86hwQ3ISh-nj4,23253
16
16
  prefig/core/diffeqs.py,sha256=aLXcmTsnfTG6L2-RiNfSaijzwmJF6xJcQpNQdDAWTQo,7127
17
17
  prefig/core/graph.py,sha256=q81dyJy3CxMWvMNhm74SZ9yjfltatdckmajxegA0z0A,10064
18
18
  prefig/core/grid_axes.py,sha256=v98C5tb9knNViGYGDrWL_ULb7Y78vMSQ6OJO7Xd0DXY,12165
19
19
  prefig/core/group.py,sha256=KByOibuslP9TqSygNfPSaN4zU5oSRYaH2CPnR21ogTg,5825
20
20
  prefig/core/image.py,sha256=eQKy0mNvCE6J8EA1S5Y08YF3lrb7kCeGG4wrjBQ_-pI,4373
21
21
  prefig/core/implicit.py,sha256=JyFKpKj6Xi1PF-3BeZpd7t0aNe8jH9Wf_E2rghvt-Ug,6179
22
- prefig/core/label.py,sha256=e_gOd2kcdOtcJay1VyRstP66SiDNxK2UK2-obkxQnOc,24746
22
+ prefig/core/label.py,sha256=iIL0QXyNOGbWSA8xLoPgkkxghTcyHRmdDQw07mvBGjY,25100
23
23
  prefig/core/label_tools.py,sha256=jOawiyrKC5iQs0vq7133xNXqrkJbMqDZVHflT-hOruo,9167
24
24
  prefig/core/legend.py,sha256=0mVfyU3LvqgDCYUOlCeBD04maV-rj2h0fs1aOEBBt6c,13340
25
25
  prefig/core/line.py,sha256=HBB9cvJawKAtdubISn5maRrzFFzV0NQuBgwoQoxeXcw,6055
@@ -61,8 +61,8 @@ prefig/resources/schema/pf_schema.rng,sha256=SmYGLT9X6w6LEWulHHz2RgD6Q2v1sV24Wjc
61
61
  prefig/resources/template/pf_publication.xml,sha256=eEv8HACv610Apw5DSVNy0reLfELYqHlNy9Oq0GH7C_c,200
62
62
  prefig/scripts/__init__.py,sha256=qJcPi1WRh9UAwu4zIFJbmxWalAMilMYqgi6LxRkF7bI,25
63
63
  prefig/scripts/install_mj.py,sha256=5A6-oc1xbIXka5mkFE70vlp9-Rh_QoxOxGMrQi9Hkio,1219
64
- prefig-0.4.5.dev20250925053340.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
65
- prefig-0.4.5.dev20250925053340.dist-info/METADATA,sha256=q5VfacH1V_EJbQvaNe8weBWa2pMoG83UGp1Nx1_kv6g,8716
66
- prefig-0.4.5.dev20250925053340.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
- prefig-0.4.5.dev20250925053340.dist-info/entry_points.txt,sha256=OP4ZQT71q2b0Zfbie-oM2Z1HlxpkuX7qaxJnzwsBOVQ,42
68
- prefig-0.4.5.dev20250925053340.dist-info/RECORD,,
64
+ prefig-0.4.6.dev20250926053320.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
65
+ prefig-0.4.6.dev20250926053320.dist-info/METADATA,sha256=RgRq4-AY-jczI_Oerm5z1n8rGbJjGypR3ed90pJTwz8,8716
66
+ prefig-0.4.6.dev20250926053320.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
+ prefig-0.4.6.dev20250926053320.dist-info/entry_points.txt,sha256=OP4ZQT71q2b0Zfbie-oM2Z1HlxpkuX7qaxJnzwsBOVQ,42
68
+ prefig-0.4.6.dev20250926053320.dist-info/RECORD,,