prefig 0.3.8__py3-none-any.whl → 0.3.9__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/__init__.py +1 -0
- prefig/core/axes.py +5 -5
- prefig/core/graph.py +4 -0
- prefig/core/image.py +127 -0
- prefig/core/math_utilities.py +3 -0
- prefig/core/path.py +25 -0
- prefig/core/rectangle.py +4 -2
- prefig/core/slope_field.py +13 -0
- prefig/core/tags.py +3 -0
- prefig/core/user_namespace.py +2 -0
- prefig/resources/schema/pf_schema.rnc +38 -29
- prefig/resources/schema/pf_schema.rng +98 -76
- {prefig-0.3.8.dist-info → prefig-0.3.9.dist-info}/METADATA +1 -1
- {prefig-0.3.8.dist-info → prefig-0.3.9.dist-info}/RECORD +17 -16
- {prefig-0.3.8.dist-info → prefig-0.3.9.dist-info}/LICENSE +0 -0
- {prefig-0.3.8.dist-info → prefig-0.3.9.dist-info}/WHEEL +0 -0
- {prefig-0.3.8.dist-info → prefig-0.3.9.dist-info}/entry_points.txt +0 -0
prefig/core/__init__.py
CHANGED
prefig/core/axes.py
CHANGED
|
@@ -748,7 +748,7 @@ def label_text(x, commas):
|
|
|
748
748
|
suffix = text[period:]
|
|
749
749
|
text = text[:period]
|
|
750
750
|
while len(text) > 3:
|
|
751
|
-
suffix = ',' + text[-3:] + suffix
|
|
751
|
+
suffix = '{,}' + text[-3:] + suffix
|
|
752
752
|
text = text[:-3]
|
|
753
753
|
text = text + suffix
|
|
754
754
|
return r'\text{' + prefix + text + r'}'
|
|
@@ -787,8 +787,8 @@ def tick_mark(element, diagram, parent, outline_status):
|
|
|
787
787
|
size = un.valid_eval(element.get('size'))
|
|
788
788
|
if not isinstance(size, np.ndarray):
|
|
789
789
|
size = (size, size)
|
|
790
|
-
|
|
791
|
-
|
|
790
|
+
else:
|
|
791
|
+
size = (3,3)
|
|
792
792
|
|
|
793
793
|
if tactile:
|
|
794
794
|
size = (18,0)
|
|
@@ -869,8 +869,8 @@ def tick_mark(element, diagram, parent, outline_status):
|
|
|
869
869
|
|
|
870
870
|
if el_copy.get('alignment', None) is None:
|
|
871
871
|
el_copy.set('alignment', align)
|
|
872
|
-
|
|
873
|
-
|
|
872
|
+
if el_copy.get('offset', None) is None:
|
|
873
|
+
el_copy.set('offset', off)
|
|
874
874
|
el_copy.set("user-coords", "no")
|
|
875
875
|
el_copy.set("anchor", util.pt2str(p, spacer=","))
|
|
876
876
|
label.label(el_copy, diagram, parent, outline_status)
|
prefig/core/graph.py
CHANGED
|
@@ -29,6 +29,10 @@ def graph(element, diagram, parent, outline_status = None):
|
|
|
29
29
|
domain = [bbox[0], bbox[2]]
|
|
30
30
|
else:
|
|
31
31
|
domain = un.valid_eval(domain)
|
|
32
|
+
if domain[0] == -np.inf:
|
|
33
|
+
domain[0] = bbox[0]
|
|
34
|
+
if domain[1] == np.inf:
|
|
35
|
+
domain[1] = bbox[2]
|
|
32
36
|
|
|
33
37
|
# if there are arrows, we need to pull the domain in by two pixels
|
|
34
38
|
# so that the arrows don't go outside the domain
|
prefig/core/image.py
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import lxml.etree as ET
|
|
2
|
+
import logging
|
|
3
|
+
import numpy as np
|
|
4
|
+
import base64
|
|
5
|
+
import lxml.etree as ET
|
|
6
|
+
from . import user_namespace as un
|
|
7
|
+
from . import group
|
|
8
|
+
from . import utilities as util
|
|
9
|
+
from . import CTM
|
|
10
|
+
|
|
11
|
+
log = logging.getLogger('prefigure')
|
|
12
|
+
|
|
13
|
+
type_dict = {'jpg':'jpeg',
|
|
14
|
+
'jpeg':'jpeg',
|
|
15
|
+
'png':'png',
|
|
16
|
+
'gif':'gif',
|
|
17
|
+
'svg':'svg'}
|
|
18
|
+
|
|
19
|
+
# Allows a block of XML to repeat with a changing parameter
|
|
20
|
+
|
|
21
|
+
def image(element, diagram, parent, outline_status):
|
|
22
|
+
if len(element) == 0:
|
|
23
|
+
log.error("An <image> must contain content to replace the image in a tactile build")
|
|
24
|
+
return;
|
|
25
|
+
|
|
26
|
+
if diagram.output_format() == 'tactile':
|
|
27
|
+
element.tag = 'group'
|
|
28
|
+
group.group(element, diagram, parent, outline_status)
|
|
29
|
+
return
|
|
30
|
+
|
|
31
|
+
source = element.get('source', None)
|
|
32
|
+
if source is None:
|
|
33
|
+
log.error("An <image> needs a @source attribute")
|
|
34
|
+
return
|
|
35
|
+
try:
|
|
36
|
+
ll = un.valid_eval(element.get('lower-left', '(0,0)'))
|
|
37
|
+
dims = un.valid_eval(element.get('dimensions', '(1,1)'))
|
|
38
|
+
center = element.get('center', None)
|
|
39
|
+
if center is not None:
|
|
40
|
+
center = un.valid_eval(center)
|
|
41
|
+
ll = center - 0.5 * dims
|
|
42
|
+
else:
|
|
43
|
+
center = ll + 0.5*dims
|
|
44
|
+
rotation = un.valid_eval(element.get('rotate', '0'))
|
|
45
|
+
scale = un.valid_eval(element.get('scale', '1'))
|
|
46
|
+
except:
|
|
47
|
+
log.error("Error parsing placement data in an <image>")
|
|
48
|
+
return
|
|
49
|
+
|
|
50
|
+
file_type = None
|
|
51
|
+
if element.get('filetype', None) is not None:
|
|
52
|
+
file_type = type_dict.get(element.get('filetype'), None)
|
|
53
|
+
if file_type is None:
|
|
54
|
+
suffix = source.split('.')[-1]
|
|
55
|
+
file_type = type_dict.get(suffix, None)
|
|
56
|
+
if file_type is None:
|
|
57
|
+
log.error(f"Cannot determine the type of image in {source}")
|
|
58
|
+
return
|
|
59
|
+
|
|
60
|
+
ll_svg = diagram.transform(ll)
|
|
61
|
+
ur_svg = diagram.transform(ll + dims)
|
|
62
|
+
center_svg = diagram.transform(center)
|
|
63
|
+
width, height = ur_svg - ll_svg
|
|
64
|
+
height = -height
|
|
65
|
+
|
|
66
|
+
if diagram.get_environment() == 'pretext':
|
|
67
|
+
source = 'data/' + source
|
|
68
|
+
else:
|
|
69
|
+
assets_dir = diagram.get_external()
|
|
70
|
+
if assets_dir is not None:
|
|
71
|
+
assets_dir = assets_dir.strip()
|
|
72
|
+
if assets_dir[-1] != '/':
|
|
73
|
+
assets_dir += '/'
|
|
74
|
+
source = assets_dir + source
|
|
75
|
+
|
|
76
|
+
opacity = element.get('opacity', None)
|
|
77
|
+
if opacity is not None:
|
|
78
|
+
opacity = un.valid_eval(opacity)
|
|
79
|
+
if file_type == 'svg':
|
|
80
|
+
svg_tree = ET.parse(source)
|
|
81
|
+
svg_root = svg_tree.getroot()
|
|
82
|
+
svg_width = svg_root.get('width', None)
|
|
83
|
+
svg_height = svg_root.get('height', None)
|
|
84
|
+
|
|
85
|
+
object = ET.SubElement(parent, 'foreignObject')
|
|
86
|
+
object.set('x', util.float2str(center_svg[0]-width/2))
|
|
87
|
+
object.set('y', util.float2str(center_svg[1]-height/2))
|
|
88
|
+
object.set('width', util.float2str(width))
|
|
89
|
+
object.set('height', util.float2str(height))
|
|
90
|
+
svg_root.set('width', '100%')
|
|
91
|
+
svg_root.set('height', '100%')
|
|
92
|
+
if svg_root.get('viewBox', None) is None:
|
|
93
|
+
svg_root.set('viewBox', f"0 0 {svg_width} {svg_height}")
|
|
94
|
+
object.append(svg_root)
|
|
95
|
+
diagram.add_id(object, element.get('id'))
|
|
96
|
+
svg_root.attrib.pop('id', None)
|
|
97
|
+
if opacity is not None:
|
|
98
|
+
object.set('opacity', util.float2str(opacity))
|
|
99
|
+
return
|
|
100
|
+
|
|
101
|
+
image_el = ET.SubElement(parent, 'image')
|
|
102
|
+
image_el.set('x', util.float2str(-width/2))
|
|
103
|
+
image_el.set('y', util.float2str(-height/2))
|
|
104
|
+
image_el.set('width', util.float2str(width))
|
|
105
|
+
image_el.set('height', util.float2str(height))
|
|
106
|
+
if opacity is not None:
|
|
107
|
+
image_el.set('opacity', util.float2str(opacity))
|
|
108
|
+
diagram.add_id(image_el, element.get('id'))
|
|
109
|
+
|
|
110
|
+
with open(source, "rb") as image_file:
|
|
111
|
+
encoded_string = base64.b64encode(image_file.read())
|
|
112
|
+
encoded_string = encoded_string.decode('utf-8')
|
|
113
|
+
ref = f"data:image/{file_type};base64,{encoded_string}"
|
|
114
|
+
image_el.set('href', ref)
|
|
115
|
+
|
|
116
|
+
transform_pieces = [CTM.translatestr(*center_svg)]
|
|
117
|
+
|
|
118
|
+
if isinstance(scale, np.ndarray):
|
|
119
|
+
transform_pieces.append(CTM.scalestr(*scale))
|
|
120
|
+
elif scale != '1':
|
|
121
|
+
transform_pieces.append(f"scale({scale})")
|
|
122
|
+
|
|
123
|
+
if rotation != 0:
|
|
124
|
+
transform_pieces.append(f"rotate({-rotation})")
|
|
125
|
+
|
|
126
|
+
image_el.set('transform', ' '.join(transform_pieces))
|
|
127
|
+
|
prefig/core/math_utilities.py
CHANGED
prefig/core/path.py
CHANGED
|
@@ -480,6 +480,31 @@ def decorate(child, diagram, current_point, cmds):
|
|
|
480
480
|
cmds += ['L', util.pt2str(ctm.transform((x_pos,0)))]
|
|
481
481
|
cmds += ['L', util.pt2str(ctm.transform((length, 0)))]
|
|
482
482
|
|
|
483
|
+
if decoration_data[0] == 'ragged':
|
|
484
|
+
# offset, step
|
|
485
|
+
try:
|
|
486
|
+
data = [d.split('=') for d in decoration_data[1:]]
|
|
487
|
+
data = {k:v for k, v in data}
|
|
488
|
+
except:
|
|
489
|
+
log.error("Error in wave decoration data")
|
|
490
|
+
return
|
|
491
|
+
try:
|
|
492
|
+
offset = un.valid_eval(data['offset'])
|
|
493
|
+
step = un.valid_eval(data['step'])
|
|
494
|
+
except:
|
|
495
|
+
log.error("Error in retrieving the step and an offset in a ragged decoration")
|
|
496
|
+
|
|
497
|
+
np.random.seed(int(data.get('seed','1')))
|
|
498
|
+
x_pos = 0
|
|
499
|
+
y_pos = 0
|
|
500
|
+
p = ctm.transform((0,0))
|
|
501
|
+
cmds += ['L', util.pt2str(ctm.transform((0,0)))]
|
|
502
|
+
while x_pos < length-step:
|
|
503
|
+
y_pos = 2 * offset * (np.random.random()-0.5)
|
|
504
|
+
x_pos += (0.5*np.random.random()+0.75)*step
|
|
505
|
+
cmds += ['L', util.pt2str(ctm.transform((x_pos,y_pos)))]
|
|
506
|
+
cmds += ['L', util.pt2str(ctm.transform((length, 0)))]
|
|
507
|
+
|
|
483
508
|
if decoration_data[0] == 'capacitor':
|
|
484
509
|
try:
|
|
485
510
|
data = [d.split('=') for d in decoration_data[1:]]
|
prefig/core/rectangle.py
CHANGED
|
@@ -71,9 +71,11 @@ def rectangle(element, diagram, parent, outline_status):
|
|
|
71
71
|
path.set('d', ' '.join(cmds))
|
|
72
72
|
|
|
73
73
|
if diagram.output_format() == 'tactile':
|
|
74
|
-
|
|
74
|
+
stroke = element.get('stroke')
|
|
75
|
+
fill = element.get('fill')
|
|
76
|
+
if stroke is not None and stroke != 'none':
|
|
75
77
|
element.set('stroke', 'black')
|
|
76
|
-
if
|
|
78
|
+
if fill is not None and fill != 'none':
|
|
77
79
|
element.set('fill', 'lightgray')
|
|
78
80
|
else:
|
|
79
81
|
util.set_attr(element, 'stroke', 'none')
|
prefig/core/slope_field.py
CHANGED
|
@@ -26,6 +26,8 @@ def slope_field(element, diagram, parent, outline_status):
|
|
|
26
26
|
return
|
|
27
27
|
bbox = diagram.bbox()
|
|
28
28
|
|
|
29
|
+
if element.get('id', None) is None:
|
|
30
|
+
diagram.add_id(element, None)
|
|
29
31
|
# We're going to turn this element into a group and add lines to it
|
|
30
32
|
element.tag = "group"
|
|
31
33
|
if element.get('outline', 'no') == 'yes':
|
|
@@ -127,6 +129,9 @@ def vector_field(element, diagram, parent, outline_status):
|
|
|
127
129
|
return
|
|
128
130
|
bbox = diagram.bbox()
|
|
129
131
|
|
|
132
|
+
if element.get('id', None) is None:
|
|
133
|
+
diagram.add_id(element, None)
|
|
134
|
+
|
|
130
135
|
# We're going to turn this element into a group and add lines to it
|
|
131
136
|
element.tag = "group"
|
|
132
137
|
if element.get('outline', 'no') == 'yes':
|
|
@@ -196,6 +201,7 @@ def vector_field(element, diagram, parent, outline_status):
|
|
|
196
201
|
# we will go through and generate the vectors first
|
|
197
202
|
# since we'll need to scale them
|
|
198
203
|
max_scale = 0
|
|
204
|
+
exponent = un.valid_eval(element.get('exponent', '1'))
|
|
199
205
|
x = rx[0]
|
|
200
206
|
while x <= rx[2]:
|
|
201
207
|
y = ry[0]
|
|
@@ -211,6 +217,13 @@ def vector_field(element, diagram, parent, outline_status):
|
|
|
211
217
|
return;
|
|
212
218
|
except:
|
|
213
219
|
pass
|
|
220
|
+
norm = math_util.length(f_value)
|
|
221
|
+
if norm < 1e-10:
|
|
222
|
+
f_value = np.array((0,0))
|
|
223
|
+
else:
|
|
224
|
+
# we will scale the length by length**exponent
|
|
225
|
+
# to promote the length of shorter vectors
|
|
226
|
+
f_value = norm**exponent * (1/norm * f_value)
|
|
214
227
|
max_scale = max(max_scale,
|
|
215
228
|
abs((f_value[0])/rx[1]),
|
|
216
229
|
abs((f_value[1])/ry[1]))
|
prefig/core/tags.py
CHANGED
|
@@ -11,6 +11,7 @@ from . import definition
|
|
|
11
11
|
from . import graph
|
|
12
12
|
from . import grid_axes
|
|
13
13
|
from . import group
|
|
14
|
+
from . import image
|
|
14
15
|
from . import implicit
|
|
15
16
|
from . import label
|
|
16
17
|
from . import legend
|
|
@@ -41,6 +42,7 @@ tag_dict = {
|
|
|
41
42
|
'caption': label.caption,
|
|
42
43
|
'circle': circle.circle,
|
|
43
44
|
'clip': clip.clip,
|
|
45
|
+
'contour': implicit.implicit_curve,
|
|
44
46
|
'coordinates': coordinates.coordinates,
|
|
45
47
|
'definition': definition.definition,
|
|
46
48
|
'derivative': definition.derivative,
|
|
@@ -50,6 +52,7 @@ tag_dict = {
|
|
|
50
52
|
'grid-axes': grid_axes.grid_axes,
|
|
51
53
|
'group': group.group,
|
|
52
54
|
'histogram': statistics.histogram,
|
|
55
|
+
'image': image.image,
|
|
53
56
|
'implicit-curve': implicit.implicit_curve,
|
|
54
57
|
'label': label.label,
|
|
55
58
|
'legend': legend.legend,
|
prefig/core/user_namespace.py
CHANGED
|
@@ -66,6 +66,8 @@ def validate_node(node, args=None):
|
|
|
66
66
|
return True
|
|
67
67
|
if isinstance(node, ast.Expression):
|
|
68
68
|
return validate_node(node.body, args)
|
|
69
|
+
if isinstance(node, ast.Starred):
|
|
70
|
+
return validate_node(node.value)
|
|
69
71
|
if isinstance(node, ast.Name):
|
|
70
72
|
if node.id in variables:
|
|
71
73
|
return True
|
|
@@ -313,12 +313,13 @@ GraphicalElements =
|
|
|
313
313
|
Area-Under-Curve* &
|
|
314
314
|
Axes* &
|
|
315
315
|
Circle* &
|
|
316
|
+
Contour* &
|
|
316
317
|
Ellipse* &
|
|
317
|
-
Gradient* &
|
|
318
318
|
Graph* &
|
|
319
319
|
Grid* &
|
|
320
320
|
Grid-Axes* &
|
|
321
321
|
Histogram* &
|
|
322
|
+
Image*&
|
|
322
323
|
Implicit-Curve* &
|
|
323
324
|
Label* &
|
|
324
325
|
Legend* &
|
|
@@ -422,34 +423,6 @@ Axes = element axes {
|
|
|
422
423
|
YLabel?
|
|
423
424
|
}
|
|
424
425
|
|
|
425
|
-
Gradient = element gradient {
|
|
426
|
-
attribute at {text}?,
|
|
427
|
-
attribute function {text}?,
|
|
428
|
-
attribute spacings {text}?,
|
|
429
|
-
attribute scale {text}?,
|
|
430
|
-
attribute curve {text}?,
|
|
431
|
-
attribute domain {text}?,
|
|
432
|
-
attribute N {text}?,
|
|
433
|
-
attribute arrow-width {text}?,
|
|
434
|
-
attribute arrow-angles {text?}?,
|
|
435
|
-
StrokeAttributes,
|
|
436
|
-
CommonAttributes
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
Vector-Field = element vector-field {
|
|
440
|
-
attribute at {text}?,
|
|
441
|
-
attribute function {text}?,
|
|
442
|
-
attribute spacings {text}?,
|
|
443
|
-
attribute scale {text}?,
|
|
444
|
-
attribute curve {text}?,
|
|
445
|
-
attribute domain {text}?,
|
|
446
|
-
attribute N {text}?,
|
|
447
|
-
attribute arrow-width {text}?,
|
|
448
|
-
attribute arrow-angles {text?}?,
|
|
449
|
-
StrokeAttributes,
|
|
450
|
-
CommonAttributes
|
|
451
|
-
}
|
|
452
|
-
|
|
453
426
|
Grid = element grid {
|
|
454
427
|
attribute at {text}?,
|
|
455
428
|
attribute spacings {text}?,
|
|
@@ -506,6 +479,16 @@ Tick-Mark = element tick-mark {
|
|
|
506
479
|
LabelText?
|
|
507
480
|
}
|
|
508
481
|
|
|
482
|
+
Contour = element contour {
|
|
483
|
+
attribute at {text}?,
|
|
484
|
+
attribute function {text},
|
|
485
|
+
attribute k {text}?,
|
|
486
|
+
attribute depth {text}?,
|
|
487
|
+
attribute initial-depth {text}?,
|
|
488
|
+
StrokeAttributes,
|
|
489
|
+
CommonAttributes
|
|
490
|
+
}
|
|
491
|
+
|
|
509
492
|
Circle = element circle {
|
|
510
493
|
attribute at {text}?,
|
|
511
494
|
attribute center {text},
|
|
@@ -538,6 +521,18 @@ Graph = element graph {
|
|
|
538
521
|
CommonAttributes
|
|
539
522
|
}
|
|
540
523
|
|
|
524
|
+
Image = element image {
|
|
525
|
+
attribute at {text}?,
|
|
526
|
+
attribute source{text},
|
|
527
|
+
attribute lower-left {text}?,
|
|
528
|
+
attribute center {text}?,
|
|
529
|
+
attribute dimensions {text}?,
|
|
530
|
+
attribute opacity {text}?,
|
|
531
|
+
attribute filetype {"svg"|"png"|"gif"|"jpeg"|"jpg"}?,
|
|
532
|
+
attribute rotate {text}?,
|
|
533
|
+
attribute scale {text}?
|
|
534
|
+
}
|
|
535
|
+
|
|
541
536
|
Histogram = element histogram {
|
|
542
537
|
attribute at {text}?,
|
|
543
538
|
attribute data {text},
|
|
@@ -815,4 +810,18 @@ Vector = element vector {
|
|
|
815
810
|
CommonAttributes
|
|
816
811
|
}
|
|
817
812
|
|
|
813
|
+
Vector-Field = element vector-field {
|
|
814
|
+
attribute at {text}?,
|
|
815
|
+
attribute function {text}?,
|
|
816
|
+
attribute spacings {text}?,
|
|
817
|
+
attribute scale {text}?,
|
|
818
|
+
attribute curve {text}?,
|
|
819
|
+
attribute domain {text}?,
|
|
820
|
+
attribute N {text}?,
|
|
821
|
+
attribute arrow-width {text}?,
|
|
822
|
+
attribute arrow-angles {text?}?,
|
|
823
|
+
StrokeAttributes,
|
|
824
|
+
CommonAttributes
|
|
825
|
+
}
|
|
826
|
+
|
|
818
827
|
}
|
|
@@ -763,10 +763,10 @@
|
|
|
763
763
|
<ref name="Circle"/>
|
|
764
764
|
</zeroOrMore>
|
|
765
765
|
<zeroOrMore>
|
|
766
|
-
<ref name="
|
|
766
|
+
<ref name="Contour"/>
|
|
767
767
|
</zeroOrMore>
|
|
768
768
|
<zeroOrMore>
|
|
769
|
-
<ref name="
|
|
769
|
+
<ref name="Ellipse"/>
|
|
770
770
|
</zeroOrMore>
|
|
771
771
|
<zeroOrMore>
|
|
772
772
|
<ref name="Graph"/>
|
|
@@ -780,6 +780,9 @@
|
|
|
780
780
|
<zeroOrMore>
|
|
781
781
|
<ref name="Histogram"/>
|
|
782
782
|
</zeroOrMore>
|
|
783
|
+
<zeroOrMore>
|
|
784
|
+
<ref name="Image"/>
|
|
785
|
+
</zeroOrMore>
|
|
783
786
|
<zeroOrMore>
|
|
784
787
|
<ref name="Implicit-Curve"/>
|
|
785
788
|
</zeroOrMore>
|
|
@@ -1122,80 +1125,6 @@
|
|
|
1122
1125
|
</optional>
|
|
1123
1126
|
</element>
|
|
1124
1127
|
</define>
|
|
1125
|
-
<define name="Gradient">
|
|
1126
|
-
<element name="gradient">
|
|
1127
|
-
<optional>
|
|
1128
|
-
<attribute name="at"/>
|
|
1129
|
-
</optional>
|
|
1130
|
-
<optional>
|
|
1131
|
-
<attribute name="function"/>
|
|
1132
|
-
</optional>
|
|
1133
|
-
<optional>
|
|
1134
|
-
<attribute name="spacings"/>
|
|
1135
|
-
</optional>
|
|
1136
|
-
<optional>
|
|
1137
|
-
<attribute name="scale"/>
|
|
1138
|
-
</optional>
|
|
1139
|
-
<optional>
|
|
1140
|
-
<attribute name="curve"/>
|
|
1141
|
-
</optional>
|
|
1142
|
-
<optional>
|
|
1143
|
-
<attribute name="domain"/>
|
|
1144
|
-
</optional>
|
|
1145
|
-
<optional>
|
|
1146
|
-
<attribute name="N"/>
|
|
1147
|
-
</optional>
|
|
1148
|
-
<optional>
|
|
1149
|
-
<attribute name="arrow-width"/>
|
|
1150
|
-
</optional>
|
|
1151
|
-
<optional>
|
|
1152
|
-
<attribute name="arrow-angles">
|
|
1153
|
-
<optional>
|
|
1154
|
-
<text/>
|
|
1155
|
-
</optional>
|
|
1156
|
-
</attribute>
|
|
1157
|
-
</optional>
|
|
1158
|
-
<ref name="StrokeAttributes"/>
|
|
1159
|
-
<ref name="CommonAttributes"/>
|
|
1160
|
-
</element>
|
|
1161
|
-
</define>
|
|
1162
|
-
<define name="Vector-Field">
|
|
1163
|
-
<element name="vector-field">
|
|
1164
|
-
<optional>
|
|
1165
|
-
<attribute name="at"/>
|
|
1166
|
-
</optional>
|
|
1167
|
-
<optional>
|
|
1168
|
-
<attribute name="function"/>
|
|
1169
|
-
</optional>
|
|
1170
|
-
<optional>
|
|
1171
|
-
<attribute name="spacings"/>
|
|
1172
|
-
</optional>
|
|
1173
|
-
<optional>
|
|
1174
|
-
<attribute name="scale"/>
|
|
1175
|
-
</optional>
|
|
1176
|
-
<optional>
|
|
1177
|
-
<attribute name="curve"/>
|
|
1178
|
-
</optional>
|
|
1179
|
-
<optional>
|
|
1180
|
-
<attribute name="domain"/>
|
|
1181
|
-
</optional>
|
|
1182
|
-
<optional>
|
|
1183
|
-
<attribute name="N"/>
|
|
1184
|
-
</optional>
|
|
1185
|
-
<optional>
|
|
1186
|
-
<attribute name="arrow-width"/>
|
|
1187
|
-
</optional>
|
|
1188
|
-
<optional>
|
|
1189
|
-
<attribute name="arrow-angles">
|
|
1190
|
-
<optional>
|
|
1191
|
-
<text/>
|
|
1192
|
-
</optional>
|
|
1193
|
-
</attribute>
|
|
1194
|
-
</optional>
|
|
1195
|
-
<ref name="StrokeAttributes"/>
|
|
1196
|
-
<ref name="CommonAttributes"/>
|
|
1197
|
-
</element>
|
|
1198
|
-
</define>
|
|
1199
1128
|
<define name="Grid">
|
|
1200
1129
|
<element name="grid">
|
|
1201
1130
|
<optional>
|
|
@@ -1407,6 +1336,25 @@
|
|
|
1407
1336
|
</optional>
|
|
1408
1337
|
</element>
|
|
1409
1338
|
</define>
|
|
1339
|
+
<define name="Contour">
|
|
1340
|
+
<element name="contour">
|
|
1341
|
+
<optional>
|
|
1342
|
+
<attribute name="at"/>
|
|
1343
|
+
</optional>
|
|
1344
|
+
<attribute name="function"/>
|
|
1345
|
+
<optional>
|
|
1346
|
+
<attribute name="k"/>
|
|
1347
|
+
</optional>
|
|
1348
|
+
<optional>
|
|
1349
|
+
<attribute name="depth"/>
|
|
1350
|
+
</optional>
|
|
1351
|
+
<optional>
|
|
1352
|
+
<attribute name="initial-depth"/>
|
|
1353
|
+
</optional>
|
|
1354
|
+
<ref name="StrokeAttributes"/>
|
|
1355
|
+
<ref name="CommonAttributes"/>
|
|
1356
|
+
</element>
|
|
1357
|
+
</define>
|
|
1410
1358
|
<define name="Circle">
|
|
1411
1359
|
<element name="circle">
|
|
1412
1360
|
<optional>
|
|
@@ -1485,6 +1433,43 @@
|
|
|
1485
1433
|
<ref name="CommonAttributes"/>
|
|
1486
1434
|
</element>
|
|
1487
1435
|
</define>
|
|
1436
|
+
<define name="Image">
|
|
1437
|
+
<element name="image">
|
|
1438
|
+
<optional>
|
|
1439
|
+
<attribute name="at"/>
|
|
1440
|
+
</optional>
|
|
1441
|
+
<attribute name="source"/>
|
|
1442
|
+
<optional>
|
|
1443
|
+
<attribute name="lower-left"/>
|
|
1444
|
+
</optional>
|
|
1445
|
+
<optional>
|
|
1446
|
+
<attribute name="center"/>
|
|
1447
|
+
</optional>
|
|
1448
|
+
<optional>
|
|
1449
|
+
<attribute name="dimensions"/>
|
|
1450
|
+
</optional>
|
|
1451
|
+
<optional>
|
|
1452
|
+
<attribute name="opacity"/>
|
|
1453
|
+
</optional>
|
|
1454
|
+
<optional>
|
|
1455
|
+
<attribute name="filetype">
|
|
1456
|
+
<choice>
|
|
1457
|
+
<value>svg</value>
|
|
1458
|
+
<value>png</value>
|
|
1459
|
+
<value>gif</value>
|
|
1460
|
+
<value>jpeg</value>
|
|
1461
|
+
<value>jpg</value>
|
|
1462
|
+
</choice>
|
|
1463
|
+
</attribute>
|
|
1464
|
+
</optional>
|
|
1465
|
+
<optional>
|
|
1466
|
+
<attribute name="rotate"/>
|
|
1467
|
+
</optional>
|
|
1468
|
+
<optional>
|
|
1469
|
+
<attribute name="scale"/>
|
|
1470
|
+
</optional>
|
|
1471
|
+
</element>
|
|
1472
|
+
</define>
|
|
1488
1473
|
<define name="Histogram">
|
|
1489
1474
|
<element name="histogram">
|
|
1490
1475
|
<optional>
|
|
@@ -2198,4 +2183,41 @@
|
|
|
2198
2183
|
<ref name="CommonAttributes"/>
|
|
2199
2184
|
</element>
|
|
2200
2185
|
</define>
|
|
2186
|
+
<define name="Vector-Field">
|
|
2187
|
+
<element name="vector-field">
|
|
2188
|
+
<optional>
|
|
2189
|
+
<attribute name="at"/>
|
|
2190
|
+
</optional>
|
|
2191
|
+
<optional>
|
|
2192
|
+
<attribute name="function"/>
|
|
2193
|
+
</optional>
|
|
2194
|
+
<optional>
|
|
2195
|
+
<attribute name="spacings"/>
|
|
2196
|
+
</optional>
|
|
2197
|
+
<optional>
|
|
2198
|
+
<attribute name="scale"/>
|
|
2199
|
+
</optional>
|
|
2200
|
+
<optional>
|
|
2201
|
+
<attribute name="curve"/>
|
|
2202
|
+
</optional>
|
|
2203
|
+
<optional>
|
|
2204
|
+
<attribute name="domain"/>
|
|
2205
|
+
</optional>
|
|
2206
|
+
<optional>
|
|
2207
|
+
<attribute name="N"/>
|
|
2208
|
+
</optional>
|
|
2209
|
+
<optional>
|
|
2210
|
+
<attribute name="arrow-width"/>
|
|
2211
|
+
</optional>
|
|
2212
|
+
<optional>
|
|
2213
|
+
<attribute name="arrow-angles">
|
|
2214
|
+
<optional>
|
|
2215
|
+
<text/>
|
|
2216
|
+
</optional>
|
|
2217
|
+
</attribute>
|
|
2218
|
+
</optional>
|
|
2219
|
+
<ref name="StrokeAttributes"/>
|
|
2220
|
+
<ref name="CommonAttributes"/>
|
|
2221
|
+
</element>
|
|
2222
|
+
</define>
|
|
2201
2223
|
</grammar>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
prefig/__init__.py,sha256=tAf78JkO5kBvFM23RmchK8TEDYO6v8AXqzOv-kq7TR0,53
|
|
2
2
|
prefig/cli.py,sha256=-jbXTVb2Vao4uefq3ia69DDh7ZQivIO-H1grzCVPg0I,12495
|
|
3
3
|
prefig/core/CTM.py,sha256=P32b5rfJD_8QwMNCHRAS6lIB5ellBi1gaSdhxTV4a00,5781
|
|
4
|
-
prefig/core/__init__.py,sha256=
|
|
4
|
+
prefig/core/__init__.py,sha256=roT0a8-iBrp8WXTbPN5RzMWFiCXfpKrEXa2xE-F-yBo,728
|
|
5
5
|
prefig/core/annotations.py,sha256=9wStnLhEHFmkIocufHLiBcUZ3NSce7ZESor5kjj-vzg,3998
|
|
6
6
|
prefig/core/area.py,sha256=U-AxXvaZJWgVccpLlh-aaRfM_QtTa09NR2TqAd8Yk0o,3710
|
|
7
7
|
prefig/core/arrow.py,sha256=h8lFm1rMdpiZRyQu5kvAiptBmMYr5aKCZuB5JypAGDM,11283
|
|
8
|
-
prefig/core/axes.py,sha256=
|
|
8
|
+
prefig/core/axes.py,sha256=xMO_X6PbKZ5ptEdaQJk0iZ1iV5mGyZ3Apq0eBrGUoCk,31679
|
|
9
9
|
prefig/core/calculus.py,sha256=Q4kSGTTTeQYEEVKgmYWpFP0JLHmCsBchB5OF9qSclQk,498
|
|
10
10
|
prefig/core/circle.py,sha256=_v1eMVhl4nnD4WXCz-Boa_SAdQg_kKeU3NhP42z2Yzw,15668
|
|
11
11
|
prefig/core/clip.py,sha256=X3TcFYPuZwjZ9SFBWMc1MYY__6XTJqLafPeOLFNOdIE,806
|
|
@@ -14,31 +14,32 @@ prefig/core/coordinates.py,sha256=vEAJ8kL9S1VylxWysqY5qW2WyCMyHj42yFkuAzjfqFs,35
|
|
|
14
14
|
prefig/core/definition.py,sha256=7LiaCxQwwEPdcnMpcMgrkZEfAoTc5ng8LO6Nf50Htwg,1033
|
|
15
15
|
prefig/core/diagram.py,sha256=7Hsa8xOpGmLnln2Chl-ofVl_bG6ZOEJPGV2vE1V8RnI,22599
|
|
16
16
|
prefig/core/diffeqs.py,sha256=aLXcmTsnfTG6L2-RiNfSaijzwmJF6xJcQpNQdDAWTQo,7127
|
|
17
|
-
prefig/core/graph.py,sha256=
|
|
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
|
+
prefig/core/image.py,sha256=eQKy0mNvCE6J8EA1S5Y08YF3lrb7kCeGG4wrjBQ_-pI,4373
|
|
20
21
|
prefig/core/implicit.py,sha256=JyFKpKj6Xi1PF-3BeZpd7t0aNe8jH9Wf_E2rghvt-Ug,6179
|
|
21
22
|
prefig/core/label.py,sha256=e_gOd2kcdOtcJay1VyRstP66SiDNxK2UK2-obkxQnOc,24746
|
|
22
23
|
prefig/core/label_tools.py,sha256=jOawiyrKC5iQs0vq7133xNXqrkJbMqDZVHflT-hOruo,9167
|
|
23
24
|
prefig/core/legend.py,sha256=0mVfyU3LvqgDCYUOlCeBD04maV-rj2h0fs1aOEBBt6c,13340
|
|
24
25
|
prefig/core/line.py,sha256=HBB9cvJawKAtdubISn5maRrzFFzV0NQuBgwoQoxeXcw,6055
|
|
25
|
-
prefig/core/math_utilities.py,sha256=
|
|
26
|
+
prefig/core/math_utilities.py,sha256=sMm3U9rcYKY8oZZWeJjcBokCDO4CxUkvmaX55auR4Eo,5927
|
|
26
27
|
prefig/core/network.py,sha256=1izAX2AKvnj2knElrdLeojE_0Q0zO0aQM-EsEwor0Os,27217
|
|
27
28
|
prefig/core/parametric_curve.py,sha256=ftxdg3gs0M0ME5iPJo3iEX7jT8PHQEMYpx8psr8Cm-w,3046
|
|
28
29
|
prefig/core/parse.py,sha256=plLmR0KKrUjYx0PmHHo5HZonaaT3tW4qjiDOtzuhSkQ,4542
|
|
29
|
-
prefig/core/path.py,sha256=
|
|
30
|
+
prefig/core/path.py,sha256=8BbWAUzZqe1YD0gO4QtDENaINavAAC1mlU-y3UV-vu0,20312
|
|
30
31
|
prefig/core/point.py,sha256=a97N1soBcmYn3StZ60HBmaBi3pB1abA7sL0LNJ2nxR0,8341
|
|
31
32
|
prefig/core/polygon.py,sha256=8NVdWSUVXuNE4GiPQ4MySSmLy8aCNwKUqCcfHukizME,11301
|
|
32
33
|
prefig/core/read.py,sha256=Q1Nsluwysg3M5wtUmwIirfNo-Rw9-dFJPEeM4pDCpyo,1988
|
|
33
|
-
prefig/core/rectangle.py,sha256=
|
|
34
|
+
prefig/core/rectangle.py,sha256=b_ki7yqA4-mke1_0khvKqSKBRToB667mZc-xZhhPIBA,3473
|
|
34
35
|
prefig/core/repeat.py,sha256=DAO5w4BxUMGU-8ymsv8EwsifI0zPa_cgIRUcWWS8BWU,2755
|
|
35
36
|
prefig/core/riemann_sum.py,sha256=T2dQgJIY17QuuPDOB8XWIP8HYmg5jOQ-LroFH7tiGAU,3012
|
|
36
37
|
prefig/core/shape.py,sha256=Qb_-upbSHwEoYrrAnbCoFFFuVIb3JgJLdyP9ckD5evc,8675
|
|
37
|
-
prefig/core/slope_field.py,sha256=
|
|
38
|
+
prefig/core/slope_field.py,sha256=KThnVBuO_3QK7k6xxCWnsbiv-X9P8oS1SgFPLoynA-E,8797
|
|
38
39
|
prefig/core/statistics.py,sha256=5qN_-ABN0EFVG12ZP95uSPk82INbWRqI3w2fUdR3wsw,3458
|
|
39
|
-
prefig/core/tags.py,sha256=
|
|
40
|
+
prefig/core/tags.py,sha256=7w6E3960o_ZgZl4xYJLVJ1eLttt0vVlB4IgMZGTMyyE,4134
|
|
40
41
|
prefig/core/tangent_line.py,sha256=I9wf9VAqhnmmsh8Lzynwi7_Z1DonHXqHf8ym7eO40tk,3400
|
|
41
|
-
prefig/core/user_namespace.py,sha256=
|
|
42
|
+
prefig/core/user_namespace.py,sha256=6xlkYd2g9dSiDPH0vmYj93oPzm1BFZdgyMGQ9ipKOgU,7059
|
|
42
43
|
prefig/core/utilities.py,sha256=R1fBrzj-abXHG4Bh-sS0pZNC8vc9fIt6yJBcuztCVho,2905
|
|
43
44
|
prefig/core/vector.py,sha256=lTw-y9mt6jqmbFxdPwQB4PYBQ9y4pGrQRcpRp9lBIbY,2917
|
|
44
45
|
prefig/engine.py,sha256=Zz7j2sFxeMwPN1f3GFTpaBihqguzMNJD5iBONOVL7eQ,11972
|
|
@@ -55,13 +56,13 @@ prefig/resources/examples/tangent.xml,sha256=FLZaNz0iFoTLX6gB4pfLZFtu_TWeCug4Dda
|
|
|
55
56
|
prefig/resources/fonts/Braille29.ttf,sha256=T4hosDvaUGMVK0Wh0BmBgWeT7sQQmLXyA3gRUR-a0oE,55880
|
|
56
57
|
prefig/resources/js/mj-sre-page.js,sha256=LHVeI4dCH13bTv56nz3SKNo3JGRXa6joPM3D3wpKV40,9251
|
|
57
58
|
prefig/resources/js/package.json,sha256=hwKDg76_GzkhX72T7DRiF3FoMLokCv9PSLQvnW5Ovok,116
|
|
58
|
-
prefig/resources/schema/pf_schema.rnc,sha256=
|
|
59
|
-
prefig/resources/schema/pf_schema.rng,sha256=
|
|
59
|
+
prefig/resources/schema/pf_schema.rnc,sha256=WORhF-dRkNY8aeiNQvZIaPTE5QGCMzbrXqttXCjtOJY,20166
|
|
60
|
+
prefig/resources/schema/pf_schema.rng,sha256=TmZQLgyK2wntXDXOiQXYcVQedlPuPh8IWrtttK0iCQY,54454
|
|
60
61
|
prefig/resources/template/pf_publication.xml,sha256=eEv8HACv610Apw5DSVNy0reLfELYqHlNy9Oq0GH7C_c,200
|
|
61
62
|
prefig/scripts/__init__.py,sha256=qJcPi1WRh9UAwu4zIFJbmxWalAMilMYqgi6LxRkF7bI,25
|
|
62
63
|
prefig/scripts/install_mj.py,sha256=5A6-oc1xbIXka5mkFE70vlp9-Rh_QoxOxGMrQi9Hkio,1219
|
|
63
|
-
prefig-0.3.
|
|
64
|
-
prefig-0.3.
|
|
65
|
-
prefig-0.3.
|
|
66
|
-
prefig-0.3.
|
|
67
|
-
prefig-0.3.
|
|
64
|
+
prefig-0.3.9.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
65
|
+
prefig-0.3.9.dist-info/METADATA,sha256=rYzAuVlVvkQLiZ-THOuBV_TPO7aiPv85eJhbRNuciOs,8710
|
|
66
|
+
prefig-0.3.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
67
|
+
prefig-0.3.9.dist-info/entry_points.txt,sha256=OP4ZQT71q2b0Zfbie-oM2Z1HlxpkuX7qaxJnzwsBOVQ,42
|
|
68
|
+
prefig-0.3.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|