mathematical 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (263) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +52 -10
  3. data/Rakefile +42 -3
  4. data/lib/mathematical.rb +5 -4
  5. data/lib/mathematical/mathematical.bundle +0 -0
  6. data/lib/mathematical/render.rb +6 -5
  7. data/lib/mathematical/version.rb +1 -1
  8. data/mathematical.gemspec +5 -5
  9. metadata +14 -296
  10. data/.gitignore +0 -24
  11. data/.gitmodules +0 -0
  12. data/Gemfile +0 -4
  13. data/ext/mathematical/README.itex2MML.md +0 -11
  14. data/ext/mathematical/README.lasem.md +0 -11
  15. data/ext/mathematical/extconf.rb +0 -51
  16. data/ext/mathematical/itex2MML.h +0 -63
  17. data/ext/mathematical/lasemrender.c +0 -257
  18. data/ext/mathematical/lex.yy.c +0 -6548
  19. data/ext/mathematical/lsm.c +0 -30
  20. data/ext/mathematical/lsm.h +0 -36
  21. data/ext/mathematical/lsmattributes.c +0 -279
  22. data/ext/mathematical/lsmattributes.h +0 -75
  23. data/ext/mathematical/lsmcairo.c +0 -598
  24. data/ext/mathematical/lsmcairo.h +0 -51
  25. data/ext/mathematical/lsmdebug.c +0 -179
  26. data/ext/mathematical/lsmdebug.h +0 -76
  27. data/ext/mathematical/lsmdom.h +0 -43
  28. data/ext/mathematical/lsmdomcharacterdata.c +0 -114
  29. data/ext/mathematical/lsmdomcharacterdata.h +0 -59
  30. data/ext/mathematical/lsmdomdocument.c +0 -292
  31. data/ext/mathematical/lsmdomdocument.h +0 -82
  32. data/ext/mathematical/lsmdomdocumentfragment.c +0 -81
  33. data/ext/mathematical/lsmdomdocumentfragment.h +0 -55
  34. data/ext/mathematical/lsmdomelement.c +0 -148
  35. data/ext/mathematical/lsmdomelement.h +0 -62
  36. data/ext/mathematical/lsmdomentities.c +0 -2155
  37. data/ext/mathematical/lsmdomentities.h +0 -35
  38. data/ext/mathematical/lsmdomenumtypes.c +0 -99
  39. data/ext/mathematical/lsmdomenumtypes.c.template +0 -39
  40. data/ext/mathematical/lsmdomenumtypes.h +0 -26
  41. data/ext/mathematical/lsmdomenumtypes.h.template +0 -26
  42. data/ext/mathematical/lsmdomimplementation.c +0 -82
  43. data/ext/mathematical/lsmdomimplementation.h +0 -41
  44. data/ext/mathematical/lsmdomnamednodemap.c +0 -118
  45. data/ext/mathematical/lsmdomnamednodemap.h +0 -64
  46. data/ext/mathematical/lsmdomnode.c +0 -725
  47. data/ext/mathematical/lsmdomnode.h +0 -120
  48. data/ext/mathematical/lsmdomnodelist.c +0 -70
  49. data/ext/mathematical/lsmdomnodelist.h +0 -58
  50. data/ext/mathematical/lsmdomparser.c +0 -461
  51. data/ext/mathematical/lsmdomparser.h +0 -54
  52. data/ext/mathematical/lsmdomtext.c +0 -82
  53. data/ext/mathematical/lsmdomtext.h +0 -55
  54. data/ext/mathematical/lsmdomtypes.h +0 -44
  55. data/ext/mathematical/lsmdomview.c +0 -422
  56. data/ext/mathematical/lsmdomview.h +0 -94
  57. data/ext/mathematical/lsmmathml.h +0 -66
  58. data/ext/mathematical/lsmmathmlactionelement.c +0 -93
  59. data/ext/mathematical/lsmmathmlactionelement.h +0 -57
  60. data/ext/mathematical/lsmmathmlaligngroupelement.c +0 -102
  61. data/ext/mathematical/lsmmathmlaligngroupelement.h +0 -56
  62. data/ext/mathematical/lsmmathmlalignmarkelement.c +0 -102
  63. data/ext/mathematical/lsmmathmlalignmarkelement.h +0 -56
  64. data/ext/mathematical/lsmmathmlattributes.c +0 -197
  65. data/ext/mathematical/lsmmathmlattributes.h +0 -126
  66. data/ext/mathematical/lsmmathmldocument.c +0 -306
  67. data/ext/mathematical/lsmmathmldocument.h +0 -61
  68. data/ext/mathematical/lsmmathmlelement.c +0 -491
  69. data/ext/mathematical/lsmmathmlelement.h +0 -107
  70. data/ext/mathematical/lsmmathmlenums.c +0 -429
  71. data/ext/mathematical/lsmmathmlenums.h +0 -182
  72. data/ext/mathematical/lsmmathmlenumtypes.c +0 -666
  73. data/ext/mathematical/lsmmathmlenumtypes.c.template +0 -39
  74. data/ext/mathematical/lsmmathmlenumtypes.h +0 -90
  75. data/ext/mathematical/lsmmathmlenumtypes.h.template +0 -26
  76. data/ext/mathematical/lsmmathmlerrorelement.c +0 -58
  77. data/ext/mathematical/lsmmathmlerrorelement.h +0 -56
  78. data/ext/mathematical/lsmmathmlfencedelement.c +0 -178
  79. data/ext/mathematical/lsmmathmlfencedelement.h +0 -65
  80. data/ext/mathematical/lsmmathmlfractionelement.c +0 -253
  81. data/ext/mathematical/lsmmathmlfractionelement.h +0 -62
  82. data/ext/mathematical/lsmmathmlglyphtableams.c +0 -597
  83. data/ext/mathematical/lsmmathmlglyphtableams.h +0 -45
  84. data/ext/mathematical/lsmmathmlitexelement.c +0 -187
  85. data/ext/mathematical/lsmmathmlitexelement.h +0 -60
  86. data/ext/mathematical/lsmmathmllayoututils.c +0 -191
  87. data/ext/mathematical/lsmmathmllayoututils.h +0 -58
  88. data/ext/mathematical/lsmmathmlmathelement.c +0 -204
  89. data/ext/mathematical/lsmmathmlmathelement.h +0 -81
  90. data/ext/mathematical/lsmmathmloperatordictionary.c +0 -3332
  91. data/ext/mathematical/lsmmathmloperatordictionary.h +0 -54
  92. data/ext/mathematical/lsmmathmloperatorelement.c +0 -307
  93. data/ext/mathematical/lsmmathmloperatorelement.h +0 -73
  94. data/ext/mathematical/lsmmathmlpaddedelement.c +0 -58
  95. data/ext/mathematical/lsmmathmlpaddedelement.h +0 -56
  96. data/ext/mathematical/lsmmathmlphantomelement.c +0 -71
  97. data/ext/mathematical/lsmmathmlphantomelement.h +0 -56
  98. data/ext/mathematical/lsmmathmlpresentationcontainer.c +0 -43
  99. data/ext/mathematical/lsmmathmlpresentationcontainer.h +0 -54
  100. data/ext/mathematical/lsmmathmlpresentationtoken.c +0 -303
  101. data/ext/mathematical/lsmmathmlpresentationtoken.h +0 -83
  102. data/ext/mathematical/lsmmathmlradicalelement.c +0 -266
  103. data/ext/mathematical/lsmmathmlradicalelement.h +0 -71
  104. data/ext/mathematical/lsmmathmlrowelement.c +0 -58
  105. data/ext/mathematical/lsmmathmlrowelement.h +0 -56
  106. data/ext/mathematical/lsmmathmlscriptelement.c +0 -282
  107. data/ext/mathematical/lsmmathmlscriptelement.h +0 -78
  108. data/ext/mathematical/lsmmathmlsemanticselement.c +0 -82
  109. data/ext/mathematical/lsmmathmlsemanticselement.h +0 -56
  110. data/ext/mathematical/lsmmathmlspaceelement.c +0 -142
  111. data/ext/mathematical/lsmmathmlspaceelement.h +0 -60
  112. data/ext/mathematical/lsmmathmlstringelement.c +0 -123
  113. data/ext/mathematical/lsmmathmlstringelement.h +0 -58
  114. data/ext/mathematical/lsmmathmlstyle.c +0 -130
  115. data/ext/mathematical/lsmmathmlstyle.h +0 -81
  116. data/ext/mathematical/lsmmathmlstyleelement.c +0 -307
  117. data/ext/mathematical/lsmmathmlstyleelement.h +0 -87
  118. data/ext/mathematical/lsmmathmltablecellelement.c +0 -122
  119. data/ext/mathematical/lsmmathmltablecellelement.h +0 -62
  120. data/ext/mathematical/lsmmathmltableelement.c +0 -545
  121. data/ext/mathematical/lsmmathmltableelement.h +0 -78
  122. data/ext/mathematical/lsmmathmltablerowelement.c +0 -120
  123. data/ext/mathematical/lsmmathmltablerowelement.h +0 -64
  124. data/ext/mathematical/lsmmathmltraits.c +0 -819
  125. data/ext/mathematical/lsmmathmltraits.h +0 -119
  126. data/ext/mathematical/lsmmathmltypes.h +0 -66
  127. data/ext/mathematical/lsmmathmlunderoverelement.c +0 -485
  128. data/ext/mathematical/lsmmathmlunderoverelement.h +0 -82
  129. data/ext/mathematical/lsmmathmlutils.c +0 -170
  130. data/ext/mathematical/lsmmathmlutils.h +0 -50
  131. data/ext/mathematical/lsmmathmlview.c +0 -1048
  132. data/ext/mathematical/lsmmathmlview.h +0 -164
  133. data/ext/mathematical/lsmproperties.c +0 -418
  134. data/ext/mathematical/lsmproperties.h +0 -85
  135. data/ext/mathematical/lsmstr.c +0 -231
  136. data/ext/mathematical/lsmstr.h +0 -114
  137. data/ext/mathematical/lsmsvg.h +0 -67
  138. data/ext/mathematical/lsmsvgaelement.c +0 -73
  139. data/ext/mathematical/lsmsvgaelement.h +0 -55
  140. data/ext/mathematical/lsmsvgattributes.h +0 -113
  141. data/ext/mathematical/lsmsvgcircleelement.c +0 -153
  142. data/ext/mathematical/lsmsvgcircleelement.h +0 -59
  143. data/ext/mathematical/lsmsvgclippathelement.c +0 -134
  144. data/ext/mathematical/lsmsvgclippathelement.h +0 -59
  145. data/ext/mathematical/lsmsvgcolors.c +0 -212
  146. data/ext/mathematical/lsmsvgcolors.h +0 -39
  147. data/ext/mathematical/lsmsvgdefselement.c +0 -74
  148. data/ext/mathematical/lsmsvgdefselement.h +0 -55
  149. data/ext/mathematical/lsmsvgdocument.c +0 -230
  150. data/ext/mathematical/lsmsvgdocument.h +0 -58
  151. data/ext/mathematical/lsmsvgelement.c +0 -367
  152. data/ext/mathematical/lsmsvgelement.h +0 -81
  153. data/ext/mathematical/lsmsvgellipseelement.c +0 -158
  154. data/ext/mathematical/lsmsvgellipseelement.h +0 -60
  155. data/ext/mathematical/lsmsvgenums.c +0 -544
  156. data/ext/mathematical/lsmsvgenums.h +0 -357
  157. data/ext/mathematical/lsmsvgenumtypes.c +0 -1083
  158. data/ext/mathematical/lsmsvgenumtypes.c.template +0 -39
  159. data/ext/mathematical/lsmsvgenumtypes.h +0 -111
  160. data/ext/mathematical/lsmsvgenumtypes.h.template +0 -26
  161. data/ext/mathematical/lsmsvgfilterblend.c +0 -105
  162. data/ext/mathematical/lsmsvgfilterblend.h +0 -58
  163. data/ext/mathematical/lsmsvgfiltercomposite.c +0 -109
  164. data/ext/mathematical/lsmsvgfiltercomposite.h +0 -58
  165. data/ext/mathematical/lsmsvgfilterelement.c +0 -266
  166. data/ext/mathematical/lsmsvgfilterelement.h +0 -66
  167. data/ext/mathematical/lsmsvgfilterflood.c +0 -86
  168. data/ext/mathematical/lsmsvgfilterflood.h +0 -55
  169. data/ext/mathematical/lsmsvgfiltergaussianblur.c +0 -114
  170. data/ext/mathematical/lsmsvgfiltergaussianblur.h +0 -57
  171. data/ext/mathematical/lsmsvgfiltermerge.c +0 -98
  172. data/ext/mathematical/lsmsvgfiltermerge.h +0 -55
  173. data/ext/mathematical/lsmsvgfiltermergenode.c +0 -87
  174. data/ext/mathematical/lsmsvgfiltermergenode.h +0 -57
  175. data/ext/mathematical/lsmsvgfilteroffset.c +0 -112
  176. data/ext/mathematical/lsmsvgfilteroffset.h +0 -58
  177. data/ext/mathematical/lsmsvgfilterprimitive.c +0 -168
  178. data/ext/mathematical/lsmsvgfilterprimitive.h +0 -66
  179. data/ext/mathematical/lsmsvgfilterspecularlighting.c +0 -127
  180. data/ext/mathematical/lsmsvgfilterspecularlighting.h +0 -60
  181. data/ext/mathematical/lsmsvgfiltersurface.c +0 -455
  182. data/ext/mathematical/lsmsvgfiltersurface.h +0 -66
  183. data/ext/mathematical/lsmsvgfiltertile.c +0 -102
  184. data/ext/mathematical/lsmsvgfiltertile.h +0 -57
  185. data/ext/mathematical/lsmsvggelement.c +0 -73
  186. data/ext/mathematical/lsmsvggelement.h +0 -55
  187. data/ext/mathematical/lsmsvggradientelement.c +0 -151
  188. data/ext/mathematical/lsmsvggradientelement.h +0 -68
  189. data/ext/mathematical/lsmsvgimageelement.c +0 -261
  190. data/ext/mathematical/lsmsvgimageelement.h +0 -67
  191. data/ext/mathematical/lsmsvglength.c +0 -93
  192. data/ext/mathematical/lsmsvglength.h +0 -59
  193. data/ext/mathematical/lsmsvglineargradientelement.c +0 -271
  194. data/ext/mathematical/lsmsvglineargradientelement.h +0 -60
  195. data/ext/mathematical/lsmsvglineelement.c +0 -153
  196. data/ext/mathematical/lsmsvglineelement.h +0 -60
  197. data/ext/mathematical/lsmsvgmarkerelement.c +0 -266
  198. data/ext/mathematical/lsmsvgmarkerelement.h +0 -74
  199. data/ext/mathematical/lsmsvgmaskelement.c +0 -232
  200. data/ext/mathematical/lsmsvgmaskelement.h +0 -64
  201. data/ext/mathematical/lsmsvgmatrix.c +0 -205
  202. data/ext/mathematical/lsmsvgmatrix.h +0 -59
  203. data/ext/mathematical/lsmsvgpathelement.c +0 -115
  204. data/ext/mathematical/lsmsvgpathelement.h +0 -59
  205. data/ext/mathematical/lsmsvgpatternelement.c +0 -398
  206. data/ext/mathematical/lsmsvgpatternelement.h +0 -69
  207. data/ext/mathematical/lsmsvgpolygonelement.c +0 -106
  208. data/ext/mathematical/lsmsvgpolygonelement.h +0 -57
  209. data/ext/mathematical/lsmsvgpolylineelement.c +0 -106
  210. data/ext/mathematical/lsmsvgpolylineelement.h +0 -57
  211. data/ext/mathematical/lsmsvgradialgradientelement.c +0 -323
  212. data/ext/mathematical/lsmsvgradialgradientelement.h +0 -61
  213. data/ext/mathematical/lsmsvgrectelement.c +0 -184
  214. data/ext/mathematical/lsmsvgrectelement.h +0 -62
  215. data/ext/mathematical/lsmsvgstopelement.c +0 -106
  216. data/ext/mathematical/lsmsvgstopelement.h +0 -57
  217. data/ext/mathematical/lsmsvgstyle.c +0 -558
  218. data/ext/mathematical/lsmsvgstyle.h +0 -217
  219. data/ext/mathematical/lsmsvgsvgelement.c +0 -260
  220. data/ext/mathematical/lsmsvgsvgelement.h +0 -71
  221. data/ext/mathematical/lsmsvgswitchelement.c +0 -103
  222. data/ext/mathematical/lsmsvgswitchelement.h +0 -55
  223. data/ext/mathematical/lsmsvgsymbolelement.c +0 -74
  224. data/ext/mathematical/lsmsvgsymbolelement.h +0 -55
  225. data/ext/mathematical/lsmsvgtextelement.c +0 -170
  226. data/ext/mathematical/lsmsvgtextelement.h +0 -58
  227. data/ext/mathematical/lsmsvgtraits.c +0 -1158
  228. data/ext/mathematical/lsmsvgtraits.h +0 -103
  229. data/ext/mathematical/lsmsvgtransformable.c +0 -106
  230. data/ext/mathematical/lsmsvgtransformable.h +0 -54
  231. data/ext/mathematical/lsmsvgtspanelement.c +0 -143
  232. data/ext/mathematical/lsmsvgtspanelement.h +0 -58
  233. data/ext/mathematical/lsmsvgtypes.h +0 -77
  234. data/ext/mathematical/lsmsvguseelement.c +0 -237
  235. data/ext/mathematical/lsmsvguseelement.h +0 -69
  236. data/ext/mathematical/lsmsvgview.c +0 -2400
  237. data/ext/mathematical/lsmsvgview.h +0 -168
  238. data/ext/mathematical/lsmtraits.c +0 -119
  239. data/ext/mathematical/lsmtraits.h +0 -49
  240. data/ext/mathematical/lsmtypes.h +0 -36
  241. data/ext/mathematical/lsmutils.c +0 -54
  242. data/ext/mathematical/lsmutils.h +0 -56
  243. data/ext/mathematical/mathematical.c +0 -122
  244. data/ext/mathematical/y.tab.c +0 -6179
  245. data/ext/mathematical/y.tab.h +0 -389
  246. data/script/bench +0 -21
  247. data/script/bootstrap +0 -9
  248. data/script/single_test +0 -7
  249. data/test/mathematical/basic_test.rb +0 -38
  250. data/test/mathematical/fixtures/after/brackets_display.html +0 -1
  251. data/test/mathematical/fixtures/after/dollar_sign_inline.html +0 -1
  252. data/test/mathematical/fixtures/after/equation_display.html +0 -1
  253. data/test/mathematical/fixtures/after/multiple_dollar_inline.html +0 -1
  254. data/test/mathematical/fixtures/after/parens_inline.html +0 -1
  255. data/test/mathematical/fixtures/before/brackets_display.text +0 -1
  256. data/test/mathematical/fixtures/before/dollar_sign_inline.text +0 -1
  257. data/test/mathematical/fixtures/before/equation_display.text +0 -1
  258. data/test/mathematical/fixtures/before/multiple_dollar_inline.text +0 -1
  259. data/test/mathematical/fixtures/before/parens_inline.text +0 -1
  260. data/test/mathematical/fixtures/performance/big_file.text +0 -1767
  261. data/test/mathematical/fixtures_test.rb +0 -31
  262. data/test/mathematical/performance_test.rb +0 -13
  263. data/test/test_helper.rb +0 -4
