Mercurial > MadButterfly
annotate tools/svg2code.py @ 776:77b561bb7929
Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
However, the image does not work here since it does not use the transformation of the group.
author | wycc |
---|---|
date | Mon, 30 Aug 2010 08:56:44 +0800 |
parents | bb4f651090bf |
children | 586e50f82c1f |
rev | line source |
---|---|
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
2 from xml.dom.minidom import parse |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 import sys |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
4 import re |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 svgns='http://www.w3.org/2000/svg' |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 xlinkns='http://www.w3.org/1999/xlink' |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
9 re_rgb = re.compile('rgb\\( *([0-9]+(\\.[0-9]+)?) *, *([0-9]+(\\.[0-9]+)?) *, *([0-9]+(\\.[0-9]+)?) *\\)') |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 def translate_stops(parent, codefo, parent_id): |
64 | 11 stops = [] |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 for node in parent.childNodes: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
13 if node.localName == 'stop' and node.namespaceURI == svgns: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
14 style = node.getAttribute('style') |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
15 style_props = [prop.strip() for prop in style.split(';') |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
16 if prop.strip()] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
17 style_kvpairs = [prop.split(':') for prop in style_props] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
18 style_kvpairs = [(prop[0].strip(), prop[1].strip()) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
19 for prop in style_kvpairs] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
20 style_map = dict(style_kvpairs) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
21 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
22 color = style_map['stop-color'].strip() |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
23 if len(color) == 7 and color[0] == '#': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
24 r = float(int(color[1:3], 16)) / 255.0 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
25 g = float(int(color[3:5], 16)) / 255.0 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
26 b = float(int(color[5:7], 16)) / 255.0 |
86
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
27 elif color.lower() == 'white': |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
28 r, g, b = 1, 1, 1 |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
29 elif color.lower() == 'black': |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
30 r, g, b = 0, 0, 0 |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
31 else: |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
32 mo = re_rgb.match(color) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
33 if mo: |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
34 r = float(mo.group(1)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
35 g = float(mo.group(3)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
36 b = float(mo.group(5)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
37 else: |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
38 raise ValueError, '\'%s\' is invalid color value.' % (color) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
39 pass |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
40 |
86
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
41 try: |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
42 opacity = style_map['stop-opacity'] |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
43 except: |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
44 opacity = 1 |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
45 pass |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
46 offset = node.getAttribute('offset') |
64 | 47 stops.append('[COLOR_STOP([%s], %f, %f, %f, %f, %f)]' % ( |
48 parent_id, r, g, b, float(opacity), float(offset))) | |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
49 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
50 pass |
64 | 51 print >> codefo, '%sdnl' % (', '.join(stops)) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
52 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
53 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
54 def translate_linearGradient(linear, codefo, doc): |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
55 linear_id = _get_id(linear) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
56 if linear.hasAttribute('x1'): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
57 x1 = float(linear.getAttribute('x1')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
58 y1 = float(linear.getAttribute('y1')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
59 x2 = float(linear.getAttribute('x2')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
60 y2 = float(linear.getAttribute('y2')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
61 else: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
62 x1 = y1 = x2 = y2 = 0 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
63 pass |
63 | 64 print >> codefo, 'ADD_LINEAR_PAINT([%s], %f, %f, %f, %f, [' % ( |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
65 linear_id, x1, y1, x2, y2) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
66 translate_stops(linear, codefo, linear_id) |
63 | 67 print >> codefo, '])dnl' |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
68 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
69 href = linear.getAttributeNS(xlinkns, 'href').strip() |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
70 if href and href[0] == '#': |
78 | 71 print >> codefo, 'REF_STOPS_LINEAR([%s], [%s])dnl' % ( |
72 linear_id, href[1:]) | |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
73 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
74 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
75 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
76 def translate_radialGradient(radial, codefo, doc): |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
77 radial_id = _get_id(radial) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
78 try: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
79 cx = float(radial.getAttribute('cx')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
80 cy = float(radial.getAttribute('cy')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
81 except: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
82 cx = cy = 0 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
83 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
84 try: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
85 r = float(radial.getAttribute('r')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
86 except: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
87 r = 0.5 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
88 pass |
63 | 89 print >> codefo, 'ADD_RADIAL_PAINT([%s], %f, %f, %f, [' % ( |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
90 radial_id, cx, cy, r) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
91 translate_stops(radial, codefo, radial_id) |
63 | 92 print >>codefo, '])dnl' |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
93 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
94 href = radial.getAttributeNS(xlinkns, 'href').strip() |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
95 if href[0] == '#': |
78 | 96 print >> codefo, 'REF_STOPS_RADIAL([%s], [%s])dnl' % ( |
97 radial_id, href[1:]) | |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
98 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
99 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
100 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
101 def translate_defs(defs, codefo, doc): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
102 for node in defs.childNodes: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
103 if node.namespaceURI != svgns: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
104 continue |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
105 if node.localName == 'linearGradient': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
106 translate_linearGradient(node, codefo, doc) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
107 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
108 elif node.localName == 'radialGradient': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
109 translate_radialGradient(node, codefo, doc) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
110 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
111 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
112 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
113 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
114 def trans_color(code): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
115 return int(code[1:3], 16) / 255.0, \ |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
116 int(code[3:5], 16) / 255.0, \ |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
117 int(code[5:7], 16) / 255.0 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
118 |
83 | 119 def get_style_map(style_str): |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
120 prop_strs = [s.strip() for s in style_str.split(';')] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
121 prop_kvs = [s.split(':') for s in prop_strs if s] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
122 prop_kvs = [(k.strip(), v.strip()) for k, v in prop_kvs] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
123 prop_map = dict(prop_kvs) |
83 | 124 return prop_map |
125 | |
126 def translate_style(node, coord_id, codefo, doc, prefix): | |
127 node_id = node.getAttribute('id') | |
279
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
128 try: |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
129 prop_map = node.style_map |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
130 except: |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
131 style_str = node.getAttribute('style') |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
132 prop_map = get_style_map(style_str) |
313
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
133 pass |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
134 |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
135 if node.hasAttribute('fill-opacity'): |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
136 opacity = float(node.getAttribute('fill-opacity')) |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
137 elif node.hasAttribute('opacity'): |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
138 opacity = float(node.getAttribute('opacity')) |
313
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
139 else: |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
140 opacity = 1 |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
141 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
142 |
300
1b69da2494e9
Use the opacity of the style to overwrite the default opacity property of the node itself.
wycc
parents:
296
diff
changeset
|
143 try: |
1b69da2494e9
Use the opacity of the style to overwrite the default opacity property of the node itself.
wycc
parents:
296
diff
changeset
|
144 opacity = float(prop_map['opacity']) |
1b69da2494e9
Use the opacity of the style to overwrite the default opacity property of the node itself.
wycc
parents:
296
diff
changeset
|
145 except: |
1b69da2494e9
Use the opacity of the style to overwrite the default opacity property of the node itself.
wycc
parents:
296
diff
changeset
|
146 pass |
1b69da2494e9
Use the opacity of the style to overwrite the default opacity property of the node itself.
wycc
parents:
296
diff
changeset
|
147 |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
148 if prop_map.has_key('fill'): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
149 fill = prop_map['fill'].strip() |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
150 if fill.startswith('#') and len(fill) == 7: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
151 r, g, b = trans_color(fill) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
152 print >> codefo, 'FILL_SHAPE([%s], %f, %f, %f, %f)dnl' % ( |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
153 node_id, r, g, b, opacity) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
154 elif fill.startswith('url(') and fill.endswith(')'): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
155 paint_id = fill[5:-1] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
156 print >> codefo, 'FILL_SHAPE_WITH_PAINT([%s], [%s])dnl' % ( |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
157 node_id, paint_id) |
86
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
158 elif fill.lower() == 'none': |
7d0580f89468
Fix bug of dealing matrix().
Thinker K.F. Li <thinker@branda.to>
parents:
85
diff
changeset
|
159 pass |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
160 else: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
161 raise ValueError, '\'%s\' is an invalid value for fill.' % (fill) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
162 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
163 |
313
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
164 if node.hasAttribute('stroke-opacity'): |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
165 stroke_opacity = float(node.getAttribute('stroke-opacity')) |
313
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
166 elif node.hasAttribute('opacity'): |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
167 stroke_opacity = float(node.getAttribute('opacity')) |
5737548e922f
Fix bug that svg2code.py handle fill & stroke opacity in a wrong way.
Thinker K.F. Li <thinker@branda.to>
parents:
310
diff
changeset
|
168 else: |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
169 stroke_opacity = 1.0 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
170 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
171 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
172 if prop_map.has_key('stroke'): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
173 stroke = prop_map['stroke'].strip() |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
174 if stroke.startswith('#') and len(stroke) == 7: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
175 r, g, b = trans_color(stroke) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
176 print >> codefo, 'STROKE_SHAPE([%s], %f, %f, %f, %f)dnl' % ( |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
177 node_id, r, g, b, stroke_opacity) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
178 elif stroke.startswith('url(') and stroke.endswith(')'): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
179 paint_id = stroke[5:-1] |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
180 print >> codefo, 'STROKE_SHAPE_WITH_PAINT([%s], [%s])dnl' % ( |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
181 node_id, paint_id) |
83 | 182 elif stroke.lower() == 'none': |
183 pass | |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
184 else: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
185 raise ValueError, '\'%s\' is an invalid value for stroke.' \ |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
186 % (stroke) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
187 pass |
80
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
188 |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
189 if prop_map.has_key('stroke-width'): |
83 | 190 if prop_map['stroke-width'].endswith('px'): |
372
2212f515584c
Adjust stroke width to more close to rendering result of Inkscape
Thinker K.F. Li <thinker@branda.to>
parents:
333
diff
changeset
|
191 stroke_width = float(prop_map['stroke-width'][:-2]) / 2 |
83 | 192 else: |
372
2212f515584c
Adjust stroke width to more close to rendering result of Inkscape
Thinker K.F. Li <thinker@branda.to>
parents:
333
diff
changeset
|
193 stroke_width = float(prop_map['stroke-width']) / 2 |
83 | 194 pass |
80
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
195 print >> codefo, 'STROKE_WIDTH([%s], %f)dnl' % ( |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
196 node_id, stroke_width) |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
197 pass |
373
07ca7681f43b
Avoid set stroke width on shape with stroke=none
Thinker K.F. Li <thinker@branda.to>
parents:
372
diff
changeset
|
198 elif prop_map.has_key('stroke') and prop_map['stroke'] != 'none': |
372
2212f515584c
Adjust stroke width to more close to rendering result of Inkscape
Thinker K.F. Li <thinker@branda.to>
parents:
333
diff
changeset
|
199 print >> codefo, 'STROKE_WIDTH([%s], %f)dnl' % ( |
2212f515584c
Adjust stroke width to more close to rendering result of Inkscape
Thinker K.F. Li <thinker@branda.to>
parents:
333
diff
changeset
|
200 node_id, 0.5) |
2212f515584c
Adjust stroke width to more close to rendering result of Inkscape
Thinker K.F. Li <thinker@branda.to>
parents:
333
diff
changeset
|
201 pass |
81 | 202 |
203 if prop_map.has_key('display'): | |
204 display = prop_map['display'].strip().lower() | |
205 if display == 'none': | |
206 print >> codefo, '%sHIDE([%s])dnl' % (prefix, node_id) | |
207 pass | |
208 pass | |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
209 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
210 |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
211 def translate_shape_transform(shape, coord_id, codefo): |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
212 shape_id = shape.getAttribute('id') |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
213 |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
214 if shape.hasAttribute('transform'): |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
215 shape_coord_id = shape_id + '_coord' |
101 | 216 ## \page shape_coord Coordinate Transformation for Shapes. |
217 # | |
218 # svg2code.py add a coord_t for a shape if transform attribute | |
219 # of it's tag is setted. The name of coord_t object is | |
220 # <shape_id> + "_coord". | |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
221 print >> codefo, 'dnl' |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
222 print >> codefo, 'ADD_COORD([%s], [%s])dnl' % ( |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
223 shape_coord_id, coord_id) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
224 transform = shape.getAttribute('transform') |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
225 translate_transform(shape_coord_id, transform, codefo, 'SHAPE_') |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
226 coord_id = shape_coord_id |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
227 pass |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
228 return coord_id |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
229 |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
230 ## \brief Calculate geometry of ellipse where the arc is on. |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
231 # |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
232 # This function calculate the ellipse with information from SVG path data. |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
233 # |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
234 # \see calc_center_and_x_aix() |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
235 def _calc_ellipse_of_arc(x0, y0, rx, ry, x_rotate, large, sweep, x, y): |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
236 import math |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
237 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
238 _sin = math.sin(x_rotate) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
239 _cos = math.cos(x_rotate) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
240 |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
241 nrx = x * _cos + y * _sin # Not Rotated X |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
242 nry = x * -_sin + y * _cos |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
243 nrx0 = x0 * _cos + y0 * _sin |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
244 nry0 = x0 * -_sin + y0 * _cos |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
245 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
246 udx = (nrx - nrx0) / 2 / rx # ux - umx |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
247 udy = (nry - nry0) / 2 / ry # uy - umy |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
248 umx = (nrx + nrx0) / 2 / rx |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
249 umy = (nry + nry0) / 2 / ry |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
250 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
251 udx2 = udx * udx |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
252 udy2 = udy * udy |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
253 udl2 = udx2 + udy2 |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
254 if udl2 > 1: # make sure never > 1 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
255 udl2 = 1 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
256 pass |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
257 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
258 if udy != 0: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
259 # center is at left-side of arc |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
260 udcx = -math.sqrt((1 - udl2) * udl2) / (udy + udx2 / udy) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
261 udcy = -udcx * udx / udy |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
262 else: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
263 # center is at down-side of arc |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
264 udcx = 0 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
265 udcy = math.sqrt((1 - udl2) * udl2) / udx |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
266 pass |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
267 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
268 reflect = 0 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
269 if large: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
270 reflect ^= 1 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
271 pass |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
272 if sweep != 1: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
273 reflect ^= 1 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
274 pass |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
275 if reflect: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
276 udcx = -udcx |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
277 udcy = -udcy |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
278 pass |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
279 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
280 nrcx = rx * (udcx + umx) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
281 nrcy = ry * (udcy + umy) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
282 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
283 cx = nrcx * _cos - nrcy * _sin |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
284 cy = nrcx * _sin + nrcy * _cos |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
285 |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
286 return cx, cy |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
287 |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
288 # M x y : Move to (x,y) |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
289 # Z : close path |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
290 # L x y : lineto (x,y) |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
291 # H x : horizontal line to x |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
292 # V y : Vertical line to y |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
293 # C x1 y1 x2 y2 x y : Draw a segment of bezier curve |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
294 # S x2 y2 x t : Draw a segment of bezier curve from the last |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
295 # control point |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
296 # Q x1 y1 x y : Draw a segment of quadratic curve |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
297 # T x y : Draw a segment of quadratic curve from the last |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
298 # control pint |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
299 # A x y r f s x y : Draw an arc |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
300 # translate the path data into two arrays. The first is an integer whose |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
301 # upper 8 bits are the command type The second array hold all arguments. |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
302 |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
303 command_length={'M': 2, 'm':2, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
304 'Z': 0, 'z':0, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
305 'L': 2, 'l':2, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
306 'H': 1, 'h':1, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
307 'V': 1, 'v':1, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
308 'C': 6, 'c':6, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
309 'S': 4, 's':4, |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
310 'Q': 4, 'q':4, |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
311 'T': 2, 't':2, |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
312 'A': 7, 'a':7} |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
313 |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
314 def _angle_rotated_ellipse(x, y, rx, ry, x_rotate): |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
315 import math |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
316 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
317 _cos = math.cos(x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
318 _sin = math.sin(x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
319 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
320 nrx = (x * _cos + y * _sin) / rx |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
321 nry = (-x * _sin + y * _cos) / ry |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
322 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
323 xy_tan = nry / nrx |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
324 xy_angle = math.atan(xy_tan) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
325 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
326 if nrx < 0: |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
327 xy_angle = math.pi + xy_angle |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
328 pass |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
329 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
330 return xy_angle |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
331 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
332 def rotate(x, y, angle): |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
333 import math |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
334 _cos = math.cos(angle) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
335 _sin = math.sin(angle) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
336 nx = x * _cos - y * _sin |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
337 ny = x * _sin + y * _cos |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
338 return nx, ny |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
339 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
340 def translate_path_data(data, codefo): |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
341 import string |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
342 import math |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
343 |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
344 temp = data.split() |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
345 fields=[] |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
346 for f in temp: |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
347 for s in f.split(','): |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
348 if s != '': |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
349 fields.append(s) |
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
350 cmd = '' |
280 | 351 cmd_args=0 |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
352 commands='' |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
353 pnts=[] |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
354 float_args=[] |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
355 for f in fields: |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
356 if f in command_length: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
357 if cmd_args != 0 and (narg % cmd_args) != 0: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
358 raise ValueError, 'invalid path data %s' % (repr(fields)) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
359 cmd = f |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
360 cmd_args = command_length[f] |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
361 narg = 0 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
362 continue |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
363 |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
364 if (narg % cmd_args) == 0: |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
365 commands = commands + cmd |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
366 pass |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
367 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
368 if cmd == 'H': |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
369 arg = float(f) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
370 pnts.append(arg) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
371 pnts.append(pnts[-2]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
372 continue |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
373 if cmd == 'h': |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
374 arg = float(f) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
375 pnts.append(arg + pnts[-2]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
376 pnts.append(pnts[-2]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
377 continue |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
378 if cmd == 'V': |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
379 arg = float(f) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
380 pnts.append(pnts[-2]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
381 pnts.append(arg) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
382 continue |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
383 if cmd == 'v': |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
384 arg = float(f) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
385 pnts.append(pnts[-2]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
386 pnts.append(arg + pnts[-2]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
387 continue |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
388 |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
389 arg = float(f) |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
390 if (cmd not in 'am') and (cmd in string.lowercase): |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
391 # relative and not arc or moveto |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
392 arg = arg + pnts[-2] |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
393 pass |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
394 pnts.append(arg) |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
395 narg = narg + 1 |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
396 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
397 # For arc curve |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
398 if (narg % cmd_args) == 0 and (cmd in 'Aa'): |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
399 x0, y0, rx, ry, x_rotate, large, sweep, x, y = \ |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
400 tuple(pnts[-9:]) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
401 if cmd == 'a': |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
402 # relative position |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
403 abs_x = x + x0 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
404 abs_y = y + y0 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
405 else: |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
406 abs_x = x |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
407 abs_y = y |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
408 pass |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
409 x_rotate = int(x_rotate) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
410 large = int(large) |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
411 sweep = int(sweep) |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
412 cx, cy = _calc_ellipse_of_arc(x0, y0, rx, ry, |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
413 x_rotate, large, |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
414 sweep, abs_x, abs_y) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
415 # Corners |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
416 c0x, c0y = rotate(-rx, -ry, x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
417 c0x, c0y = c0x + cx, c0y + cy |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
418 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
419 c1x, c1y = rotate(rx, -ry, x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
420 c1x, c1y = c1x + cx, c1y + cy |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
421 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
422 c2x, c2y = rotate(rx, ry, x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
423 c2x, c2y = c2x + cx, c2y + cy |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
424 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
425 c3x, c3y = rotate(-rx, ry, x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
426 c3x, c3y = c3x + cx, c3y + cy |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
427 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
428 pnts[-7:] = [c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y, abs_x, abs_y] |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
429 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
430 start_angle = _angle_rotated_ellipse(x0 - cx, y0 - cy, |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
431 rx, ry, x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
432 stop_angle = _angle_rotated_ellipse(x - cx, y - cy, |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
433 rx, ry, x_rotate) |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
434 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
435 # sweep == 1 for positive-angle direction |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
436 # sweep == 0 for negative-angle direction |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
437 if start_angle > stop_angle and sweep: |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
438 stop_angle = math.pi * 2 + stop_angle |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
439 elif start_angle < stop_angle and not sweep: |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
440 start_angle = math.pi * 2 + start_angle |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
441 pass |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
442 |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
443 float_args.extend([cx, cy, rx, ry, |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
444 start_angle, stop_angle, x_rotate]) |
269
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
445 pass |
c96f38ad4bb6
Fix mis-behavior of translate_path_data() on arc.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
446 pass |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
447 return commands, pnts, float_args |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
448 |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
449 _id_sn = 0 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
450 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
451 def _get_id(obj): |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
452 global _id_sn |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
453 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
454 if obj.hasAttribute('id'): |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
455 oid = obj.getAttribute('id') |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
456 else: |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
457 oid = '_MB_RAND_%s_' % (_id_sn) |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
458 obj.setAttribute('id', oid) |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
459 _id_sn = _id_sn + 1 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
460 pass |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
461 return oid |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
462 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
463 ## |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
464 # Decorator that check if objects have attribute 'mbname'. |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
465 # |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
466 def check_mbname(func): |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
467 def deco(obj, coord_id, codefo, doc): |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
468 if obj.hasAttribute('mbname') and obj.getAttribute('mbname'): |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
469 ## \note mbname declare that this node should be in the |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
470 # symbol table. |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
471 mbname = obj.getAttribute('mbname') |
296
2e97e8082d83
* Fix the symbol definition code which does not assume the id is the same as the mbname.
wycc
parents:
287
diff
changeset
|
472 id = obj.getAttribute('id') |
2e97e8082d83
* Fix the symbol definition code which does not assume the id is the same as the mbname.
wycc
parents:
287
diff
changeset
|
473 print >> codefo, 'ADD_SYMBOL([%s],[%s])dnl' % (id,mbname) |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
474 pass |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
475 func(obj, coord_id, codefo, doc) |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
476 pass |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
477 return deco |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
478 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
479 @check_mbname |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
480 def translate_path(path, coord_id, codefo, doc): |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
481 coord_id = translate_shape_transform(path, coord_id, codefo) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
482 |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
483 path_id = path.getAttribute('id') |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
484 d = path.getAttribute('d') |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
485 (commands, pnts, float_args) = translate_path_data(d, codefo) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
486 print >> codefo, 'dnl' |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
487 #print >> codefo, 'ADD_PATH([%s], [%s], [%s])dnl' % (path_id, d, coord_id) |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
488 spnts='' |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
489 for c in pnts: |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
490 spnts = spnts + "%f," % c |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
491 s_float_arg='' |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
492 for c in float_args: |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
493 s_float_arg = s_float_arg + ("%f," % c) |
197
bcad1ccdf45c
Translate the path string into binary array to save the parsing in the runtime. It can reduce the size as well.
wycc@wycc-desktop
parents:
101
diff
changeset
|
494 |
458
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
495 print >> codefo, 'ADD_PATH([%s], [%s], [%s], [%s], [%d], [%s], [%d])dnl' % ( |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
496 path_id, coord_id, commands, spnts, len(pnts), |
bb4f651090bf
Use cairo to transform and draw arc.
Thinker K.F. Li <thinker@branda.to>
parents:
434
diff
changeset
|
497 s_float_arg, len(float_args)) |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
498 |
81 | 499 translate_style(path, coord_id, codefo, doc, 'PATH_') |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
500 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
501 |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
502 @check_mbname |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
503 def translate_rect(rect, coord_id, codefo, doc): |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
504 coord_id = translate_shape_transform(rect, coord_id, codefo) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
505 |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
506 rect_id = _get_id(rect) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
507 x = float(rect.getAttribute('x')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
508 y = float(rect.getAttribute('y')) |
80
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
509 rx = 0.0 |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
510 if rect.hasAttribute('rx'): |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
511 rx = float(rect.getAttribute('rx')) |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
512 pass |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
513 ry = 0.0 |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
514 if rect.hasAttribute('ry'): |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
515 ry = float(rect.getAttribute('ry')) |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
516 pass |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
517 width = float(rect.getAttribute('width')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
518 height = float(rect.getAttribute('height')) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
519 print >> codefo, 'dnl' |
80
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
520 print >> codefo, 'ADD_RECT([%s], %f, %f, %f, %f, %f, %f, [%s])dnl' % ( |
e548221c04eb
svg2code.py support stroke
Thinker K.F. Li <thinker@branda.to>
parents:
78
diff
changeset
|
521 rect_id, x, y, width, height, rx, ry, coord_id) |
81 | 522 translate_style(rect, coord_id, codefo, doc, 'RECT_') |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
523 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
524 |
83 | 525 def translate_font_style(text, codefo): |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
526 text_id = _get_id(text) |
83 | 527 style_str = text.getAttribute('style') |
528 style_map = get_style_map(style_str) | |
529 | |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
530 return style_map |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
531 |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
532 def merge_style(tspan, text): |
279
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
533 newmap = tspan.style_map |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
534 map = text.style_map |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
535 for k,v in text.style_map.items(): |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
536 if not newmap.has_key(k): |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
537 newmap[k] = v |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
538 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
539 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
540 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
541 |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
542 def translate_tspan(tspan, text, coord_id, codefo, doc, txt_strs, attrs): |
279
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
543 try: |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
544 map = tspan.style_map |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
545 except: |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
546 map = translate_font_style(tspan, codefo) |
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
547 tspan.style_map = map |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
548 pass |
279
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
549 if tspan.hasAttribute('x'): |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
550 # Render the tspan as an independent text if the x |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
551 # attribute is defined. All elements inside |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
552 # the tspan will be ignore by the outter text or tspan elements. |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
553 # FIXME: We need to apply the style map recursively. |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
554 merge_style(tspan, text) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
555 translate_text(tspan, coord_id, codefo, doc) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
556 return '' |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
557 attr = [len(txt_strs.encode('utf8')) - 1, 0, tspan] |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
558 attrs.append(attr) |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
559 for node in tspan.childNodes: |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
560 if node.localName == None: |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
561 txt_strs = txt_strs + node.data |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
562 elif node.localName == 'tspan': |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
563 txt_strs = translate_tspan(node, tspan, coord_id, codefo, |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
564 doc, txt_strs, attrs) |
83 | 565 pass |
566 pass | |
279
86a5ae82ccf2
* Modify svg2code_ex to use differnt font size at two test items to illustrate the function of the new text parser
wycc
parents:
278
diff
changeset
|
567 attr[1] = len(txt_strs.encode('utf8')) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
568 return txt_strs |
83 | 569 |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
570 def pango_generate_font_attributes(attrs,coord_id, codefo,doc): |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
571 for a in attrs: |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
572 start = a[0] |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
573 end = a[1] |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
574 node = a[2] |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
575 #print "generate attributes from %d to %d" %(start,end) |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
576 style_map = node.style_map |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
577 #print [style_map] |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
578 if style_map.has_key('font-size'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
579 # FIXME: Implement all units here |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
580 if style_map['font-size'].endswith('px'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
581 font_sz = float(style_map['font-size'][:-2]) |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
582 print >> codefo, 'PANGO_SIZE(%d,%d,%d)dnl' % (font_sz*1024,start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
583 else: |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
584 font_sz = float(style_map['font-size']) |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
585 print >> codefo, 'PANGO_SIZE(%d,%d,%d)dnl' % (font_sz*1024,start,end) |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
586 pass |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
587 pass |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
588 |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
589 if style_map.has_key('font-style'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
590 font_style = style_map['font-style'].lower() |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
591 if font_style == 'normal': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
592 print >> codefo, 'PANGO_STYLE(PANGO_STYLE_NORMAL,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
593 elif font_style == 'italic': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
594 print >> codefo, 'PANGO_STYLE(PANGO_STYLE_ITALIC,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
595 elif font_style == 'oblique': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
596 print >> codefo, 'PANGO_STYLE(PANGO_STYLE_OBLIQUE,%d,%d)dnl' % (start,end) |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
597 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
598 pass |
83 | 599 |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
600 if style_map.has_key('font-family'): |
306 | 601 font_family = style_map['font-family'] |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
602 print >> codefo, 'PANGO_FAMILY(%s,%d,%d)dnl' % (font_family,start,end) |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
603 pass |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
604 if style_map.has_key('text-anchor'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
605 text_anchor = style_map['text-anchor'].lower() |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
606 # FIXME: We need to implement a mb_text_set_aligment to implement SVG-styled alignment. |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
607 print "The text-anchor is not implemented yet" |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
608 pass |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
609 if style_map.has_key('font-variant'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
610 font_variant = style_map['font-variant'].lower() |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
611 print "The font-variant is not implemented yet" |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
612 pass |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
613 if style_map.has_key('font-weight'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
614 font_weight = style_map['font-weight'].lower() |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
615 if font_weight == 'normal': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
616 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_NORMAL,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
617 elif font_weight == 'bold': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
618 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_BOLD,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
619 elif font_weight == 'bolder': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
620 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_HEAVY,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
621 elif font_weight == 'lighter': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
622 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_ULTRALIGHT,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
623 elif font_weight == '100': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
624 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_ULTRALIGHT,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
625 elif font_weight == '200': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
626 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_ULTRALIGHT,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
627 elif font_weight == '300': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
628 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_LIGHT,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
629 elif font_weight == '400': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
630 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_NORMAL,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
631 elif font_weight == '500': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
632 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_NORMAL,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
633 elif font_weight == '600': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
634 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_SEMIBOLD,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
635 elif font_weight == '700': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
636 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_BOLD,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
637 elif font_weight == '800': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
638 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_ULTRABOLD,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
639 elif font_weight == '900': |
333
bdf36a26e420
Make generated code clean.
Thinker K.F. Li <thinker@branda.to>
parents:
313
diff
changeset
|
640 print >> codefo, 'PANGO_STYLE(PANGO_WEIGHT_HEAVY,%d,%d)dnl' % (start,end) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
641 else: |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
642 print "The font-weight %s is not supported" % font_weight |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
643 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
644 pass |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
645 if style_map.has_key('direction'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
646 direction = style_map['direction'].lower() |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
647 print "The direction is not implemented yet" |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
648 pass |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
649 if style_map.has_key('unicode-bidi'): |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
650 bidi = style_map['unicode-bidi'].lower() |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
651 print "The bidi is not implemented yet" |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
652 pass |
83 | 653 pass |
654 pass | |
655 | |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
656 def pango_gen_text(text, coord_id, codefo, doc, txt_strs, attrs): |
83 | 657 if txt_strs: |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
658 text_id = _get_id(text) |
83 | 659 x = float(text.getAttribute('x')) |
660 y = float(text.getAttribute('y')) | |
661 print >> codefo, 'dnl' | |
662 print >> codefo, \ | |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
663 'PANGO_BEGIN_TEXT([%s], [%s], %f, %f, 16, [%s])dnl' % ( |
83 | 664 text_id.encode('utf8'), u''.join(txt_strs).encode('utf8'), |
665 x, y, coord_id.encode('utf8')) | |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
666 pango_generate_font_attributes(attrs, coord_id, codefo, doc) |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
667 print >> codefo, \ |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
668 'PANGO_END_TEXT([%s], [%s], %f, %f, 16, [%s])dnl' % ( |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
669 text_id.encode('utf8'), u''.join(txt_strs).encode('utf8'), |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
670 x, y, coord_id.encode('utf8')) |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
671 translate_style(text, coord_id, codefo, doc, 'TEXT_') |
431
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
672 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
673 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
674 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
675 def stext_generate_font_attributes(text, attrs, coord_id, codefo, doc): |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
676 text_id = _get_id(text) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
677 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
678 for start, end, node in attrs: |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
679 style_map = node.style_map |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
680 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
681 font_sz = 10 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
682 if style_map.has_key('font-size'): |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
683 fsz = style_map['font-size'] |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
684 if fsz.endswith('px'): |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
685 font_sz = float(fsz[:-2]) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
686 else: |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
687 font_sz = float(fsz) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
688 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
689 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
690 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
691 if style_map.has_key('font-family'): |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
692 font_family = style_map['font-family'] |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
693 else: |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
694 font_family = 'serif' |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
695 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
696 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
697 font_slant = 0 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
698 if style_map.has_key('font-style'): |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
699 fn_style = style_map['font-style'] |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
700 if fn_style == 'normal': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
701 font_slant = 0 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
702 elif fn_style == 'italic': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
703 font_slant = 100 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
704 elif fn_style == 'oblique': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
705 font_slant = 110 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
706 else: |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
707 raise ValueError, '%s is not a valid font-style' % (fn_style) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
708 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
709 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
710 font_weight = 80 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
711 if style_map.has_key('font-weight'): |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
712 fn_weight = style_map['font-weight'] |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
713 if fn_weight == 'normal': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
714 font_weight = 80 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
715 elif fn_weight == 'medium': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
716 font_weight = 100 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
717 elif fn_weight == 'bold': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
718 font_weight = 200 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
719 elif fn_weight == 'bolder': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
720 font_weight = 150 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
721 elif fn_weight == 'light': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
722 font_weight = 50 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
723 elif fn_weight == 'lighter': |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
724 font_weight = 70 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
725 else: |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
726 font_weight = int(fn_weight) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
727 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
728 pass |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
729 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
730 print >> codefo, 'STYLE_BLOCK([%s], %d, [%s], %f, %d, %d)dnl' % ( |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
731 text_id, end - start, font_family, font_sz, |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
732 font_slant, font_weight) |
257
50d253d0fcba
Simple image loader and image shape.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
733 pass |
50d253d0fcba
Simple image loader and image shape.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
734 pass |
50d253d0fcba
Simple image loader and image shape.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
735 |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
736 def stext_gen_text(text, coord_id, codefo, doc, txt_strs, attrs): |
431
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
737 if not txt_strs: |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
738 return |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
739 |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
740 text_id = _get_id(text) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
741 x = float(text.getAttribute('x')) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
742 y = float(text.getAttribute('y')) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
743 print >> codefo, 'dnl' |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
744 print >> codefo, \ |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
745 'ADD_STEXT([%s], [%s], %f, %f, [%s])dnl' % \ |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
746 (text_id, txt_strs.encode('utf8'), x, y, coord_id) |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
747 translate_style(text, coord_id, codefo, doc, 'STEXT_') |
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
748 stext_generate_font_attributes(text, attrs, coord_id, codefo, doc) |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
749 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
750 |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
751 def gen_text(text, coord_id, codefo, doc, txt_strs, attrs): |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
752 raise NotImplementedError, \ |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
753 'gen_text should be assigned to an implementation' |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
754 |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
755 @check_mbname |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
756 def translate_text(text, coord_id, codefo, doc): |
434 | 757 coord_id = translate_shape_transform(text, coord_id, codefo) |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
758 try: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
759 map = text.style_map |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
760 except: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
761 map = translate_font_style(text, codefo) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
762 text.style_map = map |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
763 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
764 attrs = [] |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
765 attr = [0, 0, text] |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
766 attrs.append(attr) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
767 |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
768 txt_strs = '' |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
769 for node in text.childNodes: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
770 if node.localName == None: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
771 txt_strs = txt_strs + node.data |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
772 elif node.localName == 'tspan': |
431
bf1addb037b7
Add -s option to svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
428
diff
changeset
|
773 txt_strs = translate_tspan(node, text, coord_id, codefo, |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
774 doc,txt_strs, attrs) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
775 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
776 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
777 attr[1] = len(txt_strs.encode('utf8')) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
778 gen_text(text, coord_id, codefo, doc, txt_strs, attrs) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
779 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
780 |
310 | 781 @check_mbname |
782 def translate_image(image, coord_id, codefo, doc): | |
783 coord_id = translate_shape_transform(image, coord_id, codefo) | |
784 | |
785 image_id = _get_id(image) | |
786 if not image.hasAttributeNS(xlinkns, 'href'): | |
787 raise ValueError, 'image %s must has a href attribute.' % (image_id) | |
788 href = image.getAttributeNS(xlinkns, 'href') | |
789 if image.hasAttribute('x'): | |
790 x_str = image.getAttribute('x') | |
791 x = float(x_str) | |
792 else: | |
793 x = 0 | |
794 pass | |
795 if image.hasAttribute('y'): | |
796 y_str = image.getAttribute('y') | |
797 y = float(y_str) | |
798 else: | |
799 y = 0 | |
800 pass | |
801 if image.hasAttribute('width'): | |
802 width_str = image.getAttribute('width') | |
803 width = float(width_str) | |
804 else: | |
805 width = -1 | |
806 pass | |
807 if image.hasAttribute('height'): | |
808 height_str = image.getAttribute('height') | |
809 height = float(height_str) | |
810 else: | |
811 height = -1 | |
812 pass | |
813 print >> codefo, 'dnl' | |
814 print >> codefo, \ | |
815 'ADD_IMAGE([%s], [%s], %f, %f, %f, %f, [%s])dnl' % ( | |
816 image_id, href, x, y, width, height, coord_id) | |
817 pass | |
818 | |
819 | |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
820 reo_func = re.compile('([a-zA-Z]+)\\([^\\)]*\\)') |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
821 reo_translate = re.compile('translate\\(([-+]?[0-9]+(\\.[0-9]+)?),([-+]?[0-9]+(\\.[0-9]+)?)\\)') |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
822 reo_matrix = re.compile('matrix\\(([-+]?[0-9]+(\\.[0-9]+)?),([-+]?[0-9]+(\\.[0-9]+)?),([-+]?[0-9]+(\\.[0-9]+)?),([-+]?[0-9]+(\\.[0-9]+)?),([-+]?[0-9]+(\\.[0-9]+)?),([-+]?[0-9]+(\\.[0-9]+)?)\\)') |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
823 def translate_transform(coord_id, transform, codefo, prefix): |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
824 transform = transform.strip() |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
825 mo = reo_func.match(transform) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
826 if not mo: |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
827 return |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
828 name = mo.group(1) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
829 if name == 'translate': |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
830 mo = reo_translate.match(transform) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
831 if mo: |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
832 x = float(mo.group(1)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
833 y = float(mo.group(3)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
834 print >> codefo, '%sTRANSLATE([%s], %f, %f)dnl' % ( |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
835 prefix, coord_id, x, y) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
836 pass |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
837 elif name == 'matrix': |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
838 mo = reo_matrix.match(transform) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
839 if mo: |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
840 r10, r11, r12 = \ |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
841 float(mo.group(1)), float(mo.group(3)), float(mo.group(5)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
842 r20, r21, r22 = \ |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
843 float(mo.group(7)), float(mo.group(9)), float(mo.group(11)) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
844 print >> codefo, \ |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
845 '%sMATRIX([%s], %f, %f, %f, %f, %f, %f)dnl' % ( |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
846 prefix, coord_id, r10, r11, r12, r20, r21, r22) |
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
847 pass |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
848 pass |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
849 pass |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
850 |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
851 @check_mbname |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
852 def translate_group(group, parent_id, codefo, doc): |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
197
diff
changeset
|
853 group_id = _get_id(group) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
854 print >> codefo, 'dnl' |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
855 print >> codefo, 'ADD_COORD([%s], [%s])dnl' % (group_id, parent_id) |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
856 |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
857 if group.hasAttribute('transform'): |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
858 transform = group.getAttribute('transform') |
85
9b4a02bcaeb1
matrix() function in transform attribute of group and shapes
Thinker K.F. Li <thinker@branda.to>
parents:
84
diff
changeset
|
859 translate_transform(group_id, transform, codefo, 'COORD_') |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
860 pass |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
861 |
434 | 862 mock_sn = 0 |
81 | 863 translate_style(group, group_id, codefo, doc, 'GROUP_') |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
864 for node in group.childNodes: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
865 if node.namespaceURI != svgns: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
866 continue |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
867 if node.localName == 'g': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
868 translate_group(node, group_id, codefo, doc) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
869 elif node.localName == 'path': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
870 translate_path(node, group_id, codefo, doc) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
871 elif node.localName == 'rect': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
872 translate_rect(node, group_id, codefo, doc) |
83 | 873 elif node.localName == 'text': |
874 translate_text(node, group_id, codefo, doc) | |
310 | 875 elif node.localName == 'image': |
876 translate_image(node, group_id, codefo, doc) | |
278
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
877 elif node.localName == 'textarea': |
a90fd749af82
Implement the whole tspan attribute. Currently, we can accept font family/font style/font weight and font size.
wycc
parents:
241
diff
changeset
|
878 translate_textarea(node, group_id, codefo, doc) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
879 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
880 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
881 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
882 |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
883 ## \brief Translate "scenes" tag in "metadata" tag. |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
884 # |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
885 def translate_scenes(scenes_node, codefo, doc): |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
886 scenes = [] |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
887 for scene in scenes_node.childNodes: |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
888 if scene.localName != 'scene' or \ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
889 not scene.hasAttribute('ref') or \ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
890 not scene.hasAttribute('start'): |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
891 continue |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
892 |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
893 start_str = scene.getAttribute('start') |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
894 start = end = int(start_str) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
895 if scene.hasAttribute('end'): |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
896 end_str = scene.getAttribute('end') |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
897 end = int(end_str) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
898 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
899 ref = scene.getAttribute('ref') |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
900 |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
901 while len(scenes) <= end: |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
902 scenes.append([]) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
903 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
904 |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
905 for i in range(start, end + 1): |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
906 scenes[i].append(ref) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
907 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
908 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
909 |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
910 for scene_idx, groups_in_scene in enumerate(scenes): |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
911 if groups_in_scene: |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
912 groups_str = '[' + '],['.join(groups_in_scene) + ']' |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
913 else: |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
914 groups_str = '' |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
915 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
916 print >> codefo, \ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
917 'SCENE(%d, [%s])dnl' % (scene_idx, groups_str) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
918 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
919 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
920 |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
921 def svg_2_code(dom, codefo): |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
922 for node in dom.childNodes: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
923 if node.localName == 'svg' and node.namespaceURI == svgns: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
924 break; |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
925 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
926 else: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
927 raise ValueErr, 'no any svg tag node.' |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
928 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
929 svg = node |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
930 for node in svg.childNodes: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
931 if node.localName == 'defs' and node.namespaceURI == svgns: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
932 translate_defs(node, codefo, dom) |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
933 elif node.localName == 'metadata' and node.namespaceURI == svgns: |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
934 for meta_node in node.childNodes: |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
935 if meta_node.localName == 'scenes': |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
936 translate_scenes(meta_node, codefo, dom) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
937 pass |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
938 pass |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
939 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
940 elif node.localName == 'g' and node.namespaceURI == svgns: |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
941 translate_group(node, 'root_coord', codefo, dom) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
942 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
943 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
944 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
945 |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
946 if __name__ == '__main__': |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
947 from os import path |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
948 import optparse |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
949 |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
950 usage='usage: %prog [options] <SVG file> [<output>]' |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
951 parser = optparse.OptionParser(usage=usage) |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
952 parser.add_option('-s', '--stext', dest='stext', |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
953 action='store_true', default=False, |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
954 help='Use sh_stext instead of sh_text'); |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
955 options, args = parser.parse_args() |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
956 |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
957 if len(args) == 2: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
958 svgfn = args[0] |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
959 codefn = args[1] |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
960 elif len(args) == 1: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
961 svgfn = args[0] |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
962 codefn = 'out.mb' |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
963 else: |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
964 parser.print_help() |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
965 sys.exit(1) |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
966 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
967 |
65
35c2b7ba140b
Use file name of generated M4 script as name of header
Thinker K.F. Li <thinker@branda.to>
parents:
64
diff
changeset
|
968 struct_name = path.basename(codefn).split('.')[0] |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
969 |
428
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
970 if options.stext: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
971 gen_text = stext_gen_text |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
972 else: |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
973 gen_text = pango_gen_text |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
974 pass |
c3faebaec0c4
Reformat svg2code.py to make more compatible witth our convention
Thinker K.F. Li <thinker@branda.to>
parents:
373
diff
changeset
|
975 |
62
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
976 dom = parse(svgfn) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
977 codefo = file(codefn, 'w+') |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
978 print >> codefo, 'MADBUTTERFLY([%s],[dnl' % (struct_name) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
979 svg_2_code(dom, codefo) |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
980 print >> codefo, '])dnl' |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
981 pass |
7d976d925431
Generate C header files for SVG files.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
982 |