swfmill 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. data/.document +5 -0
  2. data/.gitignore +23 -0
  3. data/.swfmill +240 -0
  4. data/LICENSE +340 -0
  5. data/README.rdoc +37 -0
  6. data/Rakefile +59 -0
  7. data/VERSION +1 -0
  8. data/ext/.gitignore +5 -0
  9. data/ext/extconf.rb +86 -0
  10. data/ext/swfmill/.gitignore +27 -0
  11. data/ext/swfmill/AUTHORS +9 -0
  12. data/ext/swfmill/COPYING +340 -0
  13. data/ext/swfmill/Makefile.am +14 -0
  14. data/ext/swfmill/Makefile.in +635 -0
  15. data/ext/swfmill/NEWS +189 -0
  16. data/ext/swfmill/README +170 -0
  17. data/ext/swfmill/TODO +33 -0
  18. data/ext/swfmill/aclocal.m4 +7712 -0
  19. data/ext/swfmill/autogen.sh +7 -0
  20. data/ext/swfmill/compile +142 -0
  21. data/ext/swfmill/config.guess +1516 -0
  22. data/ext/swfmill/config.sub +1626 -0
  23. data/ext/swfmill/configure +21868 -0
  24. data/ext/swfmill/configure.ac +55 -0
  25. data/ext/swfmill/depcomp +589 -0
  26. data/ext/swfmill/install-sh +519 -0
  27. data/ext/swfmill/ltmain.sh +6964 -0
  28. data/ext/swfmill/missing +367 -0
  29. data/ext/swfmill/src/Geom.cpp +107 -0
  30. data/ext/swfmill/src/Geom.h +100 -0
  31. data/ext/swfmill/src/Makefile.am +86 -0
  32. data/ext/swfmill/src/Makefile.in +1025 -0
  33. data/ext/swfmill/src/SWF.h +11941 -0
  34. data/ext/swfmill/src/SWFAction.cpp +41 -0
  35. data/ext/swfmill/src/SWFAction.h +19 -0
  36. data/ext/swfmill/src/SWFBasic.h +7 -0
  37. data/ext/swfmill/src/SWFFile.cpp +406 -0
  38. data/ext/swfmill/src/SWFFile.h +34 -0
  39. data/ext/swfmill/src/SWFFilter.cpp +25 -0
  40. data/ext/swfmill/src/SWFFilter.h +15 -0
  41. data/ext/swfmill/src/SWFGlyphList.cpp +262 -0
  42. data/ext/swfmill/src/SWFGlyphList.h +34 -0
  43. data/ext/swfmill/src/SWFIdItem.h +85 -0
  44. data/ext/swfmill/src/SWFIdItems.h +16 -0
  45. data/ext/swfmill/src/SWFItem.cpp +235 -0
  46. data/ext/swfmill/src/SWFItem.h +60 -0
  47. data/ext/swfmill/src/SWFList.h +179 -0
  48. data/ext/swfmill/src/SWFReader.cpp +352 -0
  49. data/ext/swfmill/src/SWFReader.h +73 -0
  50. data/ext/swfmill/src/SWFShapeItem.cpp +220 -0
  51. data/ext/swfmill/src/SWFShapeItem.h +45 -0
  52. data/ext/swfmill/src/SWFShapeMaker.cpp +401 -0
  53. data/ext/swfmill/src/SWFShapeMaker.h +128 -0
  54. data/ext/swfmill/src/SWFTag.cpp +49 -0
  55. data/ext/swfmill/src/SWFTag.h +20 -0
  56. data/ext/swfmill/src/SWFTrait.cpp +35 -0
  57. data/ext/swfmill/src/SWFTrait.h +22 -0
  58. data/ext/swfmill/src/SWFWriter.cpp +312 -0
  59. data/ext/swfmill/src/SWFWriter.h +84 -0
  60. data/ext/swfmill/src/base64.c +110 -0
  61. data/ext/swfmill/src/base64.h +15 -0
  62. data/ext/swfmill/src/codegen/Makefile.am +15 -0
  63. data/ext/swfmill/src/codegen/Makefile.in +346 -0
  64. data/ext/swfmill/src/codegen/basic.xsl +45 -0
  65. data/ext/swfmill/src/codegen/basics.xsl +235 -0
  66. data/ext/swfmill/src/codegen/dumper.xsl +109 -0
  67. data/ext/swfmill/src/codegen/header.xsl +131 -0
  68. data/ext/swfmill/src/codegen/mk.xsl +26 -0
  69. data/ext/swfmill/src/codegen/parser.xsl +196 -0
  70. data/ext/swfmill/src/codegen/parsexml.xsl +312 -0
  71. data/ext/swfmill/src/codegen/size.xsl +189 -0
  72. data/ext/swfmill/src/codegen/source.xml +2197 -0
  73. data/ext/swfmill/src/codegen/writer.xsl +190 -0
  74. data/ext/swfmill/src/codegen/writexml.xsl +138 -0
  75. data/ext/swfmill/src/swfmill.cpp +482 -0
  76. data/ext/swfmill/src/swft/Makefile.am +55 -0
  77. data/ext/swfmill/src/swft/Makefile.in +717 -0
  78. data/ext/swfmill/src/swft/Parser.cpp +76 -0
  79. data/ext/swfmill/src/swft/Parser.h +37 -0
  80. data/ext/swfmill/src/swft/SVGAttributeParser.cpp +78 -0
  81. data/ext/swfmill/src/swft/SVGAttributeParser.h +35 -0
  82. data/ext/swfmill/src/swft/SVGColor.cpp +116 -0
  83. data/ext/swfmill/src/swft/SVGColor.h +37 -0
  84. data/ext/swfmill/src/swft/SVGColors.h +167 -0
  85. data/ext/swfmill/src/swft/SVGGradient.cpp +258 -0
  86. data/ext/swfmill/src/swft/SVGGradient.h +81 -0
  87. data/ext/swfmill/src/swft/SVGPathParser.cpp +155 -0
  88. data/ext/swfmill/src/swft/SVGPathParser.h +126 -0
  89. data/ext/swfmill/src/swft/SVGPointsParser.cpp +51 -0
  90. data/ext/swfmill/src/swft/SVGPointsParser.h +25 -0
  91. data/ext/swfmill/src/swft/SVGStyle.cpp +181 -0
  92. data/ext/swfmill/src/swft/SVGStyle.h +80 -0
  93. data/ext/swfmill/src/swft/SVGTransformParser.cpp +72 -0
  94. data/ext/swfmill/src/swft/SVGTransformParser.h +32 -0
  95. data/ext/swfmill/src/swft/readpng.c +305 -0
  96. data/ext/swfmill/src/swft/readpng.h +92 -0
  97. data/ext/swfmill/src/swft/swft.cpp +251 -0
  98. data/ext/swfmill/src/swft/swft.h +64 -0
  99. data/ext/swfmill/src/swft/swft_document.cpp +57 -0
  100. data/ext/swfmill/src/swft/swft_import.cpp +38 -0
  101. data/ext/swfmill/src/swft/swft_import_binary.cpp +82 -0
  102. data/ext/swfmill/src/swft/swft_import_jpeg.cpp +255 -0
  103. data/ext/swfmill/src/swft/swft_import_mp3.cpp +268 -0
  104. data/ext/swfmill/src/swft/swft_import_png.cpp +231 -0
  105. data/ext/swfmill/src/swft/swft_import_ttf.cpp +519 -0
  106. data/ext/swfmill/src/swft/swft_import_wav.cpp +255 -0
  107. data/ext/swfmill/src/swft/swft_path.cpp +178 -0
  108. data/ext/swfmill/src/xslt/Makefile.am +51 -0
  109. data/ext/swfmill/src/xslt/Makefile.in +536 -0
  110. data/ext/swfmill/src/xslt/README +19 -0
  111. data/ext/swfmill/src/xslt/assemble.xsl +38 -0
  112. data/ext/swfmill/src/xslt/simple-deprecated.xslt +62 -0
  113. data/ext/swfmill/src/xslt/simple-elements.xslt +627 -0
  114. data/ext/swfmill/src/xslt/simple-import.xslt +565 -0
  115. data/ext/swfmill/src/xslt/simple-svg.xslt +383 -0
  116. data/ext/swfmill/src/xslt/simple-tools.xslt +255 -0
  117. data/ext/swfmill/src/xslt/simple.cpp +1686 -0
  118. data/ext/swfmill/src/xslt/simple.xml +7 -0
  119. data/ext/swfmill/src/xslt/xslt.h +7 -0
  120. data/ext/swfmill/test/Makefile.am +1 -0
  121. data/ext/swfmill/test/Makefile.in +490 -0
  122. data/ext/swfmill/test/xml/Makefile.am +20 -0
  123. data/ext/swfmill/test/xml/Makefile.in +353 -0
  124. data/ext/swfmill/test/xml/test-xml +21 -0
  125. data/ext/swfmill_ext.cc +375 -0
  126. data/lib/swfmill.rb +30 -0
  127. data/spec/data/swfmill-banner1.swf +0 -0
  128. data/spec/spec.opts +1 -0
  129. data/spec/spec_helper.rb +14 -0
  130. data/spec/swfmill_spec.rb +125 -0
  131. metadata +206 -0
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
3
+
4
+ <xsl:template mode="ctype" match="byte">unsigned char</xsl:template>
5
+ <xsl:template mode="ctype" match="word">unsigned short</xsl:template>
6
+ <xsl:template mode="ctype" match="byteOrWord">unsigned short</xsl:template>
7
+ <xsl:template mode="ctype" match="string">char *</xsl:template>
8
+ <xsl:template mode="ctype" match="fixedpoint">float</xsl:template>
9
+ <xsl:template mode="ctype" match="fixedpoint2">float</xsl:template>
10
+ <xsl:template mode="ctype" match="bit">bool</xsl:template>
11
+ <xsl:template mode="ctype" match="integer">int</xsl:template>
12
+ <xsl:template mode="ctype" match="object"><xsl:value-of select="@type"/></xsl:template>
13
+ <xsl:template mode="ctype" match="list">List&lt;<xsl:value-of select="@type"/>&gt;</xsl:template>
14
+ <xsl:template mode="ctype" match="data">unsigned char *</xsl:template>
15
+ <xsl:template mode="ctype" match="uint32">unsigned int</xsl:template>
16
+ <xsl:template mode="ctype" match="float">float</xsl:template>
17
+ <xsl:template mode="ctype" match="double">double</xsl:template>
18
+ <xsl:template mode="ctype" match="double2">double</xsl:template>
19
+ <xsl:template mode="ctype" match="half">float</xsl:template>
20
+ <xsl:template mode="ctype" match="xml">char *</xsl:template>
21
+ <xsl:template mode="ctype" match="u30" >unsigned int</xsl:template>
22
+ <xsl:template mode="ctype" match="s24" >int</xsl:template>
23
+ <xsl:template mode="ctype" match="encodedu32">unsigned int</xsl:template>
24
+
25
+ <xsl:template mode="printf" match="byte">%i</xsl:template>
26
+ <xsl:template mode="printf" match="word">%i</xsl:template>
27
+ <xsl:template mode="printf" match="byteOrWord">%i</xsl:template>
28
+ <xsl:template mode="printf" match="string">%s</xsl:template>
29
+ <xsl:template mode="printf" match="fixedpoint">%G</xsl:template>
30
+ <xsl:template mode="printf" match="fixedpoint2">%G</xsl:template>
31
+ <xsl:template mode="printf" match="bit">%i</xsl:template>
32
+ <xsl:template mode="printf" match="integer">%i</xsl:template>
33
+ <xsl:template mode="printf" match="object|list|data">%p</xsl:template>
34
+ <xsl:template mode="printf" match="uint32">%i</xsl:template>
35
+ <xsl:template mode="printf" match="float|double|double2|half">%g</xsl:template>
36
+ <xsl:template mode="printf" match="xml">%s</xsl:template>
37
+ <xsl:template mode="printf" match="u30">%i</xsl:template>
38
+ <xsl:template mode="printf" match="s24">%i</xsl:template>
39
+ <xsl:template mode="printf" match="encodedu32">%i</xsl:template>
40
+
41
+ <xsl:template mode="default" match="byte|word|byteOrWord|fixedpoint|fixedpoint2|bit|integer">0</xsl:template>
42
+ <xsl:template mode="default" match="uint32|float|double|double2|half|u30|s24|encodedu32">0</xsl:template>
43
+ <xsl:template mode="default" match="string|data|xml">NULL</xsl:template>
44
+
45
+ </xsl:stylesheet>
@@ -0,0 +1,235 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
3
+
4
+ <xsl:template match="list|object|fill-byte|context" mode="ctor"/>
5
+ <xsl:template match="flagged|if" mode="ctor">
6
+ <xsl:apply-templates mode="ctor"/>
7
+ </xsl:template>
8
+
9
+ <xsl:template match="*" mode="ctor" priority="-1">
10
+ <xsl:value-of select="@name"/> = <xsl:choose>
11
+ <xsl:when test="@default"><xsl:value-of select="@default"/></xsl:when>
12
+ <xsl:otherwise><xsl:apply-templates select="." mode="default"/></xsl:otherwise>
13
+ </xsl:choose>;
14
+ </xsl:template>
15
+
16
+ <xsl:template match="string|data" mode="dtor">
17
+ delete[] <xsl:value-of select="@name"/>;
18
+ </xsl:template>
19
+
20
+ <xsl:template name="objectList">
21
+ <xsl:param name="class"/>
22
+ <xsl:param name="itemName"/>
23
+
24
+ <xsl:variable name="tag">
25
+ <xsl:value-of select="translate($class,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
26
+ </xsl:variable>
27
+
28
+ <xsl:for-each select="*[name() = $tag]">
29
+ <xsl:value-of select="$class"/> *<xsl:value-of select="@name"/>Factory() {
30
+ return (<xsl:value-of select="$class"/>*)new <xsl:value-of select="@name"/>;
31
+ }
32
+ </xsl:for-each>
33
+
34
+ template&lt;&gt; IdItem&lt;<xsl:value-of select="$class"/>&gt;::Description IdItem&lt;<xsl:value-of select="$class"/>&gt;::Registry[] = {
35
+ <xsl:for-each select="*[name() = $tag]">
36
+ { <xsl:value-of select="@id"/>, "<xsl:value-of select="@name"/>", <xsl:value-of select="@name"/>Factory },
37
+ </xsl:for-each>
38
+ { 0, NULL }
39
+ };
40
+ template&lt;&gt; int IdItem&lt;<xsl:value-of select="$class"/>&gt;::nRegistered = <xsl:value-of select="count(*[name() = $tag])"/>;
41
+
42
+ template&lt;&gt; const char* IdItem&lt;<xsl:value-of select="$class"/>&gt;::itemName = "<xsl:value-of select="$itemName"/>";
43
+
44
+ </xsl:template>
45
+
46
+ <!-- *************** -->
47
+
48
+ <xsl:template name="basics">
49
+ <xsl:document href="g{/format/@format}Basics.cpp" method="text">
50
+
51
+ #include "<xsl:value-of select="/format/@format"/>.h"
52
+ #include "<xsl:value-of select="/format/@format"/>Tag.h"
53
+ #include &lt;cstring&gt;
54
+
55
+ namespace <xsl:value-of select="/format/@format"/> {
56
+
57
+
58
+ // ------------ context structure
59
+
60
+ Context::Context() {
61
+ swfVersion = 0;
62
+ transientPropsToXML = false;
63
+ debugTrace = false;
64
+ exportAssets = false;
65
+ isLast = false;
66
+ tagVersion = 0;
67
+ quiet = false;
68
+ <xsl:apply-templates select="//*[@context]" mode="ctor"/>
69
+ }
70
+
71
+ // ------------ basic object functions
72
+
73
+ <xsl:for-each select="type|tag|action|filter|style|stackitem|namespaceconstant|multinameconstant|trait|opcode">
74
+
75
+ <xsl:value-of select="@name"/>::<xsl:value-of select="@name"/>() {
76
+ <xsl:apply-templates mode="ctor"/>
77
+ }
78
+
79
+ <xsl:value-of select="@name"/>::~<xsl:value-of select="@name"/>() {
80
+ <xsl:apply-templates mode="dtor"/>
81
+ }
82
+
83
+ <xsl:value-of select="@name"/>* <xsl:value-of select="@name"/>::get( Reader *r, int end, Context *ctx ) {
84
+ <xsl:value-of select="@name"/>* ret = new <xsl:value-of select="@name"/>;
85
+ ret->parse( r, end, ctx );
86
+ return ret;
87
+ }
88
+
89
+ <xsl:value-of select="@name"/>* <xsl:value-of select="@name"/>::getByName( const char *name ) {
90
+ if( strcmp( name, "<xsl:value-of select="@name"/>" ) ) return NULL;
91
+ <xsl:value-of select="@name"/>* ret = new <xsl:value-of select="@name"/>;
92
+ return ret;
93
+ }
94
+
95
+ <xsl:apply-templates mode="defineAccessors"/>
96
+
97
+ </xsl:for-each>
98
+
99
+ // ------------ object lists
100
+
101
+ <xsl:call-template name="objectList">
102
+ <xsl:with-param name="class">Tag</xsl:with-param>
103
+ <xsl:with-param name="itemName">tag</xsl:with-param>
104
+ </xsl:call-template>
105
+
106
+ <xsl:call-template name="objectList">
107
+ <xsl:with-param name="class">Action</xsl:with-param>
108
+ <xsl:with-param name="itemName">action</xsl:with-param>
109
+ </xsl:call-template>
110
+
111
+ <xsl:call-template name="objectList">
112
+ <xsl:with-param name="class">Filter</xsl:with-param>
113
+ <xsl:with-param name="itemName">filter</xsl:with-param>
114
+ </xsl:call-template>
115
+
116
+ <xsl:call-template name="objectList">
117
+ <xsl:with-param name="class">Style</xsl:with-param>
118
+ <xsl:with-param name="itemName">fill style</xsl:with-param>
119
+ </xsl:call-template>
120
+
121
+ <xsl:call-template name="objectList">
122
+ <xsl:with-param name="class">StackItem</xsl:with-param>
123
+ <xsl:with-param name="itemName">stack item</xsl:with-param>
124
+ </xsl:call-template>
125
+
126
+ <xsl:for-each select="stackitem">
127
+ <xsl:if test="@id">
128
+ int <xsl:value-of select="@name"/>::id = <xsl:value-of select="@id"/>;
129
+ </xsl:if>
130
+ </xsl:for-each>
131
+
132
+ <xsl:call-template name="objectList">
133
+ <xsl:with-param name="class">NamespaceConstant</xsl:with-param>
134
+ <xsl:with-param name="itemName">namespace constant</xsl:with-param>
135
+ </xsl:call-template>
136
+
137
+ <xsl:call-template name="objectList">
138
+ <xsl:with-param name="class">MultinameConstant</xsl:with-param>
139
+ <xsl:with-param name="itemName">multiname constant</xsl:with-param>
140
+ </xsl:call-template>
141
+
142
+ <xsl:call-template name="objectList">
143
+ <xsl:with-param name="class">Trait</xsl:with-param>
144
+ <xsl:with-param name="itemName">trait</xsl:with-param>
145
+ </xsl:call-template>
146
+
147
+ <xsl:call-template name="objectList">
148
+ <xsl:with-param name="class">OpCode</xsl:with-param>
149
+ <xsl:with-param name="itemName">opcode</xsl:with-param>
150
+ </xsl:call-template>
151
+ }
152
+ </xsl:document>
153
+ </xsl:template>
154
+
155
+
156
+ <!-- accessors -->
157
+ <xsl:template match="flagged|if" mode="defineAccessors">
158
+ <xsl:apply-templates mode="defineAccessors"/>
159
+ </xsl:template>
160
+ <xsl:template match="fill-byte|context" mode="defineAccessors"/>
161
+ <xsl:template match="byte|word|byteOrWord|fixedpoint|fixedpoint2|bit|integer[@constant-size]|uint32|u30|s24|encodedu32" mode="defineAccessors">
162
+ // Constant Size Primitive
163
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text>
164
+ <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>() {
165
+ return <xsl:value-of select="@name"/>;
166
+ }
167
+
168
+ void <xsl:value-of select="ancestor::*[@name]/@name"/>::set<xsl:value-of select="@name"/>( <xsl:apply-templates mode="ctype" select="."/> v ) {
169
+ <xsl:value-of select="@name"/> = v;
170
+ }
171
+ </xsl:template>
172
+ <xsl:template match="integer" mode="defineAccessors" priority="-1">
173
+ // NBitInt
174
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text>
175
+ <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>() {
176
+ return <xsl:value-of select="@name"/>;
177
+ }
178
+
179
+ void <xsl:value-of select="ancestor::*[@name]/@name"/>::set<xsl:value-of select="@name"/>( <xsl:apply-templates mode="ctype" select="."/> v ) {
180
+ <xsl:value-of select="@name"/> = v;
181
+ <!-- FIXME: this must be done in write, as we have no context here
182
+ int b = SWFBitsNeeded( <xsl:value-of select="@name"/><xsl:if test="@signed">, true</xsl:if> );
183
+ <xsl:if test="@size-add">b -= <xsl:value-of select="@size-add"/>;</xsl:if>
184
+ if( b > <xsl:value-of select="@size"/> ) <xsl:value-of select="@size"/> = b;
185
+ -->
186
+ }
187
+ </xsl:template>
188
+ <xsl:template match="string" mode="defineAccessors">
189
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text>
190
+ <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>() {
191
+ return <xsl:value-of select="@name"/>;
192
+ }
193
+
194
+ void <xsl:value-of select="ancestor::*[@name]/@name"/>::set<xsl:value-of select="@name"/>( <xsl:apply-templates mode="ctype" select="."/> v ) {
195
+ delete <xsl:value-of select="@name"/>;
196
+ <xsl:value-of select="@name"/> = v;
197
+ }
198
+ </xsl:template>
199
+ <xsl:template match="data" mode="defineAccessors">
200
+ void <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>( unsigned char **dst, int *size ) {
201
+ *dst = <xsl:value-of select="@name"/>;
202
+ *size = <xsl:value-of select="@size"/>;
203
+ }
204
+ void <xsl:value-of select="ancestor::*[@name]/@name"/>::set<xsl:value-of select="@name"/>( const unsigned char *src, int size ) {
205
+ delete <xsl:value-of select="@name"/>;
206
+ <xsl:value-of select="@size"/> = size;
207
+ <xsl:value-of select="@name"/> = new unsigned char[ size ];
208
+ memcpy( <xsl:value-of select="@name"/>, src, size );
209
+ }
210
+ </xsl:template>
211
+ <xsl:template match="object" mode="defineAccessors">
212
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> *</xsl:text>
213
+ <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>() {
214
+ return &amp;<xsl:value-of select="@name"/>;
215
+ }
216
+ </xsl:template>
217
+ <xsl:template match="list" mode="defineAccessors">
218
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> *</xsl:text>
219
+ <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>() {
220
+ return &amp;<xsl:value-of select="@name"/>;
221
+ }
222
+ </xsl:template>
223
+ <xsl:template match="xml" mode="defineAccessors">
224
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text>
225
+ <xsl:value-of select="ancestor::*[@name]/@name"/>::get<xsl:value-of select="@name"/>() {
226
+ return <xsl:value-of select="@name"/>;
227
+ }
228
+
229
+ void <xsl:value-of select="ancestor::*[@name]/@name"/>::set<xsl:value-of select="@name"/>( <xsl:apply-templates mode="ctype" select="."/> v ) {
230
+ delete <xsl:value-of select="@name"/>;
231
+ <xsl:value-of select="@name"/> = v;
232
+ }
233
+ </xsl:template>
234
+
235
+ </xsl:stylesheet>
@@ -0,0 +1,109 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
3
+ <xsl:template name="dumper">
4
+ <xsl:document href="g{/format/@format}Dumper.cpp" method="text">
5
+
6
+ #include "<xsl:value-of select="/format/@format"/>.h"
7
+
8
+ namespace <xsl:value-of select="/format/@format"/> {
9
+
10
+ void print_indent( int n ) {
11
+ for( int i=0; i&lt;n; i++ ) printf(" ");
12
+ }
13
+
14
+ <xsl:for-each select="type|tag|action|filter|style|stackitem|namespaceconstant|multinameconstant|trait|opcode">
15
+ void <xsl:value-of select="@name"/>::dump( int indent, Context *ctx ) {
16
+ print_indent(indent);
17
+ <xsl:if test="@id">
18
+ printf("[%02X] ", type ); //<xsl:value-of select="@id"/>);
19
+ </xsl:if>
20
+
21
+ printf("<xsl:value-of select="@name"/>"); // (sz %i)", getSize( ctx ) );
22
+
23
+ printf("\n");
24
+ indent++;
25
+ <xsl:apply-templates select="*" mode="dump-wrap"/>
26
+ }
27
+ </xsl:for-each>
28
+
29
+ }
30
+
31
+ </xsl:document>
32
+ </xsl:template>
33
+
34
+
35
+ <xsl:template match="flagged" mode="dump-wrap">
36
+ if( <xsl:if test="@negative">!</xsl:if><xsl:value-of select="@flag"/>
37
+ <xsl:if test="@signifier"> &amp; <xsl:value-of select="@signifier"/></xsl:if> ) {
38
+
39
+ <xsl:apply-templates select="*" mode="dump-wrap"/>
40
+ }
41
+ </xsl:template>
42
+
43
+ <xsl:template match="if" mode="dump-wrap">
44
+ if( <xsl:value-of select="@expression"/> ) {
45
+ <xsl:apply-templates select="*" mode="dump-wrap"/>
46
+ }
47
+ </xsl:template>
48
+
49
+ <xsl:template match="fill-byte|context" mode="dump-wrap"/>
50
+
51
+ <xsl:template match="*" mode="dump-wrap" priority="-1">
52
+ print_indent(indent);
53
+ printf("<xsl:value-of select="@name"/>: "); <xsl:apply-templates select="." mode="dump"/>
54
+ </xsl:template>
55
+
56
+
57
+
58
+ <xsl:template match="byte|word|byteOrWord|integer|fixedpoint|fixedpoint2|bit|u30|s24" mode="dump">
59
+ printf("<xsl:apply-templates select="." mode="printf"/>\n", <xsl:value-of select="@name"/>);
60
+ </xsl:template>
61
+
62
+ <xsl:template match="string" mode="dump">
63
+ printf("<xsl:apply-templates select="." mode="printf"/>\n", <xsl:value-of select="@name"/>?<xsl:value-of select="@name"/>:"(nil)");
64
+ </xsl:template>
65
+
66
+ <xsl:template match="object" mode="dump">
67
+ printf("[<xsl:value-of select="@type"/>]\n");
68
+ <xsl:value-of select="@name"/>.dump( indent+1, ctx );
69
+ </xsl:template>
70
+
71
+ <xsl:template match="list" mode="dump">
72
+ {
73
+ printf("[list of <xsl:value-of select="@type"/>s]\n");
74
+ <xsl:value-of select="@type"/> *item;
75
+ ListItem&lt;<xsl:value-of select="@type"/>&gt;* i;
76
+ i = <xsl:value-of select="@name"/>.first();
77
+ while( i ) {
78
+ item = i->data();
79
+ if( item ) {
80
+ item->dump(indent+1,ctx);
81
+ }
82
+ i = i->next();
83
+ }
84
+ }
85
+ </xsl:template>
86
+
87
+ <xsl:template match="data" mode="dump">
88
+ printf("(length %i)\n", <xsl:value-of select="@size"/> );
89
+ if( <xsl:value-of select="@size"/> &amp;&amp; <xsl:value-of select="@name"/> != NULL ) {
90
+ int i=0;
91
+ while( i&lt;<xsl:value-of select="@size"/> ) {
92
+ print_indent( indent+1 );
93
+ for( int n=0; n&lt;8 &amp;&amp; i&lt;<xsl:value-of select="@size"/>; n++ ) {
94
+ printf(" %02X", <xsl:value-of select="@name"/>[i] );
95
+ i++;
96
+ }
97
+ printf("\n");
98
+ }
99
+ }
100
+ </xsl:template>
101
+
102
+
103
+ <xsl:template match="bytealign|context" mode="dump"/>
104
+
105
+ <xsl:template match="context" mode="dump-wrap">
106
+ ctx-><xsl:value-of select="@param"/> = <xsl:value-of select="@value"/>;
107
+ </xsl:template>
108
+
109
+ </xsl:stylesheet>
@@ -0,0 +1,131 @@
1
+ <?xml version="1.0"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" version='1.0'>
3
+ <xsl:template name="header">
4
+ <xsl:document href="{/format/@format}.h" method="text">
5
+ #ifndef <xsl:value-of select="/format/@format"/>_H
6
+ #define <xsl:value-of select="/format/@format"/>_H
7
+
8
+ #include &lt;<xsl:value-of select="/format/@format"/>Reader.h&gt;
9
+ #include &lt;<xsl:value-of select="/format/@format"/>Tag.h&gt;
10
+ #include &lt;<xsl:value-of select="/format/@format"/>Action.h&gt;
11
+ #include &lt;<xsl:value-of select="/format/@format"/>Filter.h&gt;
12
+ #include &lt;<xsl:value-of select="/format/@format"/>Trait.h&gt;
13
+ #include &lt;<xsl:value-of select="/format/@format"/>List.h&gt;
14
+ #include &lt;<xsl:value-of select="/format/@format"/>ShapeItem.h&gt;
15
+ #include &lt;<xsl:value-of select="/format/@format"/>GlyphList.h&gt;
16
+ #include &lt;<xsl:value-of select="/format/@format"/>IdItems.h&gt;
17
+
18
+ namespace <xsl:value-of select="/format/@format"/> {
19
+
20
+ struct Context {
21
+ public:
22
+ Context();
23
+
24
+ int swfVersion;
25
+ bool transientPropsToXML;
26
+ bool debugTrace;
27
+ bool exportAssets;
28
+ bool quiet;
29
+
30
+ bool isLast;
31
+ char tagVersion;
32
+ bool alpha;
33
+ bool many_shapes;
34
+
35
+ <xsl:for-each select="contextvariable">
36
+ <xsl:variable name="tmp">
37
+ <xsl:element name="{@type}"/>
38
+ </xsl:variable>
39
+ <xsl:apply-templates select="exslt:node-set($tmp)" mode="ctype"/>
40
+ <xsl:text> </xsl:text>
41
+ <xsl:value-of select="@name"/>;
42
+ </xsl:for-each>
43
+ };
44
+
45
+ <xsl:for-each select="type|tag|action|filter|style|stackitem|namespaceconstant|multinameconstant|trait|opcode">
46
+ class <xsl:value-of select="@name"/> : public <xsl:apply-templates select="." mode="baseclass"/> {
47
+ public:
48
+ <xsl:value-of select="@name"/>();
49
+ virtual ~<xsl:value-of select="@name"/>();
50
+
51
+ virtual bool parse( Reader *r, int end, Context *ctx );
52
+ virtual void dump( int indent, Context *ctx );
53
+ virtual size_t calcSize( Context *ctx, int start_at );
54
+ virtual void write( Writer *w, Context *ctx );
55
+ virtual void writeXML( xmlNodePtr xml, Context *ctx );
56
+ virtual void parseXML( xmlNodePtr xml, Context *ctx );
57
+
58
+ static <xsl:value-of select="@name"/>* get( Reader *r, int end, Context *ctx );
59
+ static <xsl:value-of select="@name"/>* getByName( const char *name );
60
+
61
+ <xsl:apply-templates mode="declareAccessors"/>
62
+
63
+ protected:
64
+ <xsl:apply-templates mode="declare"/>
65
+
66
+ <xsl:if test="@id">
67
+ static int id;
68
+ </xsl:if>
69
+ };
70
+ </xsl:for-each>
71
+
72
+ }
73
+ #endif
74
+ </xsl:document>
75
+ </xsl:template>
76
+
77
+ <!-- definitions -->
78
+ <xsl:template match="flagged|if" mode="declare">
79
+ <xsl:apply-templates mode="declare"/>
80
+ </xsl:template>
81
+ <xsl:template match="fill-byte|context" mode="declare"/>
82
+
83
+ <xsl:template match="*" mode="declare" priority="-1">
84
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text><xsl:value-of select="@name"/>; // <xsl:value-of select="name()"/><xsl:text>
85
+ </xsl:text>
86
+ </xsl:template>
87
+
88
+ <!-- accessor definitions -->
89
+ <xsl:template match="flagged|if" mode="declareAccessors">
90
+ <xsl:apply-templates mode="declareAccessors"/>
91
+ </xsl:template>
92
+ <xsl:template match="fill-byte|context" mode="declareAccessors"/>
93
+ <xsl:template match="byte|word|byteOrWord|string|fixedpoint|fixedpoint2|bit|integer|uint32|float|double|double2|half|u30|s24|encodedu32" mode="declareAccessors" priority="-1">
94
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text>get<xsl:value-of select="@name"/>();
95
+ void set<xsl:value-of select="@name"/>( <xsl:apply-templates mode="ctype" select="."/> );
96
+ </xsl:template>
97
+ <xsl:template match="xml" mode="declareAccessors" priority="-1">
98
+ <xsl:apply-templates mode="ctype" select="."/><xsl:text> </xsl:text>get<xsl:value-of select="@name"/>();
99
+ void set<xsl:value-of select="@name"/>( <xsl:apply-templates mode="ctype" select="."/> );
100
+ </xsl:template>
101
+ <xsl:template match="data" mode="declareAccessors" priority="-1">
102
+ void get<xsl:value-of select="@name"/>( unsigned char **dst, int *size );
103
+ void set<xsl:value-of select="@name"/>( const unsigned char *src, int size );
104
+ </xsl:template>
105
+ <xsl:template match="object" mode="declareAccessors" priority="-1">
106
+ <xsl:apply-templates mode="ctype" select="."/> *get<xsl:value-of select="@name"/>();
107
+ </xsl:template>
108
+ <xsl:template match="list" mode="declareAccessors" priority="-1">
109
+ <xsl:apply-templates mode="ctype" select="."/> *get<xsl:value-of select="@name"/>();
110
+ </xsl:template>
111
+
112
+ <!-- base classes -->
113
+ <xsl:template match="type" mode="baseclass">
114
+ <xsl:choose>
115
+ <xsl:when test="@parent">
116
+ <xsl:value-of select="@parent"/>
117
+ </xsl:when>
118
+ <xsl:otherwise>Item</xsl:otherwise>
119
+ </xsl:choose>
120
+ </xsl:template>
121
+ <xsl:template match="tag" mode="baseclass">Tag</xsl:template>
122
+ <xsl:template match="action" mode="baseclass">Action</xsl:template>
123
+ <xsl:template match="filter" mode="baseclass">Filter</xsl:template>
124
+ <xsl:template match="style" mode="baseclass">Style</xsl:template>
125
+ <xsl:template match="stackitem" mode="baseclass">StackItem</xsl:template>
126
+ <xsl:template match="namespaceconstant" mode="baseclass">NamespaceConstant</xsl:template>
127
+ <xsl:template match="multinameconstant" mode="baseclass">MultinameConstant</xsl:template>
128
+ <xsl:template match="trait" mode="baseclass">Trait</xsl:template>
129
+ <xsl:template match="opcode" mode="baseclass">OpCode</xsl:template>
130
+
131
+ </xsl:stylesheet>