annotate tools/svg2code.py @ 605:a8fa4c550fe5 openvg

use O_ALLOC() to make code clear
author Thinker K.F. Li <thinker@branda.to>
date Sun, 04 Jul 2010 15:39:12 +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
c668c5c3ceae M4 macro for C binding.
Thinker K.F. Li <thinker@branda.to>
parents: 63
diff changeset
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
c668c5c3ceae M4 macro for C binding.
Thinker K.F. Li <thinker@branda.to>
parents: 63
diff changeset
47 stops.append('[COLOR_STOP([%s], %f, %f, %f, %f, %f)]' % (
c668c5c3ceae M4 macro for C binding.
Thinker K.F. Li <thinker@branda.to>
parents: 63
diff changeset
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
c668c5c3ceae M4 macro for C binding.
Thinker K.F. Li <thinker@branda.to>
parents: 63
diff changeset
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
f4b792afa74e m4 translator
Thinker K.F. Li <thinker@branda.to>
parents: 62
diff changeset
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
f4b792afa74e m4 translator
Thinker K.F. Li <thinker@branda.to>
parents: 62
diff changeset
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
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents: 65
diff changeset
71 print >> codefo, 'REF_STOPS_LINEAR([%s], [%s])dnl' % (
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents: 65
diff changeset
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
f4b792afa74e m4 translator
Thinker K.F. Li <thinker@branda.to>
parents: 62
diff changeset
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
f4b792afa74e m4 translator
Thinker K.F. Li <thinker@branda.to>
parents: 62
diff changeset
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
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents: 65
diff changeset
96 print >> codefo, 'REF_STOPS_RADIAL([%s], [%s])dnl' % (
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents: 65
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
124 return prop_map
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
125
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
126 def translate_style(node, coord_id, codefo, doc, prefix):
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
182 elif stroke.lower() == 'none':
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
202
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
203 if prop_map.has_key('display'):
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
204 display = prop_map['display'].strip().lower()
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
205 if display == 'none':
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
206 print >> codefo, '%sHIDE([%s])dnl' % (prefix, node_id)
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
207 pass
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
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
d6f9af55b0d0 More documentation.
Thinker K.F. Li <thinker@branda.to>
parents: 86
diff changeset
216 ## \page shape_coord Coordinate Transformation for Shapes.
d6f9af55b0d0 More documentation.
Thinker K.F. Li <thinker@branda.to>
parents: 86
diff changeset
217 #
d6f9af55b0d0 More documentation.
Thinker K.F. Li <thinker@branda.to>
parents: 86
diff changeset
218 # svg2code.py add a coord_t for a shape if transform attribute
d6f9af55b0d0 More documentation.
Thinker K.F. Li <thinker@branda.to>
parents: 86
diff changeset
219 # of it's tag is setted. The name of coord_t object is
d6f9af55b0d0 More documentation.
Thinker K.F. Li <thinker@branda.to>
parents: 86
diff changeset
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
c8b6ca46950b Add merged result
wycc
parents: 279 269
diff changeset
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
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
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
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
527 style_str = text.getAttribute('style')
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
528 style_map = get_style_map(style_str)
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
565 pass
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
c981e561ac37 * Keep the font name as the original case.
wycc
parents: 300
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
653 pass
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
654 pass
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
659 x = float(text.getAttribute('x'))
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
660 y = float(text.getAttribute('y'))
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
661 print >> codefo, 'dnl'
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
664 text_id.encode('utf8'), u''.join(txt_strs).encode('utf8'),
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
b5c7670b524b Add coord for stext
Thinker K.F. Li <thinker@branda.to>
parents: 431
diff changeset
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
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
781 @check_mbname
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
782 def translate_image(image, coord_id, codefo, doc):
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
783 coord_id = translate_shape_transform(image, coord_id, codefo)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
784
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
785 image_id = _get_id(image)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
786 if not image.hasAttributeNS(xlinkns, 'href'):
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
787 raise ValueError, 'image %s must has a href attribute.' % (image_id)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
788 href = image.getAttributeNS(xlinkns, 'href')
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
789 if image.hasAttribute('x'):
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
790 x_str = image.getAttribute('x')
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
791 x = float(x_str)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
792 else:
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
793 x = 0
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
794 pass
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
795 if image.hasAttribute('y'):
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
796 y_str = image.getAttribute('y')
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
797 y = float(y_str)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
798 else:
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
799 y = 0
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
800 pass
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
801 if image.hasAttribute('width'):
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
802 width_str = image.getAttribute('width')
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
803 width = float(width_str)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
804 else:
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
805 width = -1
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
806 pass
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
807 if image.hasAttribute('height'):
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
808 height_str = image.getAttribute('height')
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
809 height = float(height_str)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
810 else:
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
811 height = -1
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
812 pass
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
813 print >> codefo, 'dnl'
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
814 print >> codefo, \
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
815 'ADD_IMAGE([%s], [%s], %f, %f, %f, %f, [%s])dnl' % (
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
816 image_id, href, x, y, width, height, coord_id)
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
817 pass
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
818
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
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
b5c7670b524b Add coord for stext
Thinker K.F. Li <thinker@branda.to>
parents: 431
diff changeset
862 mock_sn = 0
81
13fdf205047b Hide shapes and groups
Thinker K.F. Li <thinker@branda.to>
parents: 80
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
873 elif node.localName == 'text':
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
874 translate_text(node, group_id, codefo, doc)
310
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
875 elif node.localName == 'image':
25a68d15e92f Merge the image loader back
wycc
parents: 306
diff changeset
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