prefig 0.4.6.dev20250926053320__tar.gz → 0.4.6.dev20250928053207__tar.gz
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-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/PKG-INFO +1 -1
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/annotations.py +107 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/diagram.py +13 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/pyproject.toml +1 -1
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/LICENSE +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/README.md +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/__init__.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/cli.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/CTM.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/__init__.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/area.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/arrow.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/axes.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/calculus.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/circle.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/clip.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/compat.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/coordinates.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/definition.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/diffeqs.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/graph.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/grid_axes.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/group.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/image.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/implicit.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/label.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/label_tools.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/legend.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/line.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/math_utilities.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/network.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/parametric_curve.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/parse.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/path.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/point.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/polygon.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/read.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/rectangle.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/repeat.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/riemann_sum.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/shape.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/slope_field.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/statistics.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/tags.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/tangent_line.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/user_namespace.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/utilities.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/vector.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/engine.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/diagcess/diagcess.html +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/diagcess/diagcess.js +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/de-system.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/derivatives.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/diffeqs.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/implicit.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/projection.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/riemann.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/roots_of_unity.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/examples/tangent.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/fonts/Braille29.ttf +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/js/mj-sre-page.js +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/js/package.json +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/schema/pf_schema.rnc +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/schema/pf_schema.rng +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/template/pf_publication.xml +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/scripts/__init__.py +0 -0
- {prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/scripts/install_mj.py +0 -0
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/annotations.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import lxml.etree as ET
|
|
2
2
|
import logging
|
|
3
|
+
import copy
|
|
3
4
|
|
|
4
5
|
log = logging.getLogger('prefigure')
|
|
5
6
|
|
|
@@ -122,3 +123,109 @@ def annotate(element, diagram, parent = None):
|
|
|
122
123
|
ACTIVE = ET.Element('ACTIVE')
|
|
123
124
|
ACTIVE.text = element.get('id')
|
|
124
125
|
sonification.append(ACTIVE)
|
|
126
|
+
|
|
127
|
+
pronounciations = {
|
|
128
|
+
'de-solve': 'D E solve',
|
|
129
|
+
'define-shapes': 'define shapes',
|
|
130
|
+
'angle-marker': 'angle marker',
|
|
131
|
+
'area-between-curves': 'area between curves',
|
|
132
|
+
'area-under-curve': 'area under curve',
|
|
133
|
+
'grid-axes': 'grid axes',
|
|
134
|
+
'implicit-curve': 'implicit curve',
|
|
135
|
+
'parametric-curve': 'parametric curve',
|
|
136
|
+
'plot-de-solution': 'plot D E solution',
|
|
137
|
+
'riemann-sum': 'Riemann sum',
|
|
138
|
+
'slope-field': 'slope field',
|
|
139
|
+
'tick-mark': 'tick mark',
|
|
140
|
+
'tangent-line': 'tangent line',
|
|
141
|
+
'vector-field': 'vector field'
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
labeled_elements = {
|
|
145
|
+
'label',
|
|
146
|
+
'point',
|
|
147
|
+
'xlabel',
|
|
148
|
+
'ylabel',
|
|
149
|
+
'angle-marker',
|
|
150
|
+
'tick-mark',
|
|
151
|
+
'item',
|
|
152
|
+
'node',
|
|
153
|
+
'edge'
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
label_subelements = {
|
|
157
|
+
'm': 'math',
|
|
158
|
+
'b': 'bold',
|
|
159
|
+
'it': 'italics',
|
|
160
|
+
'plain': 'plain',
|
|
161
|
+
'newline': 'new line'
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
def diagram_to_speech(diagram):
|
|
165
|
+
diagram = copy.deepcopy(diagram)
|
|
166
|
+
|
|
167
|
+
element_num = 0
|
|
168
|
+
for element in diagram.getiterator():
|
|
169
|
+
if element.tag in label_subelements.keys():
|
|
170
|
+
element.getparent().remove(element)
|
|
171
|
+
continue
|
|
172
|
+
attribs = copy.deepcopy(element.attrib)
|
|
173
|
+
for attrib_name in list(element.attrib.keys()):
|
|
174
|
+
element.attrib.pop(attrib_name)
|
|
175
|
+
|
|
176
|
+
if element.tag == "diagram":
|
|
177
|
+
element.set('ref', 'figure')
|
|
178
|
+
intro = "This prefigure source file begins with a diagram having these attributes: "
|
|
179
|
+
elif element.tag == "definition":
|
|
180
|
+
element.set('ref', 'element-'+str(element_num))
|
|
181
|
+
tag_speech = 'definition'
|
|
182
|
+
intro = "A definition element defining " + element.text.strip()
|
|
183
|
+
elif element.tag in labeled_elements:
|
|
184
|
+
element.set('ref', 'element-'+str(element_num))
|
|
185
|
+
tag_speech = pronounciations.get(element.tag, element.tag)
|
|
186
|
+
label_text = label_to_speech(element)
|
|
187
|
+
if len(label_text) > 0:
|
|
188
|
+
if len(attribs) == 0:
|
|
189
|
+
intro = f"A {tag_speech} element with label {label_text}. The element has no attributes."
|
|
190
|
+
else:
|
|
191
|
+
intro = f"A {tag_speech} element with label {label_text}. There are these attributes: "
|
|
192
|
+
else:
|
|
193
|
+
if len(attribs) == 0:
|
|
194
|
+
intro = f"A {tag_speech} element with no attributes."
|
|
195
|
+
else:
|
|
196
|
+
intro = f"A {tag_speech} element with these attributes: "
|
|
197
|
+
element.text = None
|
|
198
|
+
else:
|
|
199
|
+
element.set('ref', 'element-'+str(element_num))
|
|
200
|
+
tag_speech = pronounciations.get(element.tag, element.tag)
|
|
201
|
+
if len(attribs) == 0:
|
|
202
|
+
intro = f"A {tag_speech} element with no attributes"
|
|
203
|
+
else:
|
|
204
|
+
intro = f"A {tag_speech} element with these attributes: "
|
|
205
|
+
element.set("text", intro + attributes_to_speech(attribs))
|
|
206
|
+
element_num += 1
|
|
207
|
+
element.tag = "annotation"
|
|
208
|
+
|
|
209
|
+
log.error(ET.tostring(diagram, pretty_print=True))
|
|
210
|
+
return diagram
|
|
211
|
+
|
|
212
|
+
def attributes_to_speech(attribs):
|
|
213
|
+
strings = []
|
|
214
|
+
for key, value in attribs.items():
|
|
215
|
+
strings.append(f"{key} has value {value}")
|
|
216
|
+
return ', '.join(strings)
|
|
217
|
+
|
|
218
|
+
def label_to_speech(element):
|
|
219
|
+
strings = []
|
|
220
|
+
if (element.text is not None and
|
|
221
|
+
len(element.text.strip()) > 0):
|
|
222
|
+
strings.append(element.text.strip())
|
|
223
|
+
for child in element:
|
|
224
|
+
child_speech = label_subelements.get(child.tag, child.tag)
|
|
225
|
+
strings.append('begin ' + child_speech)
|
|
226
|
+
strings.append(child.text.strip())
|
|
227
|
+
strings.append('end ' + child_speech)
|
|
228
|
+
if (child.tail is not None and
|
|
229
|
+
child.tail.strip() is not None):
|
|
230
|
+
strings.append(child.tail.strip())
|
|
231
|
+
return ' '.join(strings)
|
|
@@ -9,6 +9,7 @@ from . import utilities as util
|
|
|
9
9
|
from . import CTM
|
|
10
10
|
from . import label
|
|
11
11
|
from . import math_utilities as math_util
|
|
12
|
+
from . import annotations
|
|
12
13
|
|
|
13
14
|
log = logging.getLogger('prefigure')
|
|
14
15
|
|
|
@@ -31,6 +32,16 @@ class Diagram:
|
|
|
31
32
|
self.environment = environment
|
|
32
33
|
self.caption = ""
|
|
33
34
|
|
|
35
|
+
self.add_default_annotations = True
|
|
36
|
+
if (self.environment == 'pyodide' and
|
|
37
|
+
len(self.diagram_element.xpath('.//annotations')) == 0
|
|
38
|
+
):
|
|
39
|
+
diagram_annotations = annotations.diagram_to_speech(diagram_element)
|
|
40
|
+
annotations_tree = ET.SubElement(self.diagram_element,
|
|
41
|
+
'annotations')
|
|
42
|
+
annotations_tree.append(diagram_annotations)
|
|
43
|
+
self.add_default_annotations = False
|
|
44
|
+
|
|
34
45
|
math_util.set_diagram(self)
|
|
35
46
|
|
|
36
47
|
label.init(self.format, self.environment)
|
|
@@ -582,6 +593,8 @@ class Diagram:
|
|
|
582
593
|
self.annotations_root = ET.Element('annotations')
|
|
583
594
|
|
|
584
595
|
def add_default_annotation(self, annotation):
|
|
596
|
+
if not self.add_default_annotations:
|
|
597
|
+
return
|
|
585
598
|
self.default_annotations.append(annotation)
|
|
586
599
|
|
|
587
600
|
def get_default_annotations(self):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/coordinates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/label_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/math_utilities.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/parametric_curve.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/riemann_sum.py
RENAMED
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/slope_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/tangent_line.py
RENAMED
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/core/user_namespace.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/js/mj-sre-page.js
RENAMED
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/resources/js/package.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/scripts/__init__.py
RENAMED
|
File without changes
|
{prefig-0.4.6.dev20250926053320 → prefig-0.4.6.dev20250928053207}/prefig/scripts/install_mj.py
RENAMED
|
File without changes
|