@@ -1,127 +0,0 @@
1
- /* Lasem
2
- *
3
- * Copyright © 2012 Emmanuel Pacaud
4
- *
5
- * This library is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU Lesser General Public
7
- * License as published by the Free Software Foundation; either
8
- * version 2 of the License, or (at your option) any later version.
9
- *
10
- * This library is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * Lesser General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Lesser General
16
- * Public License along with this library; if not, write to the
17
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18
- * Boston, MA 02111-1307, USA.
19
- *
20
- * Author:
21
- * Emmanuel Pacaud <emmanuel@gnome.org>
22
- */
23
-
24
- #include <lsmsvgfilterspecularlighting.h>
25
- #include <lsmsvgview.h>
26
-
27
- static GObjectClass *parent_class;
28
-
29
- /* GdomNode implementation */
30
-
31
- static const char *
32
- lsm_svg_filter_specular_lighting_get_node_name (LsmDomNode *node)
33
- {
34
- return "feSpecularLighting";
35
- }
36
-
37
- /* LsmSvgElement implementation */
38
-
39
- static void
40
- lsm_svg_filter_specular_lighting_apply (LsmSvgFilterPrimitive *self, LsmSvgView *view,
41
- const char *input, const char *output, const LsmBox *subregion)
42
- {
43
- /* lsm_svg_view_apply_specular_lighting (view, output, subregion);*/
44
- }
45
-
46
- /* LsmSvgFilterSpecularLighting implementation */
47
-
48
- static const double surface_scale_default = 1.0;
49
- static const double specular_constant_default = 1.0;
50
- static const double specular_exponent_default = 1.0;
51
- static const LsmSvgOneOrTwoDouble kernel_unit_length_default = {1.0, 1.0};
52
-
53
- LsmDomNode *
54
- lsm_svg_filter_specular_lighting_new (void)
55
- {
56
- return g_object_new (LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING, NULL);
57
- }
58
-
59
- static void
60
- lsm_svg_filter_specular_lighting_init (LsmSvgFilterSpecularLighting *self)
61
- {
62
- self->surface_scale.value = surface_scale_default;
63
- self->specular_constant.value = specular_constant_default;
64
- self->specular_exponent.value = specular_exponent_default;
65
- self->kernel_unit_length.value = kernel_unit_length_default;
66
-
67
- }
68
-
69
- static void
70
- lsm_svg_filter_specular_lighting_finalize (GObject *object)
71
- {
72
- parent_class->finalize (object);
73
- }
74
-
75
- /* LsmSvgFilterSpecularLighting class */
76
-
77
- static const LsmAttributeInfos lsm_svg_filter_specular_lighting_attribute_infos[] = {
78
- {
79
- .name = "sufaceScale",
80
- .attribute_offset = offsetof (LsmSvgFilterSpecularLighting, surface_scale),
81
- .trait_class = &lsm_double_trait_class,
82
- .trait_default = &surface_scale_default
83
- },
84
- {
85
- .name = "specularConstant",
86
- .attribute_offset = offsetof (LsmSvgFilterSpecularLighting, specular_constant),
87
- .trait_class = &lsm_double_trait_class,
88
- .trait_default = &specular_constant_default
89
- },
90
- {
91
- .name = "specularExponent",
92
- .attribute_offset = offsetof (LsmSvgFilterSpecularLighting, specular_exponent),
93
- .trait_class = &lsm_double_trait_class,
94
- .trait_default = &specular_exponent_default
95
- },
96
- {
97
- .name = "kernelUnitLength",
98
- .attribute_offset = offsetof (LsmSvgFilterSpecularLighting, kernel_unit_length),
99
- .trait_class = &lsm_svg_one_or_two_double_trait_class,
100
- .trait_default = &kernel_unit_length_default
101
- }
102
- };
103
-
104
- static void
105
- lsm_svg_filter_specular_lighting_class_init (LsmSvgFilterSpecularLightingClass *klass)
106
- {
107
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
108
- LsmDomNodeClass *d_node_class = LSM_DOM_NODE_CLASS (klass);
109
- LsmSvgElementClass *s_element_class = LSM_SVG_ELEMENT_CLASS (klass);
110
- LsmSvgFilterPrimitiveClass *f_primitive_class = LSM_SVG_FILTER_PRIMITIVE_CLASS (klass);
111
-
112
- parent_class = g_type_class_peek_parent (klass);
113
-
114
- object_class->finalize = lsm_svg_filter_specular_lighting_finalize;
115
-
116
- d_node_class->get_node_name = lsm_svg_filter_specular_lighting_get_node_name;
117
-
118
- s_element_class->attribute_manager = lsm_attribute_manager_duplicate (s_element_class->attribute_manager);
119
-
120
- lsm_attribute_manager_add_attributes (s_element_class->attribute_manager,
121
- G_N_ELEMENTS (lsm_svg_filter_specular_lighting_attribute_infos),
122
- lsm_svg_filter_specular_lighting_attribute_infos);
123
-
124
- f_primitive_class->apply = lsm_svg_filter_specular_lighting_apply;
125
- }
126
-
127
- G_DEFINE_TYPE (LsmSvgFilterSpecularLighting, lsm_svg_filter_specular_lighting, LSM_TYPE_SVG_FILTER_PRIMITIVE)
@@ -1,60 +0,0 @@
1
- /* Lasem
2
- *
3
- * Copyright © 2012 Emmanuel Pacaud
4
- *
5
- * This library is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU Lesser General Public
7
- * License as published by the Free Software Foundation; either
8
- * version 2 of the License, or (at your option) any later version.
9
- *
10
- * This library is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * Lesser General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Lesser General
16
- * Public License along with this library; if not, write to the
17
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18
- * Boston, MA 02111-1307, USA.
19
- *
20
- * Author:
21
- * Emmanuel Pacaud <emmanuel@gnome.org>
22
- */
23
-
24
- #ifndef LSM_SVG_FILTER_SPECULAR_LIGHTING_H
25
- #define LSM_SVG_FILTER_SPECULAR_LIGHTING_H
26
-
27
- #include <lsmsvgtypes.h>
28
- #include <lsmsvgfilterprimitive.h>
29
-
30
- G_BEGIN_DECLS
31
-
32
- #define LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING (lsm_svg_filter_specular_lighting_get_type ())
33
- #define LSM_SVG_FILTER_SPECULAR_LIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING, LsmSvgFilterSpecularLighting))
34
- #define LSM_SVG_FILTER_SPECULAR_LIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING, LsmSvgFilterSpecularLightingClass))
35
- #define LSM_IS_SVG_FILTER_SPECULAR_LIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING))
36
- #define LSM_IS_SVG_FILTER_SPECULAR_LIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING))
37
- #define LSM_SVG_FILTER_SPECULAR_LIGHTING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), LSM_TYPE_SVG_FILTER_SPECULAR_LIGHTING, LsmSvgFilterSpecularLightingClass))
38
-
39
- typedef struct _LsmSvgFilterSpecularLightingClass LsmSvgFilterSpecularLightingClass;
40
-
41
- struct _LsmSvgFilterSpecularLighting {
42
- LsmSvgFilterPrimitive base;
43
-
44
- LsmSvgDoubleAttribute surface_scale;
45
- LsmSvgDoubleAttribute specular_constant;
46
- LsmSvgDoubleAttribute specular_exponent;
47
- LsmSvgOneOrTwoDoubleAttribute kernel_unit_length;
48
- };
49
-
50
- struct _LsmSvgFilterSpecularLightingClass {
51
- LsmSvgFilterPrimitiveClass element_class;
52
- };
53
-
54
- GType lsm_svg_filter_specular_lighting_get_type (void);
55
-
56
- LsmDomNode * lsm_svg_filter_specular_lighting_new (void);
57
-
58
- G_END_DECLS
59
-
60
- #endif
@@ -1,455 +0,0 @@
1
- /* Lasem
2
- *
3
- * Copyright © 2004 Caleb Moore
4
- * Copyright © 2012 Emmanuel Pacaud
5
- *
6
- * This library is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU Lesser General Public
8
- * License as published by the Free Software Foundation; either
9
- * version 2 of the License, or (at your option) any later version.
10
- *
11
- * This library is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- * Lesser General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU Lesser General
17
- * Public License along with this library; if not, write to the
18
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19
- * Boston, MA 02111-1307, USA.
20
- *
21
- * Authors:
22
- * Caleb Moore <c.moore@student.unsw.edu.au>
23
- * Emmanuel Pacaud <emmanuel@gnome.org>
24
- */
25
-
26
- #include <lsmsvgfiltersurface.h>
27
- #include <lsmsvgenums.h>
28
- #include <lsmutils.h>
29
- #include <math.h>
30
- #include <string.h>
31
-
32
- struct _LsmSvgFilterSurface {
33
- char *name;
34
- cairo_surface_t *surface;
35
- LsmBox subregion;
36
-
37
- gint ref_count;
38
- };
39
-
40
- LsmSvgFilterSurface *
41
- lsm_svg_filter_surface_new (const char *name, unsigned int width, unsigned int height, const LsmBox *subregion)
42
- {
43
- LsmSvgFilterSurface *filter_surface;
44
- cairo_surface_t *surface;
45
-
46
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
47
-
48
- filter_surface = lsm_svg_filter_surface_new_with_content (name, surface, subregion);
49
-
50
- cairo_surface_destroy (surface);
51
-
52
- return filter_surface;
53
- }
54
-
55
- LsmSvgFilterSurface *
56
- lsm_svg_filter_surface_new_with_content (const char *name, cairo_surface_t *surface, const LsmBox *subregion)
57
- {
58
- LsmSvgFilterSurface *filter_surface;
59
- LsmBox null_subregion = {0, 0, 0, 0};
60
-
61
- if (surface == NULL ||
62
- cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_IMAGE ||
63
- cairo_image_surface_get_format (surface) != CAIRO_FORMAT_ARGB32) {
64
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 0, 0);
65
- subregion = &null_subregion;
66
- } else if (subregion == NULL)
67
- subregion = &null_subregion;
68
-
69
- cairo_surface_reference (surface);
70
-
71
- filter_surface = g_new (LsmSvgFilterSurface, 1);
72
- filter_surface->name = g_strdup (name);
73
- filter_surface->subregion = *subregion;
74
- filter_surface->surface = surface;
75
- filter_surface->ref_count = 1;
76
-
77
- return filter_surface;
78
- }
79
-
80
- LsmSvgFilterSurface *
81
- lsm_svg_filter_surface_new_similar (const char *name, LsmSvgFilterSurface *model, const LsmBox *subregion)
82
- {
83
- if (model == NULL)
84
- return lsm_svg_filter_surface_new (name, 0, 0, subregion);
85
-
86
- return lsm_svg_filter_surface_new (name,
87
- cairo_image_surface_get_width (model->surface),
88
- cairo_image_surface_get_height (model->surface),
89
- subregion != NULL ? subregion : &model->subregion);
90
- }
91
-
92
- const char *
93
- lsm_svg_filter_surface_get_name (LsmSvgFilterSurface *surface)
94
- {
95
- g_return_val_if_fail (surface != NULL, NULL);
96
-
97
- return surface->name;
98
- }
99
-
100
- cairo_surface_t *
101
- lsm_svg_filter_surface_get_cairo_surface (LsmSvgFilterSurface *surface)
102
- {
103
- g_return_val_if_fail (surface != NULL, NULL);
104
-
105
- return surface->surface;
106
- }
107
-
108
- const LsmBox *
109
- lsm_svg_filter_surface_get_subregion (LsmSvgFilterSurface *surface)
110
- {
111
- static const LsmBox null_subregion = {0, 0, 0, 0};
112
-
113
- if (surface == NULL)
114
- return &null_subregion;
115
-
116
- return &surface->subregion;
117
- }
118
-
119
- LsmSvgFilterSurface *
120
- lsm_svg_filter_surface_ref (LsmSvgFilterSurface *filter_surface)
121
- {
122
- g_return_val_if_fail (filter_surface != NULL, NULL);
123
-
124
- g_atomic_int_inc (&filter_surface->ref_count);
125
-
126
- return filter_surface;
127
- }
128
-
129
- void
130
- lsm_svg_filter_surface_unref (LsmSvgFilterSurface *filter_surface)
131
- {
132
- g_return_if_fail (filter_surface != NULL);
133
- g_return_if_fail (filter_surface->ref_count > 0);
134
-
135
- if (g_atomic_int_dec_and_test (&filter_surface->ref_count)) {
136
- cairo_surface_destroy (filter_surface->surface);
137
- g_free (filter_surface->name);
138
- g_free (filter_surface);
139
- }
140
- }
141
-
142
- G_DEFINE_BOXED_TYPE (LsmSvgFilterSurface, lsm_svg_filter_surface, lsm_svg_filter_surface_ref, lsm_svg_filter_surface_unref)
143
-
144
- static void
145
- box_blur (cairo_surface_t *in,
146
- cairo_surface_t *output,
147
- int kw,
148
- int kh,
149
- int shiftx,
150
- int shifty,
151
- int x0,
152
- int y0,
153
- int x1,
154
- int y1)
155
- {
156
- gint ch;
157
- gint x, y;
158
- gint offset;
159
- gint rowstride;
160
- guchar *intermediate;
161
- guchar *in_pixels;
162
- guchar *output_pixels;
163
- gint sum;
164
-
165
- in_pixels = cairo_image_surface_get_data (in);
166
- output_pixels = cairo_image_surface_get_data (output);
167
-
168
- rowstride = cairo_image_surface_get_stride (in);
169
-
170
- intermediate = g_new (guchar, MAX (kw, kh));
171
-
172
- if (kw > 1) {
173
- offset = shiftx - kw / 2;
174
- for (ch = 0; ch < 4; ch++) {
175
- for (y = y0; y < y1; y++) {
176
- sum = 0;
177
- for (x = x0; x < x0 + kw; x++) {
178
- sum += (intermediate[x % kw] = in_pixels[4 * x + y * rowstride + ch]);
179
- if (x + offset >= 0 && x + offset < x1)
180
- output_pixels[4 * (x + offset) + y * rowstride + ch] = sum / kw;
181
- }
182
- for (x = x0 + kw; x < x1; x++) {
183
- sum -= intermediate[x % kw];
184
- sum += (intermediate[x % kw] = in_pixels[4 * x + y * rowstride + ch]);
185
- if (x + offset >= 0 && x + offset < x1)
186
- output_pixels[4 * (x + offset) + y * rowstride + ch] = sum / kw;
187
- }
188
- for (x = x1; x < x1 + kw; x++) {
189
- sum -= intermediate[x % kw];
190
- if (x + offset >= 0 && x + offset < x1)
191
- output_pixels[4 * (x + offset) + y * rowstride + ch] = sum / kw;
192
- }
193
- }
194
- }
195
- in_pixels = output_pixels;
196
- }
197
-
198
- if (kh > 1) {
199
- offset = shifty - kh / 2;
200
- for (ch = 0; ch < 4; ch++) {
201
- for (x = x0; x < x1; x++) {
202
- sum = 0;
203
-
204
- for (y = y0; y < y0 + kh; y++) {
205
- sum += (intermediate[y % kh] = in_pixels[4 * x + y * rowstride + ch]);
206
- if (y + offset >= 0 && y + offset < y1)
207
- output_pixels[4 * x + (y + offset) * rowstride + ch] = sum / kh;
208
- }
209
- for (y = y0 + kh; y < y1; y++) {
210
- sum -= intermediate[y % kh];
211
- sum += (intermediate[y % kh] = in_pixels[4 * x + y * rowstride + ch]);
212
- if (y + offset >= 0 && y + offset < y1)
213
- output_pixels[4 * x + (y + offset) * rowstride + ch] = sum / kh;
214
- }
215
- for (y = y1; y < y1 + kh; y++) {
216
- sum -= intermediate[y % kh];
217
- if (y + offset >= 0 && y + offset < y1)
218
- output_pixels[4 * x + (y + offset) * rowstride + ch] = sum / kh;
219
- }
220
- }
221
- }
222
- }
223
-
224
- g_free (intermediate);
225
- }
226
-
227
- void
228
- lsm_svg_filter_surface_fast_blur (LsmSvgFilterSurface *input,
229
- LsmSvgFilterSurface *output,
230
- double sx, double sy)
231
- {
232
- int kx, ky;
233
- int width, height;
234
-
235
- g_return_if_fail (input != NULL);
236
- g_return_if_fail (output != NULL);
237
-
238
- cairo_surface_flush (input->surface);
239
-
240
- kx = floor (sx * 3 * sqrt (2 * M_PI) / 4 + 0.5);
241
- ky = floor (sy * 3 * sqrt (2 * M_PI) / 4 + 0.5);
242
-
243
- width = cairo_image_surface_get_width (input->surface);
244
- height = cairo_image_surface_get_height (input->surface);
245
-
246
- if (width != cairo_image_surface_get_width (output->surface) ||
247
- height != cairo_image_surface_get_height (output->surface))
248
- return;
249
-
250
- if (kx > 1 || ky > 1) {
251
- int x1, y1, x2, y2;
252
- cairo_surface_t *blur_surface;
253
- gboolean do_clip = FALSE;
254
-
255
- x1 = output->subregion.x - kx;
256
- y1 = output->subregion.y - ky;
257
- x2 = output->subregion.width + output->subregion.x + kx;
258
- y2 = output->subregion.height + output->subregion.y + ky;
259
- x1 = CLAMP (x1, 0, width);
260
- y1 = CLAMP (y1, 0, height);
261
- x2 = CLAMP (x2, x1, width);
262
- y2 = CLAMP (y2, y1, height);
263
-
264
-
265
- if (input->subregion.x < output->subregion.x ||
266
- input->subregion.y < output->subregion.y ||
267
- input->subregion.width > output->subregion.width ||
268
- input->subregion.height > output->subregion.height) {
269
- do_clip = TRUE;
270
- blur_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
271
- } else
272
- blur_surface = output->surface;
273
-
274
- box_blur (input->surface, blur_surface, kx, ky, 0, 0, x1, y1, x2, y2);
275
- box_blur (blur_surface, blur_surface, kx, ky, (kx + 1) % 2, (ky + 1) % 2, x1, y1, x2, y2);
276
- box_blur (blur_surface, blur_surface, kx + (kx + 1) % 2, ky + (ky + 1) % 2, 0, 0, x1, y1, x2, y2);
277
-
278
- cairo_surface_mark_dirty (blur_surface);
279
-
280
- if (do_clip) {
281
- cairo_t *cairo;
282
-
283
- cairo = cairo_create (output->surface);
284
- cairo_rectangle (cairo,
285
- output->subregion.x, output->subregion.y,
286
- output->subregion.width, output->subregion.height);
287
- cairo_clip (cairo);
288
- cairo_set_source_surface (cairo, blur_surface, 0, 0);
289
- cairo_paint (cairo);
290
- cairo_destroy (cairo);
291
-
292
- cairo_surface_destroy (blur_surface);
293
- }
294
- } else {
295
- cairo_t *cairo;
296
-
297
- cairo = cairo_create (output->surface);
298
- cairo_rectangle (cairo,
299
- output->subregion.x, output->subregion.y,
300
- output->subregion.width, output->subregion.height);
301
- cairo_clip (cairo);
302
- cairo_set_source_surface (cairo, input->surface, 0, 0);
303
- cairo_paint (cairo);
304
- cairo_destroy (cairo);
305
- }
306
- }
307
-
308
- void
309
- lsm_svg_filter_surface_flood (LsmSvgFilterSurface *surface,
310
- double red,
311
- double green,
312
- double blue,
313
- double opacity)
314
- {
315
- cairo_t *cairo;
316
-
317
- g_return_if_fail (surface != NULL);
318
-
319
- cairo = cairo_create (surface->surface);
320
- cairo_rectangle (cairo, surface->subregion.x, surface->subregion.y, surface->subregion.width, surface->subregion.height);
321
- cairo_clip (cairo);
322
- cairo_set_source_rgba (cairo, red, green, blue, opacity);
323
- cairo_paint (cairo);
324
- }
325
-
326
- void
327
- lsm_svg_filter_surface_blend (LsmSvgFilterSurface *input_1,
328
- LsmSvgFilterSurface *input_2,
329
- LsmSvgFilterSurface *output,
330
- int blending_mode)
331
- {
332
- cairo_t *cairo;
333
- cairo_operator_t op;
334
-
335
- g_return_if_fail (input_1 != NULL);
336
- g_return_if_fail (input_2 != NULL);
337
- g_return_if_fail (output != NULL);
338
-
339
- switch (blending_mode) {
340
- case LSM_SVG_BLENDING_MODE_MULTIPLY:
341
- op = CAIRO_OPERATOR_MULTIPLY;
342
- break;
343
- case LSM_SVG_BLENDING_MODE_SCREEN:
344
- op = CAIRO_OPERATOR_SCREEN;
345
- break;
346
- case LSM_SVG_BLENDING_MODE_DARKEN:
347
- op = CAIRO_OPERATOR_DARKEN;
348
- break;
349
- case LSM_SVG_BLENDING_MODE_LIGHTEN:
350
- op = CAIRO_OPERATOR_LIGHTEN;
351
- break;
352
- case LSM_SVG_BLENDING_MODE_IN:
353
- op = CAIRO_OPERATOR_IN;
354
- break;
355
- case LSM_SVG_BLENDING_MODE_OUT:
356
- op = CAIRO_OPERATOR_OUT;
357
- break;
358
- case LSM_SVG_BLENDING_MODE_ATOP:
359
- op = CAIRO_OPERATOR_ATOP;
360
- break;
361
- case LSM_SVG_BLENDING_MODE_XOR:
362
- op = CAIRO_OPERATOR_XOR;
363
- break;
364
- default:
365
- op = CAIRO_OPERATOR_OVER;
366
- break;
367
- }
368
-
369
- cairo = cairo_create (output->surface);
370
- cairo_rectangle (cairo, output->subregion.x, output->subregion.y, output->subregion.width, output->subregion.height);
371
- cairo_clip (cairo);
372
- cairo_set_source_surface (cairo, input_2->surface, 0, 0);
373
- cairo_paint (cairo);
374
- cairo_set_source_surface (cairo, input_1->surface, 0, 0);
375
- cairo_set_operator (cairo, op);
376
- cairo_paint (cairo);
377
- cairo_destroy (cairo);
378
- }
379
-
380
- void
381
- lsm_svg_filter_surface_offset (LsmSvgFilterSurface *input,
382
- LsmSvgFilterSurface *output,
383
- int dx, int dy)
384
- {
385
- cairo_t *cairo;
386
-
387
- g_return_if_fail (input != NULL);
388
- g_return_if_fail (output != NULL);
389
-
390
- cairo = cairo_create (output->surface);
391
- cairo_rectangle (cairo, output->subregion.x, output->subregion.y, output->subregion.width, output->subregion.height);
392
- cairo_clip (cairo);
393
- cairo_set_source_surface (cairo, input->surface, dx, dy);
394
- cairo_paint (cairo);
395
- cairo_destroy (cairo);
396
- }
397
-
398
- void
399
- lsm_svg_filter_surface_merge (LsmSvgFilterSurface *input,
400
- LsmSvgFilterSurface *output)
401
- {
402
- cairo_t *cairo;
403
-
404
- g_return_if_fail (input != NULL);
405
- g_return_if_fail (output != NULL);
406
-
407
- cairo = cairo_create (output->surface);
408
- cairo_rectangle (cairo, output->subregion.x, output->subregion.y, output->subregion.width, output->subregion.height);
409
- cairo_clip (cairo);
410
- cairo_set_source_surface (cairo, input->surface, 0, 0);
411
- cairo_paint (cairo);
412
- cairo_destroy (cairo);
413
- }
414
-
415
- void
416
- lsm_svg_filter_surface_tile (LsmSvgFilterSurface *input, LsmSvgFilterSurface *output)
417
- {
418
- cairo_t *cairo;
419
- cairo_surface_t *surface;
420
- cairo_pattern_t *pattern;
421
-
422
- g_return_if_fail (input != NULL);
423
- g_return_if_fail (output != NULL);
424
-
425
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, input->subregion.width, input->subregion.height);
426
- cairo = cairo_create (surface);
427
- cairo_set_source_surface (cairo, input->surface, input->subregion.x, input->subregion.y);
428
- cairo_paint (cairo);
429
- cairo_destroy (cairo);
430
-
431
- cairo = cairo_create (output->surface);
432
- cairo_rectangle (cairo, output->subregion.x, output->subregion.y, output->subregion.width, output->subregion.height);
433
- cairo_clip (cairo);
434
- cairo_set_source_surface (cairo, surface, 0, 0);
435
- pattern = cairo_get_source (cairo);
436
- cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
437
- cairo_paint (cairo);
438
- cairo_destroy (cairo);
439
- cairo_surface_destroy (surface);
440
- }
441
-
442
- void
443
- lsm_svg_filter_surface_alpha (LsmSvgFilterSurface *input, LsmSvgFilterSurface *output)
444
- {
445
- cairo_t *cairo;
446
-
447
- g_return_if_fail (input != NULL);
448
- g_return_if_fail (output != NULL);
449
-
450
- cairo = cairo_create (output->surface);
451
- cairo_set_source_rgb (cairo, 0, 0, 0);
452
- cairo_mask_surface (cairo, input->surface, 0, 0);
453
-
454
- cairo_destroy (cairo);
455
- }