mathematical 0.1.0 → 0.1.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 (263) hide show
  1. checksums.yaml +4 -4
  2. data/ext/mathematical/extconf.rb +14 -0
  3. data/ext/mathematical/itex2MML.h +63 -0
  4. data/ext/mathematical/lasemrender.c +257 -0
  5. data/ext/mathematical/lex.yy.c +6548 -0
  6. data/ext/mathematical/lsm.c +31 -0
  7. data/ext/mathematical/lsm.h +39 -0
  8. data/ext/mathematical/lsmattributes.c +279 -0
  9. data/ext/mathematical/lsmattributes.h +75 -0
  10. data/ext/mathematical/lsmcairo.c +598 -0
  11. data/ext/mathematical/lsmcairo.h +51 -0
  12. data/ext/mathematical/lsmdebug.c +183 -0
  13. data/ext/mathematical/lsmdebug.h +73 -0
  14. data/ext/mathematical/lsmdom.h +43 -0
  15. data/ext/mathematical/lsmdomcharacterdata.c +114 -0
  16. data/ext/mathematical/lsmdomcharacterdata.h +59 -0
  17. data/ext/mathematical/lsmdomdocument.c +255 -0
  18. data/ext/mathematical/lsmdomdocument.h +75 -0
  19. data/ext/mathematical/lsmdomdocumentfragment.c +81 -0
  20. data/ext/mathematical/lsmdomdocumentfragment.h +55 -0
  21. data/ext/mathematical/lsmdomelement.c +148 -0
  22. data/ext/mathematical/lsmdomelement.h +62 -0
  23. data/ext/mathematical/lsmdomentities.c +2166 -0
  24. data/ext/mathematical/lsmdomentities.h +35 -0
  25. data/ext/mathematical/lsmdomenumtypes.c +99 -0
  26. data/ext/mathematical/lsmdomenumtypes.h +26 -0
  27. data/ext/mathematical/lsmdomimplementation.c +82 -0
  28. data/ext/mathematical/lsmdomimplementation.h +41 -0
  29. data/ext/mathematical/lsmdomnamednodemap.c +118 -0
  30. data/ext/mathematical/lsmdomnamednodemap.h +64 -0
  31. data/ext/mathematical/lsmdomnode.c +737 -0
  32. data/ext/mathematical/lsmdomnode.h +122 -0
  33. data/ext/mathematical/lsmdomnodelist.c +70 -0
  34. data/ext/mathematical/lsmdomnodelist.h +58 -0
  35. data/ext/mathematical/lsmdomparser.c +461 -0
  36. data/ext/mathematical/lsmdomparser.h +54 -0
  37. data/ext/mathematical/lsmdomtext.c +82 -0
  38. data/ext/mathematical/lsmdomtext.h +55 -0
  39. data/ext/mathematical/lsmdomtypes.h +44 -0
  40. data/ext/mathematical/lsmdomview.c +422 -0
  41. data/ext/mathematical/lsmdomview.h +94 -0
  42. data/ext/mathematical/lsmitex.c +76 -0
  43. data/ext/mathematical/lsmitex.h +36 -0
  44. data/ext/mathematical/lsmmathml.h +66 -0
  45. data/ext/mathematical/lsmmathmlactionelement.c +93 -0
  46. data/ext/mathematical/lsmmathmlactionelement.h +57 -0
  47. data/ext/mathematical/lsmmathmlaligngroupelement.c +102 -0
  48. data/ext/mathematical/lsmmathmlaligngroupelement.h +56 -0
  49. data/ext/mathematical/lsmmathmlalignmarkelement.c +102 -0
  50. data/ext/mathematical/lsmmathmlalignmarkelement.h +56 -0
  51. data/ext/mathematical/lsmmathmlattributes.c +197 -0
  52. data/ext/mathematical/lsmmathmlattributes.h +126 -0
  53. data/ext/mathematical/lsmmathmldocument.c +304 -0
  54. data/ext/mathematical/lsmmathmldocument.h +61 -0
  55. data/ext/mathematical/lsmmathmlelement.c +491 -0
  56. data/ext/mathematical/lsmmathmlelement.h +107 -0
  57. data/ext/mathematical/lsmmathmlenums.c +429 -0
  58. data/ext/mathematical/lsmmathmlenums.h +182 -0
  59. data/ext/mathematical/lsmmathmlenumtypes.c +666 -0
  60. data/ext/mathematical/lsmmathmlenumtypes.h +90 -0
  61. data/ext/mathematical/lsmmathmlerrorelement.c +58 -0
  62. data/ext/mathematical/lsmmathmlerrorelement.h +56 -0
  63. data/ext/mathematical/lsmmathmlfencedelement.c +178 -0
  64. data/ext/mathematical/lsmmathmlfencedelement.h +65 -0
  65. data/ext/mathematical/lsmmathmlfractionelement.c +253 -0
  66. data/ext/mathematical/lsmmathmlfractionelement.h +62 -0
  67. data/ext/mathematical/lsmmathmlglyphtableams.c +597 -0
  68. data/ext/mathematical/lsmmathmlglyphtableams.h +45 -0
  69. data/ext/mathematical/lsmmathmlitexelement.c +187 -0
  70. data/ext/mathematical/lsmmathmlitexelement.h +60 -0
  71. data/ext/mathematical/lsmmathmllayoututils.c +191 -0
  72. data/ext/mathematical/lsmmathmllayoututils.h +58 -0
  73. data/ext/mathematical/lsmmathmlmathelement.c +204 -0
  74. data/ext/mathematical/lsmmathmlmathelement.h +81 -0
  75. data/ext/mathematical/lsmmathmloperatordictionary.c +3332 -0
  76. data/ext/mathematical/lsmmathmloperatordictionary.h +54 -0
  77. data/ext/mathematical/lsmmathmloperatorelement.c +307 -0
  78. data/ext/mathematical/lsmmathmloperatorelement.h +73 -0
  79. data/ext/mathematical/lsmmathmlpaddedelement.c +58 -0
  80. data/ext/mathematical/lsmmathmlpaddedelement.h +56 -0
  81. data/ext/mathematical/lsmmathmlphantomelement.c +71 -0
  82. data/ext/mathematical/lsmmathmlphantomelement.h +56 -0
  83. data/ext/mathematical/lsmmathmlpresentationcontainer.c +43 -0
  84. data/ext/mathematical/lsmmathmlpresentationcontainer.h +54 -0
  85. data/ext/mathematical/lsmmathmlpresentationtoken.c +303 -0
  86. data/ext/mathematical/lsmmathmlpresentationtoken.h +83 -0
  87. data/ext/mathematical/lsmmathmlradicalelement.c +266 -0
  88. data/ext/mathematical/lsmmathmlradicalelement.h +71 -0
  89. data/ext/mathematical/lsmmathmlrowelement.c +58 -0
  90. data/ext/mathematical/lsmmathmlrowelement.h +56 -0
  91. data/ext/mathematical/lsmmathmlscriptelement.c +282 -0
  92. data/ext/mathematical/lsmmathmlscriptelement.h +78 -0
  93. data/ext/mathematical/lsmmathmlsemanticselement.c +84 -0
  94. data/ext/mathematical/lsmmathmlsemanticselement.h +56 -0
  95. data/ext/mathematical/lsmmathmlspaceelement.c +142 -0
  96. data/ext/mathematical/lsmmathmlspaceelement.h +60 -0
  97. data/ext/mathematical/lsmmathmlstringelement.c +123 -0
  98. data/ext/mathematical/lsmmathmlstringelement.h +58 -0
  99. data/ext/mathematical/lsmmathmlstyle.c +130 -0
  100. data/ext/mathematical/lsmmathmlstyle.h +81 -0
  101. data/ext/mathematical/lsmmathmlstyleelement.c +307 -0
  102. data/ext/mathematical/lsmmathmlstyleelement.h +87 -0
  103. data/ext/mathematical/lsmmathmltablecellelement.c +122 -0
  104. data/ext/mathematical/lsmmathmltablecellelement.h +62 -0
  105. data/ext/mathematical/lsmmathmltableelement.c +545 -0
  106. data/ext/mathematical/lsmmathmltableelement.h +78 -0
  107. data/ext/mathematical/lsmmathmltablerowelement.c +120 -0
  108. data/ext/mathematical/lsmmathmltablerowelement.h +64 -0
  109. data/ext/mathematical/lsmmathmltraits.c +819 -0
  110. data/ext/mathematical/lsmmathmltraits.h +119 -0
  111. data/ext/mathematical/lsmmathmltypes.h +66 -0
  112. data/ext/mathematical/lsmmathmlunderoverelement.c +485 -0
  113. data/ext/mathematical/lsmmathmlunderoverelement.h +82 -0
  114. data/ext/mathematical/lsmmathmlutils.c +170 -0
  115. data/ext/mathematical/lsmmathmlutils.h +50 -0
  116. data/ext/mathematical/lsmmathmlview.c +1048 -0
  117. data/ext/mathematical/lsmmathmlview.h +164 -0
  118. data/ext/mathematical/lsmproperties.c +418 -0
  119. data/ext/mathematical/lsmproperties.h +85 -0
  120. data/ext/mathematical/lsmstr.c +231 -0
  121. data/ext/mathematical/lsmstr.h +114 -0
  122. data/ext/mathematical/lsmsvg.h +67 -0
  123. data/ext/mathematical/lsmsvgaelement.c +73 -0
  124. data/ext/mathematical/lsmsvgaelement.h +55 -0
  125. data/ext/mathematical/lsmsvgattributes.h +118 -0
  126. data/ext/mathematical/lsmsvgcircleelement.c +153 -0
  127. data/ext/mathematical/lsmsvgcircleelement.h +59 -0
  128. data/ext/mathematical/lsmsvgclippathelement.c +134 -0
  129. data/ext/mathematical/lsmsvgclippathelement.h +59 -0
  130. data/ext/mathematical/lsmsvgcolors.c +212 -0
  131. data/ext/mathematical/lsmsvgcolors.h +39 -0
  132. data/ext/mathematical/lsmsvgdefselement.c +74 -0
  133. data/ext/mathematical/lsmsvgdefselement.h +55 -0
  134. data/ext/mathematical/lsmsvgdocument.c +288 -0
  135. data/ext/mathematical/lsmsvgdocument.h +64 -0
  136. data/ext/mathematical/lsmsvgelement.c +373 -0
  137. data/ext/mathematical/lsmsvgelement.h +81 -0
  138. data/ext/mathematical/lsmsvgellipseelement.c +158 -0
  139. data/ext/mathematical/lsmsvgellipseelement.h +60 -0
  140. data/ext/mathematical/lsmsvgenums.c +544 -0
  141. data/ext/mathematical/lsmsvgenums.h +357 -0
  142. data/ext/mathematical/lsmsvgenumtypes.c +1083 -0
  143. data/ext/mathematical/lsmsvgenumtypes.h +111 -0
  144. data/ext/mathematical/lsmsvgfilterblend.c +105 -0
  145. data/ext/mathematical/lsmsvgfilterblend.h +58 -0
  146. data/ext/mathematical/lsmsvgfiltercomposite.c +109 -0
  147. data/ext/mathematical/lsmsvgfiltercomposite.h +58 -0
  148. data/ext/mathematical/lsmsvgfilterelement.c +266 -0
  149. data/ext/mathematical/lsmsvgfilterelement.h +66 -0
  150. data/ext/mathematical/lsmsvgfilterflood.c +86 -0
  151. data/ext/mathematical/lsmsvgfilterflood.h +55 -0
  152. data/ext/mathematical/lsmsvgfiltergaussianblur.c +114 -0
  153. data/ext/mathematical/lsmsvgfiltergaussianblur.h +57 -0
  154. data/ext/mathematical/lsmsvgfiltermerge.c +98 -0
  155. data/ext/mathematical/lsmsvgfiltermerge.h +55 -0
  156. data/ext/mathematical/lsmsvgfiltermergenode.c +87 -0
  157. data/ext/mathematical/lsmsvgfiltermergenode.h +57 -0
  158. data/ext/mathematical/lsmsvgfilteroffset.c +112 -0
  159. data/ext/mathematical/lsmsvgfilteroffset.h +58 -0
  160. data/ext/mathematical/lsmsvgfilterprimitive.c +168 -0
  161. data/ext/mathematical/lsmsvgfilterprimitive.h +66 -0
  162. data/ext/mathematical/lsmsvgfilterspecularlighting.c +127 -0
  163. data/ext/mathematical/lsmsvgfilterspecularlighting.h +60 -0
  164. data/ext/mathematical/lsmsvgfiltersurface.c +455 -0
  165. data/ext/mathematical/lsmsvgfiltersurface.h +66 -0
  166. data/ext/mathematical/lsmsvgfiltertile.c +102 -0
  167. data/ext/mathematical/lsmsvgfiltertile.h +57 -0
  168. data/ext/mathematical/lsmsvggelement.c +73 -0
  169. data/ext/mathematical/lsmsvggelement.h +55 -0
  170. data/ext/mathematical/lsmsvggradientelement.c +151 -0
  171. data/ext/mathematical/lsmsvggradientelement.h +68 -0
  172. data/ext/mathematical/lsmsvgimageelement.c +261 -0
  173. data/ext/mathematical/lsmsvgimageelement.h +67 -0
  174. data/ext/mathematical/lsmsvglength.c +152 -0
  175. data/ext/mathematical/lsmsvglength.h +65 -0
  176. data/ext/mathematical/lsmsvglineargradientelement.c +271 -0
  177. data/ext/mathematical/lsmsvglineargradientelement.h +60 -0
  178. data/ext/mathematical/lsmsvglineelement.c +153 -0
  179. data/ext/mathematical/lsmsvglineelement.h +60 -0
  180. data/ext/mathematical/lsmsvgmarkerelement.c +266 -0
  181. data/ext/mathematical/lsmsvgmarkerelement.h +74 -0
  182. data/ext/mathematical/lsmsvgmaskelement.c +232 -0
  183. data/ext/mathematical/lsmsvgmaskelement.h +64 -0
  184. data/ext/mathematical/lsmsvgmatrix.c +205 -0
  185. data/ext/mathematical/lsmsvgmatrix.h +59 -0
  186. data/ext/mathematical/lsmsvgpathelement.c +115 -0
  187. data/ext/mathematical/lsmsvgpathelement.h +59 -0
  188. data/ext/mathematical/lsmsvgpatternelement.c +398 -0
  189. data/ext/mathematical/lsmsvgpatternelement.h +69 -0
  190. data/ext/mathematical/lsmsvgpolygonelement.c +106 -0
  191. data/ext/mathematical/lsmsvgpolygonelement.h +57 -0
  192. data/ext/mathematical/lsmsvgpolylineelement.c +106 -0
  193. data/ext/mathematical/lsmsvgpolylineelement.h +57 -0
  194. data/ext/mathematical/lsmsvgradialgradientelement.c +323 -0
  195. data/ext/mathematical/lsmsvgradialgradientelement.h +61 -0
  196. data/ext/mathematical/lsmsvgrectelement.c +184 -0
  197. data/ext/mathematical/lsmsvgrectelement.h +62 -0
  198. data/ext/mathematical/lsmsvgstopelement.c +106 -0
  199. data/ext/mathematical/lsmsvgstopelement.h +57 -0
  200. data/ext/mathematical/lsmsvgstyle.c +560 -0
  201. data/ext/mathematical/lsmsvgstyle.h +217 -0
  202. data/ext/mathematical/lsmsvgsvgelement.c +260 -0
  203. data/ext/mathematical/lsmsvgsvgelement.h +71 -0
  204. data/ext/mathematical/lsmsvgswitchelement.c +103 -0
  205. data/ext/mathematical/lsmsvgswitchelement.h +55 -0
  206. data/ext/mathematical/lsmsvgsymbolelement.c +74 -0
  207. data/ext/mathematical/lsmsvgsymbolelement.h +55 -0
  208. data/ext/mathematical/lsmsvgtextelement.c +203 -0
  209. data/ext/mathematical/lsmsvgtextelement.h +60 -0
  210. data/ext/mathematical/lsmsvgtraits.c +1232 -0
  211. data/ext/mathematical/lsmsvgtraits.h +104 -0
  212. data/ext/mathematical/lsmsvgtransformable.c +106 -0
  213. data/ext/mathematical/lsmsvgtransformable.h +54 -0
  214. data/ext/mathematical/lsmsvgtspanelement.c +174 -0
  215. data/ext/mathematical/lsmsvgtspanelement.h +60 -0
  216. data/ext/mathematical/lsmsvgtypes.h +77 -0
  217. data/ext/mathematical/lsmsvguseelement.c +237 -0
  218. data/ext/mathematical/lsmsvguseelement.h +69 -0
  219. data/ext/mathematical/lsmsvgview.c +2583 -0
  220. data/ext/mathematical/lsmsvgview.h +179 -0
  221. data/ext/mathematical/lsmtraits.c +119 -0
  222. data/ext/mathematical/lsmtraits.h +49 -0
  223. data/ext/mathematical/lsmtypes.h +36 -0
  224. data/ext/mathematical/lsmutils.c +54 -0
  225. data/ext/mathematical/lsmutils.h +56 -0
  226. data/ext/mathematical/mathematical.c +145 -0
  227. data/ext/mathematical/y.tab.c +6179 -0
  228. data/ext/mathematical/y.tab.h +389 -0
  229. data/lib/mathematical/version.rb +1 -1
  230. data/mathematical.gemspec +8 -6
  231. data/test/mathematical/basic_test.rb +9 -0
  232. data/test/mathematical/fixtures/after/brackets_display.html +1 -0
  233. data/test/mathematical/fixtures/after/compliance_accents.html +17 -0
  234. data/test/mathematical/fixtures/after/compliance_arrows.html +71 -0
  235. data/test/mathematical/fixtures/after/compliance_colors.html +4 -0
  236. data/test/mathematical/fixtures/after/compliance_greek_letters.html +42 -0
  237. data/test/mathematical/fixtures/after/compliance_large_math.html +19 -0
  238. data/test/mathematical/fixtures/after/compliance_log_symbols.html +34 -0
  239. data/test/mathematical/fixtures/after/compliance_operators.html +262 -0
  240. data/test/mathematical/fixtures/after/dollar_sign_inline.html +1 -0
  241. data/test/mathematical/fixtures/after/equation_display.html +1 -0
  242. data/test/mathematical/fixtures/after/multiple_dollar_inline.html +1 -0
  243. data/test/mathematical/fixtures/after/parens_inline.html +1 -0
  244. data/test/mathematical/fixtures/before/brackets_display.text +1 -0
  245. data/test/mathematical/fixtures/before/compliance_accents.text +17 -0
  246. data/test/mathematical/fixtures/before/compliance_arrows.text +71 -0
  247. data/test/mathematical/fixtures/before/compliance_colors.text +4 -0
  248. data/test/mathematical/fixtures/before/compliance_greek_letters.text +42 -0
  249. data/test/mathematical/fixtures/before/compliance_large_math.text +19 -0
  250. data/test/mathematical/fixtures/before/compliance_log_symbols.text +34 -0
  251. data/test/mathematical/fixtures/before/compliance_operators.text +262 -0
  252. data/test/mathematical/fixtures/before/dollar_sign_inline.text +1 -0
  253. data/test/mathematical/fixtures/before/equation_display.text +1 -0
  254. data/test/mathematical/fixtures/before/multiple_dollar_inline.text +1 -0
  255. data/test/mathematical/fixtures/before/parens_inline.text +1 -0
  256. data/test/mathematical/fixtures/performance/big_file.text +1767 -0
  257. data/test/mathematical/fixtures_test.rb +45 -0
  258. data/test/mathematical/maliciousness_test.rb +45 -0
  259. data/test/mathematical/performance_test.rb +15 -0
  260. data/test/test_helper.rb +5 -0
  261. metadata +301 -14
  262. data/lib/mathematical.bundle +0 -0
  263. data/lib/mathematical/mathematical.bundle +0 -0
@@ -0,0 +1,54 @@
1
+ /* Lasem
2
+ *
3
+ * Copyright © 2007-2009 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_DOM_PARSER_H
25
+ #define LSM_DOM_PARSER_H
26
+
27
+ #include <lsmdomdocument.h>
28
+ #include <gio/gio.h>
29
+
30
+ G_BEGIN_DECLS
31
+
32
+ void lsm_dom_document_append_from_memory (LsmDomDocument *document, LsmDomNode *node,
33
+ const void *buffer, int size, GError **error);
34
+ LsmDomDocument * lsm_dom_document_new_from_memory (const void *buffer, int size, GError **error);
35
+ LsmDomDocument * lsm_dom_document_new_from_path (const char *path, GError **error);
36
+ LsmDomDocument * lsm_dom_document_new_from_url (const char *url, GError **error);
37
+
38
+ void lsm_dom_document_save_to_stream (LsmDomDocument *document,
39
+ GOutputStream *stream,
40
+ GError **error);
41
+ void lsm_dom_document_save_to_memory (LsmDomDocument *documennt,
42
+ void **buffer,
43
+ int *size,
44
+ GError **error);
45
+ void lsm_dom_document_save_to_path (LsmDomDocument *documennt,
46
+ const char *path,
47
+ GError **error);
48
+ void lsm_dom_document_save_to_url (LsmDomDocument *documennt,
49
+ const char *path,
50
+ GError **error);
51
+
52
+ G_END_DECLS
53
+
54
+ #endif
@@ -0,0 +1,82 @@
1
+ /* Lasem
2
+ *
3
+ * Copyright © 2007-2008 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
+ /**
25
+ * SECTION:lsmdomtext
26
+ * @short_description: Base class for DOM text nodes
27
+ */
28
+
29
+ #include <lsmdomtext.h>
30
+
31
+ /* LsmDomNode implementation */
32
+
33
+ static const char *
34
+ lsm_dom_text_get_node_name (LsmDomNode *node)
35
+ {
36
+ return "#text";
37
+ }
38
+
39
+ static const char *
40
+ lsm_dom_text_get_node_value (LsmDomNode *node)
41
+ {
42
+ return LSM_DOM_CHARACTER_DATA (node)->data;
43
+ }
44
+
45
+ static LsmDomNodeType
46
+ lsm_dom_text_get_node_type (LsmDomNode *node)
47
+ {
48
+ return LSM_DOM_NODE_TYPE_TEXT_NODE;
49
+ }
50
+
51
+ /* LsmDomText implementation */
52
+
53
+ LsmDomNode *
54
+ lsm_dom_text_new (const char *data)
55
+ {
56
+ LsmDomNode *node;
57
+
58
+ node = g_object_new (LSM_TYPE_DOM_TEXT, NULL);
59
+
60
+ lsm_dom_character_data_set_data (LSM_DOM_CHARACTER_DATA (node), data);
61
+
62
+ return node;
63
+ }
64
+
65
+ static void
66
+ lsm_dom_text_init (LsmDomText *text_node)
67
+ {
68
+ }
69
+
70
+ /* LsmDomText class */
71
+
72
+ static void
73
+ lsm_dom_text_class_init (LsmDomTextClass *klass)
74
+ {
75
+ LsmDomNodeClass *node_class = LSM_DOM_NODE_CLASS (klass);
76
+
77
+ node_class->get_node_name = lsm_dom_text_get_node_name;
78
+ node_class->get_node_value = lsm_dom_text_get_node_value;
79
+ node_class->get_node_type = lsm_dom_text_get_node_type;
80
+ }
81
+
82
+ G_DEFINE_TYPE (LsmDomText, lsm_dom_text, LSM_TYPE_DOM_CHARACTER_DATA)
@@ -0,0 +1,55 @@
1
+ /* Lasem
2
+ *
3
+ * Copyright © 2007-2008 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_DOM_TEXT_H
25
+ #define LSM_DOM_TEXT_H
26
+
27
+ #include <lsmdomcharacterdata.h>
28
+
29
+ G_BEGIN_DECLS
30
+
31
+ #define LSM_TYPE_DOM_TEXT (lsm_dom_text_get_type ())
32
+ #define LSM_DOM_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LSM_TYPE_DOM_TEXT, LsmDomText))
33
+ #define LSM_DOM_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LSM_TYPE_DOM_TEXT, LsmDomTextClass))
34
+ #define LSM_IS_DOM_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LSM_TYPE_DOM_TEXT))
35
+ #define LSM_IS_DOM_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LSM_TYPE_DOM_TEXT))
36
+ #define LSM_DOM_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), LSM_TYPE_DOM_TEXT, LsmDomTextClass))
37
+
38
+ typedef struct _LsmDomTextClass LsmDomTextClass;
39
+
40
+ struct _LsmDomText {
41
+ LsmDomCharacterData character_data;
42
+ };
43
+
44
+ struct _LsmDomTextClass {
45
+ LsmDomCharacterDataClass parent_class;
46
+ };
47
+
48
+ GType lsm_dom_text_get_type (void);
49
+
50
+ LsmDomNode *lsm_dom_text_new (const char *data);
51
+
52
+ G_END_DECLS
53
+
54
+ #endif
55
+
@@ -0,0 +1,44 @@
1
+ /* Lasem - SVG and Mathml library
2
+ *
3
+ * Copyright © 2010 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_DOM_TYPES_H
25
+ #define LSM_DOM_TYPES_H
26
+
27
+ #include <glib-object.h>
28
+
29
+ G_BEGIN_DECLS
30
+
31
+ typedef struct _LsmDomNode LsmDomNode;
32
+ typedef struct _LsmDomNodeList LsmDomNodeList;
33
+ typedef struct _LsmDomNamedNodeMap LsmDomNamedNodeMap;
34
+ typedef struct _LsmDomElement LsmDomElement;
35
+ typedef struct _LsmDomDocument LsmDomDocument;
36
+ typedef struct _LsmDomDocumentFragment LsmDomDocumentFragment;
37
+ typedef struct _LsmDomCharacterData LsmDomCharacterData;
38
+ typedef struct _LsmDomText LsmDomText;
39
+
40
+ typedef struct _LsmDomView LsmDomView;
41
+
42
+ G_END_DECLS
43
+
44
+ #endif
@@ -0,0 +1,422 @@
1
+ /* Lasem
2
+ *
3
+ * Copyright © 2009-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
+ /**
25
+ * SECTION:lsmdomview
26
+ * @short_description: Base class for DOM views
27
+ */
28
+
29
+ #include <lsmdebug.h>
30
+ #include <lsmdomdocument.h>
31
+ #include <lsmdomview.h>
32
+
33
+ static GObjectClass *parent_class;
34
+
35
+ /**
36
+ * lsm_dom_view_get_resolution:
37
+ * @self: A #LsmDomView
38
+ *
39
+ * Returns: view resolution, in pixel per inch.
40
+ */
41
+
42
+ double
43
+ lsm_dom_view_get_resolution (LsmDomView *self)
44
+ {
45
+ g_return_val_if_fail (LSM_IS_DOM_VIEW (self), 0.0);
46
+
47
+ return self->resolution_ppi;
48
+ }
49
+
50
+ /**
51
+ * lsm_dom_view_set_resolution:
52
+ * @self: a #LsmDomView
53
+ * @ppi: resolution, in pixel per inch.
54
+ *
55
+ * Set the view resolution, in pixel per inch.
56
+ */
57
+
58
+ void
59
+ lsm_dom_view_set_resolution (LsmDomView *self, double ppi)
60
+ {
61
+ g_return_if_fail (LSM_IS_DOM_VIEW (self));
62
+
63
+ if (ppi < 0.0)
64
+ self->resolution_ppi = LSM_DOM_VIEW_DEFAULT_RESOLUTION;
65
+ else
66
+ self->resolution_ppi = ppi;
67
+ }
68
+
69
+ /**
70
+ * lsm_dom_view_set_viewport:
71
+ * @self: a #LsmDomView
72
+ * @viewport_pt: viewport size, in points
73
+ *
74
+ * Set the viewport size.
75
+ */
76
+
77
+ void
78
+ lsm_dom_view_set_viewport (LsmDomView *self, const LsmBox *viewport_pt)
79
+ {
80
+ g_return_if_fail (LSM_IS_DOM_VIEW (self));
81
+ g_return_if_fail (viewport_pt != NULL);
82
+
83
+ self->viewport_pt = *viewport_pt;
84
+ }
85
+
86
+ /**
87
+ * lsm_dom_view_set_viewport_pixels:
88
+ * @self: a #LsmDomView
89
+ * @viewport: viewport size, in pixels
90
+ *
91
+ * Set the viewport size.
92
+ */
93
+
94
+ void
95
+ lsm_dom_view_set_viewport_pixels (LsmDomView *self, const LsmBox *viewport)
96
+ {
97
+ g_return_if_fail (LSM_IS_DOM_VIEW (self));
98
+ g_return_if_fail (viewport != NULL);
99
+
100
+ self->viewport_pt.x = viewport->x * 72.0 / self->resolution_ppi;
101
+ self->viewport_pt.y = viewport->y * 72.0 / self->resolution_ppi;
102
+ self->viewport_pt.width = viewport->width * 72.0 / self->resolution_ppi;
103
+ self->viewport_pt.height = viewport->height * 72.0 / self->resolution_ppi;
104
+ }
105
+
106
+ /**
107
+ * lsm_dom_view_get_viewport:
108
+ * @self: a #LsmDomView
109
+ *
110
+ * Returns: viewport size, in points.
111
+ */
112
+
113
+ LsmBox
114
+ lsm_dom_view_get_viewport (LsmDomView *self)
115
+ {
116
+ static const LsmBox null_viewport = {0, 0, 0, 0};
117
+
118
+ g_return_val_if_fail (LSM_IS_DOM_VIEW (self), null_viewport);
119
+
120
+ return self->viewport_pt;
121
+ }
122
+
123
+ /**
124
+ * lsm_dom_view_get_viewport_pixels:
125
+ * @self: a #LsmDomView
126
+ *
127
+ * Returns: viewport size, in pixels.
128
+ */
129
+
130
+ LsmBox
131
+ lsm_dom_view_get_viewport_pixels (LsmDomView *self)
132
+ {
133
+ LsmBox viewport = {0, 0, 0, 0};
134
+
135
+ g_return_val_if_fail (LSM_IS_DOM_VIEW (self), viewport);
136
+
137
+ viewport.x = self->viewport_pt.x * self->resolution_ppi / 72.0;
138
+ viewport.y = self->viewport_pt.y * self->resolution_ppi / 72.0;
139
+ viewport.width = self->viewport_pt.width * self->resolution_ppi / 72.0;
140
+ viewport.height = self->viewport_pt.height * self->resolution_ppi / 72.0;
141
+
142
+ return viewport;
143
+ }
144
+
145
+ /**
146
+ * lsm_dom_view_get_size:
147
+ * @view: a #LsmDomView
148
+ * @width: view width placeholder, in points
149
+ * @height: view height placeholder, in points
150
+ * @baseline: view baseline, in points
151
+ *
152
+ * Get the view size and baseline. Baseline is for use of view inside bloc of text.
153
+ */
154
+
155
+ void
156
+ lsm_dom_view_get_size (LsmDomView *view, double *width, double *height, double *baseline)
157
+ {
158
+ LsmDomViewClass *view_class;
159
+ double dummy_width = 0.0;
160
+ double dummy_height = 0.0;
161
+
162
+ g_return_if_fail (LSM_IS_DOM_VIEW (view));
163
+ g_return_if_fail (view->document != NULL);
164
+
165
+ if (width == NULL)
166
+ width = &dummy_width;
167
+ if (height == NULL)
168
+ height = &dummy_height;
169
+
170
+ view_class = LSM_DOM_VIEW_GET_CLASS (view);
171
+ if (view_class->measure != NULL)
172
+ view_class->measure (view, width, height, baseline);
173
+ }
174
+
175
+ /**
176
+ * lsm_dom_view_get_size_pixels:
177
+ * @view: a #LsmDomView
178
+ * @width: view width placeholder, in pixels
179
+ * @height: view height placeholder, in pixels
180
+ * @baseline: view baseline, in pixels
181
+ *
182
+ * Get the view size and baseline. Baseline is for use of view inside bloc of text.
183
+ */
184
+
185
+ void
186
+ lsm_dom_view_get_size_pixels (LsmDomView *view, unsigned int *width, unsigned int *height, unsigned int *baseline)
187
+ {
188
+ double resolution_ppi;
189
+ double width_pt;
190
+ double height_pt;
191
+ double baseline_pt;
192
+
193
+ g_return_if_fail (LSM_IS_DOM_VIEW (view));
194
+ g_return_if_fail (view->document != NULL);
195
+
196
+ resolution_ppi = view->resolution_ppi;
197
+ g_return_if_fail (resolution_ppi > 0.0);
198
+
199
+ width_pt = width != NULL ? *width * 72.0 / resolution_ppi : 0.0;
200
+ height_pt = height != NULL ? *height * 72.0 / resolution_ppi : 0.0;
201
+ baseline_pt = baseline != NULL? *baseline * 72.0 /resolution_ppi : 0.0;
202
+
203
+ lsm_dom_view_get_size (view, &width_pt, &height_pt,&baseline_pt);
204
+
205
+ if (width != NULL)
206
+ *width = (double) (0.5 + width_pt * resolution_ppi / 72.0);
207
+ if (height != NULL)
208
+ *height = (double) (0.5 + height_pt * resolution_ppi / 72.0);
209
+ if (baseline != NULL)
210
+ *baseline = (double) (0.5 + baseline_pt * resolution_ppi / 72.0);
211
+ }
212
+
213
+ static void
214
+ lsm_dom_view_set_cairo_context (LsmDomView *view, cairo_t *cairo)
215
+ {
216
+ PangoContext *context;
217
+ cairo_font_options_t *font_options;
218
+ const cairo_font_options_t *current_font_options;
219
+ cairo_surface_t *surface;
220
+ cairo_surface_type_t type;
221
+
222
+ g_return_if_fail (LSM_IS_DOM_VIEW (view));
223
+
224
+ if (view->cairo == cairo)
225
+ return;
226
+
227
+ if (view->cairo != NULL) {
228
+ cairo_destroy (view->cairo);
229
+ g_object_unref (view->pango_layout);
230
+ }
231
+
232
+ if (cairo == NULL) {
233
+ view->cairo = NULL;
234
+ view->pango_layout = NULL;
235
+
236
+ return;
237
+ }
238
+
239
+ cairo_reference (cairo);
240
+ view->cairo = cairo;
241
+ view->pango_layout = pango_cairo_create_layout (cairo);
242
+
243
+ surface = cairo_get_target (cairo);
244
+
245
+ type = cairo_surface_get_type (surface);
246
+
247
+ view->is_vector = (type == CAIRO_SURFACE_TYPE_SVG ||
248
+ type == CAIRO_SURFACE_TYPE_PDF ||
249
+ type == CAIRO_SURFACE_TYPE_PS);
250
+
251
+ context = pango_layout_get_context (view->pango_layout);
252
+ pango_cairo_context_set_resolution (context, 72);
253
+
254
+ current_font_options = pango_cairo_context_get_font_options (context);
255
+ if (current_font_options == NULL)
256
+ font_options = cairo_font_options_create ();
257
+ else
258
+ font_options = cairo_font_options_copy (current_font_options);
259
+ cairo_font_options_set_hint_metrics (font_options, CAIRO_HINT_METRICS_OFF);
260
+ pango_cairo_context_set_font_options (context, font_options);
261
+ cairo_font_options_destroy (font_options);
262
+ }
263
+
264
+ /**
265
+ * lsm_dom_view_render:
266
+ * @view: a #LsmDomView
267
+ * @cairo: cairo context
268
+ * @x: x posiiton for rendering
269
+ * @y: y position for rendering
270
+ *
271
+ * Render @view in the @cairo context.
272
+ */
273
+
274
+ void
275
+ lsm_dom_view_render (LsmDomView *view, cairo_t *cairo, double x, double y)
276
+ {
277
+ LsmDomViewClass *view_class;
278
+
279
+ g_return_if_fail (LSM_IS_DOM_VIEW (view));
280
+ g_return_if_fail (LSM_IS_DOM_DOCUMENT (view->document));
281
+ g_return_if_fail (cairo != NULL);
282
+
283
+ lsm_dom_view_set_cairo_context (view, cairo);
284
+
285
+ cairo_save (view->cairo);
286
+
287
+ cairo_translate (view->cairo, x, y);
288
+
289
+ view_class = LSM_DOM_VIEW_GET_CLASS (view);
290
+ if (view_class->render != NULL)
291
+ view_class->render (view);
292
+
293
+ cairo_restore (view->cairo);
294
+
295
+ lsm_debug_render ("[LsmDomView::render] cairo status = %s",
296
+ cairo_status_to_string (cairo_status (view->cairo)));
297
+
298
+ lsm_dom_view_set_cairo_context (view, NULL);
299
+ }
300
+
301
+ /**
302
+ * lsm_dom_view_set_document:
303
+ * @view: a #LsmDomView
304
+ * @document: (transfer full): a #LsmDomDocument
305
+ *
306
+ * Change the document attached to @view. The previously attached document is unreferenced.
307
+ */
308
+
309
+ void
310
+ lsm_dom_view_set_document (LsmDomView *view, LsmDomDocument *document)
311
+ {
312
+ g_return_if_fail (LSM_IS_DOM_VIEW (view));
313
+ g_return_if_fail (document == NULL || LSM_IS_DOM_DOCUMENT (document));
314
+
315
+ if (view->document == document)
316
+ return;
317
+
318
+ if (view->document != NULL)
319
+ g_object_unref (view->document);
320
+
321
+ if (document != NULL)
322
+ g_object_ref (document);
323
+
324
+ view->document = document;
325
+ }
326
+
327
+ /**
328
+ * lsm_dom_view_set_debug:
329
+ * @view: a #LsmDomView
330
+ * @feature: name of the feature to debug
331
+ * @enable: wether to enable debugging
332
+ *
333
+ * Configure feature debug.
334
+ */
335
+
336
+ void
337
+ lsm_dom_view_set_debug (LsmDomView *view, const char *feature, gboolean enable)
338
+ {
339
+ LsmDomViewClass *view_class;
340
+
341
+ g_return_if_fail (LSM_IS_DOM_VIEW (view));
342
+ g_return_if_fail (feature != NULL);
343
+
344
+
345
+ view_class = LSM_DOM_VIEW_GET_CLASS (view);
346
+ if (view_class->set_debug)
347
+ view_class->set_debug (view, feature, enable);
348
+ }
349
+
350
+ static void
351
+ lsm_dom_view_init (LsmDomView *view)
352
+ {
353
+ PangoFontMap *font_map;
354
+ PangoContext *pango_context;
355
+ cairo_font_options_t *font_options;
356
+
357
+ view->resolution_ppi = LSM_DOM_VIEW_DEFAULT_RESOLUTION;
358
+ view->viewport_pt.x = 0;
359
+ view->viewport_pt.y = 0;
360
+ view->viewport_pt.width = LSM_DOM_VIEW_DEFAULT_VIEWBOX_WIDTH;
361
+ view->viewport_pt.height = LSM_DOM_VIEW_DEFAULT_VIEWBOX_HEIGHT;
362
+
363
+ view->font_description = pango_font_description_new ();
364
+
365
+ font_map = pango_cairo_font_map_get_default ();
366
+
367
+ #if PANGO_VERSION_CHECK(1,22,0)
368
+ pango_context = pango_font_map_create_context (font_map);
369
+ #else
370
+ pango_context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (font_map));
371
+ #endif
372
+ pango_cairo_context_set_resolution (pango_context, 72.0);
373
+
374
+ view->measure_pango_layout = pango_layout_new (pango_context);
375
+
376
+ font_options = cairo_font_options_create ();
377
+
378
+ cairo_font_options_set_hint_metrics (font_options, CAIRO_HINT_METRICS_OFF);
379
+ cairo_font_options_set_hint_style (font_options, CAIRO_HINT_STYLE_NONE);
380
+
381
+ pango_cairo_context_set_font_options (pango_context, font_options);
382
+
383
+ cairo_font_options_destroy (font_options);
384
+
385
+ g_object_unref (pango_context);
386
+
387
+ view->pango_layout = NULL;
388
+ view->cairo = NULL;
389
+ view->is_vector = FALSE;
390
+ }
391
+
392
+ static void
393
+ lsm_dom_view_finalize (GObject *object)
394
+ {
395
+ LsmDomView *view = LSM_DOM_VIEW (object);
396
+
397
+ if (view->document)
398
+ g_object_unref (view->document);
399
+
400
+ if (view->pango_layout != NULL)
401
+ g_object_unref (view->pango_layout);
402
+ if (view->cairo != NULL)
403
+ cairo_destroy (view->cairo);
404
+
405
+ g_object_unref (view->measure_pango_layout);
406
+
407
+ pango_font_description_free (view->font_description);
408
+
409
+ parent_class->finalize (object);
410
+ }
411
+
412
+ static void
413
+ lsm_dom_view_class_init (LsmDomViewClass *view_class)
414
+ {
415
+ GObjectClass *object_class = G_OBJECT_CLASS (view_class);
416
+
417
+ parent_class = g_type_class_peek_parent (view_class);
418
+
419
+ object_class->finalize = lsm_dom_view_finalize;
420
+ }
421
+
422
+ G_DEFINE_ABSTRACT_TYPE (LsmDomView, lsm_dom_view, G_TYPE_OBJECT)