mathematical 0.6.2 → 1.0.0

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -12
  3. data/Rakefile +3 -2
  4. data/ext/mathematical/cairo_callbacks.c +25 -0
  5. data/ext/mathematical/cairo_callbacks.h +7 -0
  6. data/ext/mathematical/extconf.rb +11 -11
  7. data/ext/mathematical/lasem/src/lsmmathmldocument.c +3 -0
  8. data/ext/mathematical/lasem/src/lsmmathmlencloseelement.c +142 -0
  9. data/ext/mathematical/lasem/src/lsmmathmlencloseelement.h +64 -0
  10. data/ext/mathematical/lasem/src/lsmmathmlenums.c +35 -0
  11. data/ext/mathematical/lasem/src/lsmmathmlenums.h +25 -1
  12. data/ext/mathematical/lasem/src/lsmmathmlpaddedelement.c +79 -0
  13. data/ext/mathematical/lasem/src/lsmmathmlpaddedelement.h +5 -0
  14. data/ext/mathematical/lasem/src/lsmmathmlstyleelement.c +6 -0
  15. data/ext/mathematical/lasem/src/lsmmathmltableelement.c +5 -5
  16. data/ext/mathematical/lasem/src/lsmmathmltraits.c +24 -0
  17. data/ext/mathematical/lasem/src/lsmmathmltraits.h +1 -0
  18. data/ext/mathematical/lasem/src/lsmmathmltypes.h +1 -0
  19. data/ext/mathematical/lasem/src/lsmmathmlutils.h +9 -2
  20. data/ext/mathematical/lasem/src/lsmmathmlview.c +283 -11
  21. data/ext/mathematical/lasem/src/lsmmathmlview.h +13 -0
  22. data/ext/mathematical/lasem_overrides.c +40 -0
  23. data/ext/mathematical/lasem_overrides.h +23 -0
  24. data/ext/mathematical/mathematical.c +119 -127
  25. data/ext/mathematical/mathematical.h +24 -0
  26. data/ext/mathematical/mtex2MML/ext/extconf.rb +1 -1
  27. data/ext/mathematical/mtex2MML/src/lex.yy.c +4488 -4032
  28. data/ext/mathematical/mtex2MML/src/mtex2MML.h +3 -0
  29. data/ext/mathematical/mtex2MML/src/parse_extras.c +14 -5
  30. data/ext/mathematical/mtex2MML/src/parse_extras.h +3 -1
  31. data/ext/mathematical/mtex2MML/src/string_extras.c +39 -0
  32. data/ext/mathematical/mtex2MML/src/string_extras.h +7 -0
  33. data/ext/mathematical/mtex2MML/src/y.tab.c +4408 -3175
  34. data/ext/mathematical/mtex2MML/src/y.tab.h +500 -422
  35. data/lib/mathematical.rb +112 -2
  36. data/lib/mathematical/corrections.rb +2 -2
  37. data/lib/mathematical/version.rb +2 -2
  38. data/mathematical.gemspec +4 -4
  39. data/test/mathematical/basic_test.rb +1 -1
  40. data/test/mathematical/corrections_test.rb +1 -1
  41. data/test/mathematical/fixtures/png/numeric_test_1.png +0 -0
  42. data/test/mathematical/fixtures/png/numeric_test_2.png +0 -0
  43. data/test/mathematical/fixtures/png/numeric_test_3.png +0 -0
  44. data/test/mathematical/fixtures_test.rb +7 -7
  45. data/test/mathematical/maliciousness_test.rb +44 -17
  46. data/test/mathematical/mathjax_test.rb +5 -13
  47. data/test/mathematical/mathml_test.rb +3 -3
  48. data/test/mathematical/multiples_test.rb +68 -0
  49. data/test/mathematical/performance_test.rb +2 -2
  50. data/test/mathematical/png_test.rb +5 -5
  51. data/test/test_helper.rb +36 -1
  52. metadata +26 -11
  53. data/lib/mathematical/render.rb +0 -74
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a9cdeb400a07fdbeb239cbc9a388b6f45b3b927
4
- data.tar.gz: d837b73e1fc83fd8c38171904a85262ceaa0d678
3
+ metadata.gz: 020b6daf960edb5a9e5436aef6fa8c406188896c
4
+ data.tar.gz: ac15939f237b1086ed76ab8cd36fd55b7cb261e5
5
5
  SHA512:
6
- metadata.gz: 5223d24628dd767856850b8ceb95fc7a9b37bc70fcd3350cb68566da1a174fa11522a24f34086c2fd81c88944cf59c0e8ac714895e6c3fd33bd5d4b4c77cccdf
7
- data.tar.gz: 3e53356aef54d440be7c582bc65b0ab3dbe96edfd69fce06282d925d531a4fa5bd84f189d976f690af17b35eee5d9cc428e770880cdd8e0f270f0af75eecd381
6
+ metadata.gz: 9f73b02d173514430ff94664fa28e2b2d7cdfd863556796b399c3ee590a97a1904ab9f119b13ea617a677a47bde1351d7c5a4bbcd069d8732ffa097b46a418f9
7
+ data.tar.gz: 773a25ece459f013a69554c33018f2be6530ffc0e31d6b821a89690d5a652d84286e51697037b69887c09a682c50669927ff0ee4252cbf29fda3dad301a939df
data/README.md CHANGED
@@ -27,7 +27,7 @@ The simplest way to do this is
27
27
  ``` ruby
28
28
  require 'mathematical'
29
29
 
30
- Mathematical::Render.new.render(string_with_math)
30
+ Mathematical.new.render(string_with_math)
31
31
  ```
32
32
 
33
33
  `string_with_math` should just be a string of math TeX inline (`$..$`) or display (`$$..$$`) style math.
@@ -45,21 +45,55 @@ The output will be a hash, with keys that depend on the format you want:
45
45
  * If you asked for MathML, you'll get:
46
46
  * `mathml`: the MathML data
47
47
 
48
+ **Note**: If you pass in invalid LaTeX, an error is not raised, but a message *is* printed to STDERR, and the original string is returned (not a hash).
49
+
50
+ ### Array of equations
51
+
52
+ Rather than just a string, you can also provide an array of math inputs:
53
+
54
+ ``` ruby
55
+ inputs = []
56
+ inputs << '$a$'
57
+ inputs << '$b$'
58
+ inputs << '$c$'
59
+
60
+ Mathematical.new.render(inputs)
61
+ ```
62
+
63
+ This returns an array of hashes, possessing the same keys as above.
64
+
65
+ **Note**: With an array, it is possible to receive elements that are not hashes. For example, given the following input:
66
+
67
+ ```
68
+ array = ['$foof$', '$not__thisisnotreal$', '$poof$']
69
+ ```
70
+
71
+ You will receive the following output:
72
+
73
+ ```
74
+ Mathematical.new.render(array)
75
+ [ {:svg => "...", :width => ... }, '$not__thisisnotreal$', {:svg => "...", :width => ... }]
76
+ ```
77
+
78
+ That is, while the first and last elements are valid LaTeX math, the middle one is not, so the same string is returned. As with a single string, a message is also printed to STDERR.
79
+
48
80
  ### Options
49
81
 
50
- `Mathematical::Render.new` takes an optional hash to define a few options:
82
+ `Mathematical.new` takes an optional hash to define a few options:
51
83
 
52
- * `:ppi` - A double determining the pixels per inch of the resulting SVG (default: `72.0`).
53
- * `:zoom` - A double determining the zoom level of the resulting SVG (default: `1.0`).
54
- * `:base64` - A boolean determining whether Mathematical's output should be a base64-encoded SVG string (default: `false`).
55
- * `:maxsize` - A numeral indicating the `MAXSIZE` the output string can be. (default: `unsigned long`).
56
- * `:format` - A string indicating whether you want an "svg", "png", or "mathml" output. (default: `svg`).
84
+ | Name | Description | Default
85
+ |------|-------------|--------
86
+ | `:ppi` | A double determining the pixels per inch of the resulting SVG | `72.0`
87
+ | `:zoom` | A double determining the zoom level of the resulting SVG | `1.0`
88
+ | `:base64` | A boolean determining whether Mathematical's output should be a base64-encoded SVG string | `false`
89
+ | `:maxsize` | A numeral indicating the `MAXSIZE` the output string can be. | `unsigned long`
90
+ | `:format` | A symbol indicating whether you want an `:svg`, `:png`, or `:mathml` output. | `:svg`
57
91
 
58
92
  Pass these in like this:
59
93
 
60
94
  ``` ruby
61
95
  opts = { :ppi => 200.0, :zoom => 5.0, :base64 => true }
62
- renderer = Mathematical::Render.new(opts)
96
+ renderer = Mathematical.new(opts)
63
97
  renderer.render('$a \ne b$')
64
98
  ```
65
99
 
@@ -67,7 +101,7 @@ renderer.render('$a \ne b$')
67
101
 
68
102
  Check out [SUPPORTED.md on the mtex2MML website](https://github.com/gjtorikian/mtex2MML/blob/master/SUPPORTED.md).
69
103
 
70
- **Note**: This library makes a few assumptions about the strings that you pass in. It assumes that `$..$` is inline math, `$$..$$` is display math, and that your double-slashes (like `\\`) are escaped (`\\\\`).
104
+ **Note**: This library makes a few assumptions about the strings that you pass in. It assumes that `$..$` is inline math and `$$..$$` is display math.
71
105
 
72
106
  ## Building
73
107
 
@@ -122,10 +156,12 @@ On a Windows machine, I have no idea. Pull requests welcome!
122
156
 
123
157
  ```
124
158
  Benchmarking....
125
- Size: 1175 kilobytes
159
+ Size: 1164 kilobytes
126
160
  Iterations: 10
127
161
  user system total real
128
- Rendering... 9.470000 0.750000 10.220000 ( 13.909420)
162
+ Rendering... 18.070000 0.290000 18.360000 ( 23.003883)
163
+
164
+ 19340 items converted!
129
165
  ```
130
166
 
131
167
  ## Hacking
@@ -217,7 +253,7 @@ With it, you could do something fun like:
217
253
 
218
254
  ``` ruby
219
255
  MathToItex(string).convert do |eq, type|
220
- svg_content = Mathematical::Render.new(:base64 => true).render(eq)
256
+ svg_content = Mathematical.new(:base64 => true).render(eq)
221
257
 
222
258
  # create image tags of math with base64-encoded SVGs
223
259
  %|<img class="#{type.to_s}-math" data-math-type="#{type.to_s}-math" src="#{svg_content}"/>|
data/Rakefile CHANGED
@@ -40,9 +40,10 @@ task :copy_samples do
40
40
  end
41
41
 
42
42
  task :destroy_copies do
43
+ safe_files = [/extconf.rb/, /mathematical\.(?:c|h)/, /lasem_overrides/, /cairo_callbacks/]
43
44
  ext_dir = File.join(File.dirname(__FILE__), 'ext', 'mathematical')
44
45
  Dir.glob("#{ext_dir}/*").select { |f| File.file?(f) }.each do |f|
45
- next if f =~ /extconf.rb$/ || f =~ /mathematical.c$/
46
+ next if safe_files.any? { |s| f =~ s }
46
47
  File.delete(f)
47
48
  end
48
49
  Dir.glob("#{ext_dir}/{lib,src,test,ext,deps,uthash}").select { |d| FileUtils.rm_rf d }
@@ -51,5 +52,5 @@ end
51
52
  desc 'Pretty format C code'
52
53
  task :format do
53
54
  puts `astyle --indent=spaces=2 --style=1tbs --keep-one-line-blocks \
54
- $(ack -f --type=cpp --type=cc ext/mathematical/mathematical.c)`
55
+ $(ack -n -f --type=cpp --type=cc ext/mathematical/)`
55
56
  end
@@ -0,0 +1,25 @@
1
+ #include <cairo_callbacks.h>
2
+
3
+ cairo_status_t cairoSvgSurfaceCallback (void *closure, const unsigned char *data, unsigned int length)
4
+ {
5
+ VALUE self = (VALUE) closure;
6
+ if (rb_iv_get(self, "@svg") == Qnil) {
7
+ rb_iv_set(self, "@svg", rb_str_new2(""));
8
+ }
9
+
10
+ rb_str_cat(rb_iv_get(self, "@svg"), data, length);
11
+
12
+ return CAIRO_STATUS_SUCCESS;
13
+ }
14
+
15
+ cairo_status_t cairoPngSurfaceCallback (void *closure, const unsigned char *data, unsigned int length)
16
+ {
17
+ VALUE self = (VALUE) closure;
18
+ if (rb_iv_get(self, "@png") == Qnil) {
19
+ rb_iv_set(self, "@png", rb_str_new2(""));
20
+ }
21
+
22
+ rb_str_cat(rb_iv_get(self, "@png"), data, length);
23
+
24
+ return CAIRO_STATUS_SUCCESS;
25
+ }
@@ -0,0 +1,7 @@
1
+ #include "ruby.h"
2
+
3
+ #include <cairo-svg.h>
4
+
5
+ extern cairo_status_t cairoSvgSurfaceCallback (void *closure, const unsigned char *data, unsigned int length);
6
+
7
+ extern cairo_status_t cairoPngSurfaceCallback (void *closure, const unsigned char *data, unsigned int length);
@@ -2,36 +2,36 @@ require 'mkmf'
2
2
  require 'rbconfig'
3
3
  host_os = RbConfig::CONFIG['host_os']
4
4
 
5
- LASEM_DIR = File.join(File.dirname(__FILE__), "lasem", "src")
6
- MTEX_DIR = File.join(File.dirname(__FILE__), "mtex2MML", "src")
5
+ LASEM_DIR = File.join(File.dirname(__FILE__), 'lasem', 'src')
6
+ MTEX_DIR = File.join(File.dirname(__FILE__), 'mtex2MML', 'src')
7
7
 
8
8
  if host_os =~ /darwin|mac os/
9
9
  ENV['PKG_CONFIG_PATH'] = "/opt/X11/lib/pkgconfig:#{ENV['PKG_CONFIG_PATH']}"
10
10
  end
11
11
 
12
- have_library("xml2")
13
- find_header("libxml/tree.h", "/include/libxml2", "/usr/include/libxml2", "/usr/local/include/libxml2")
14
- find_header("libxml/parser.h", "/include/libxml2", "/usr/include/libxml2", "/usr/local/include/libxml2")
15
- find_header("libxml/xpath.h", "/include/libxml2", "/usr/include/libxml2", "/usr/local/include/libxml2")
16
- find_header("libxml/xpathInternals.h", "/include/libxml2", "/usr/include/libxml2", "/usr/local/include/libxml2")
12
+ have_library('xml2')
13
+ find_header('libxml/tree.h', '/include/libxml2', '/usr/include/libxml2', '/usr/local/include/libxml2')
14
+ find_header('libxml/parser.h', '/include/libxml2', '/usr/include/libxml2', '/usr/local/include/libxml2')
15
+ find_header('libxml/xpath.h', '/include/libxml2', '/usr/include/libxml2', '/usr/local/include/libxml2')
16
+ find_header('libxml/xpathInternals.h', '/include/libxml2', '/usr/include/libxml2', '/usr/local/include/libxml2')
17
17
 
18
18
  # TODO: this is so frakkin' stupid. but I can't seem to get subdirs to compile any other way
19
19
  # the `destroy_copies` task, immediately after `compile`, will destroy these files
20
20
  FileUtils.cp_r(Dir.glob("#{LASEM_DIR}/*"), File.dirname(__FILE__))
21
- File.delete(File.join(File.dirname(__FILE__), "lasemrender.c"))
21
+ File.delete(File.join(File.dirname(__FILE__), 'lasemrender.c'))
22
22
 
23
23
  # build mtex2MML Bison files
24
24
  Dir.chdir(MTEX_DIR) do
25
- system "make"
25
+ system 'make'
26
26
  end
27
27
 
28
28
  FileUtils.cp_r(Dir.glob("#{MTEX_DIR}/*.{c,h,cc}"), File.dirname(__FILE__))
29
29
  FileUtils.cp_r("#{MTEX_DIR}/deps/.", File.dirname(__FILE__))
30
30
  FileUtils.cp_r(Dir.glob("#{MTEX_DIR}/deps/**/*"), File.dirname(__FILE__))
31
31
 
32
- have_library("pangocairo-1.0")
32
+ have_library('pangocairo-1.0')
33
33
 
34
34
  $LDFLAGS += " #{`pkg-config --static --libs glib-2.0 gdk-pixbuf-2.0 cairo pango`.chomp}"
35
35
  $CFLAGS += " #{`pkg-config --cflags glib-2.0 gdk-pixbuf-2.0 cairo pango`.chomp} -I#{LASEM_DIR} -I#{MTEX_DIR}"
36
36
 
37
- create_makefile("mathematical/mathematical")
37
+ create_makefile('mathematical/mathematical')
@@ -36,6 +36,7 @@
36
36
  #include <lsmmathmloperatorelement.h>
37
37
  #include <lsmmathmlstringelement.h>
38
38
  #include <lsmmathmlrowelement.h>
39
+ #include <lsmmathmlencloseelement.h>
39
40
  #include <lsmmathmlpaddedelement.h>
40
41
  #include <lsmmathmlfencedelement.h>
41
42
  #include <lsmmathmlerrorelement.h>
@@ -102,6 +103,8 @@ _create_element (LsmDomDocument *document, const char *tag_name)
102
103
  node = lsm_mathml_operator_element_new ();
103
104
  else if (strcmp (tag_name, "mrow") == 0)
104
105
  node = lsm_mathml_row_element_new ();
106
+ else if (strcmp (tag_name, "menclose") == 0)
107
+ node = lsm_mathml_enclose_element_new ();
105
108
  else if (strcmp (tag_name, "mn") == 0)
106
109
  node = lsm_mathml_number_element_new ();
107
110
  else if (strcmp (tag_name, "mi") == 0)
@@ -0,0 +1,142 @@
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
+ #include <lsmmathmlencloseelement.h>
25
+ #include <lsmmathmlview.h>
26
+
27
+ static GObjectClass *parent_class;
28
+
29
+ /* LsmDomNode implementation */
30
+
31
+ static const char *
32
+ _get_node_name (LsmDomNode *node)
33
+ {
34
+ return "menclose";
35
+ }
36
+
37
+ /* LsmMathmlElement implementation */
38
+
39
+ static void
40
+ _update (LsmMathmlElement *self, LsmMathmlStyle *style)
41
+ {
42
+ LsmMathmlEncloseElement *enclose = LSM_MATHML_ENCLOSE_ELEMENT (self);
43
+
44
+ style->math_color = lsm_mathml_color_attribute_inherit (&enclose->math_color, style->math_color);
45
+ style->math_background = lsm_mathml_color_attribute_inherit (&enclose->math_background, style->math_background);
46
+ }
47
+
48
+ static const LsmMathmlBbox *
49
+ _measure (LsmMathmlElement *self, LsmMathmlView *view, const LsmMathmlBbox *bbox)
50
+ {
51
+ LsmMathmlEncloseElement *enclose = LSM_MATHML_ENCLOSE_ELEMENT (self);
52
+ LsmMathmlBbox stretch_bbox;
53
+
54
+ LSM_MATHML_ELEMENT_CLASS (parent_class)->measure (self, view, bbox);
55
+
56
+ stretch_bbox = self->bbox;
57
+
58
+ lsm_mathml_view_measure_notation (view, &self->style, enclose->notation.value, &stretch_bbox,
59
+ &self->bbox, &enclose->x_child_offset);
60
+
61
+ return &self->bbox;
62
+ }
63
+
64
+ static void
65
+ _layout (LsmMathmlElement *self, LsmMathmlView *view,
66
+ double x, double y, const LsmMathmlBbox *bbox)
67
+ {
68
+ LsmMathmlEncloseElement *enclose = LSM_MATHML_ENCLOSE_ELEMENT (self);
69
+
70
+ LSM_MATHML_ELEMENT_CLASS (parent_class)->layout (self, view, x + enclose->x_child_offset, y, bbox);
71
+ }
72
+
73
+ static void
74
+ _render (LsmMathmlElement *self, LsmMathmlView *view)
75
+ {
76
+ LsmMathmlEncloseElement *enclose = LSM_MATHML_ENCLOSE_ELEMENT (self);
77
+
78
+ LSM_MATHML_ELEMENT_CLASS (parent_class)->render (self, view);
79
+
80
+ lsm_mathml_view_show_notation (view, &self->style, enclose->notation.value, self->x, self->y, &self->bbox,
81
+ enclose->x_child_offset);
82
+ }
83
+
84
+ /* LsmMathmlEncloseElement implementation */
85
+
86
+ LsmDomNode *
87
+ lsm_mathml_enclose_element_new (void)
88
+ {
89
+ return g_object_new (LSM_TYPE_MATHML_ENCLOSE_ELEMENT, NULL);
90
+ }
91
+
92
+ static const LsmMathmlNotation notation_default = LSM_MATHML_NOTATION_LONGDIV;
93
+
94
+ static void
95
+ lsm_mathml_enclose_element_init (LsmMathmlEncloseElement *element)
96
+ {
97
+ }
98
+
99
+ /* LsmMathmlEncloseElement class */
100
+
101
+ static const LsmAttributeInfos _attribute_infos[] = {
102
+ {
103
+ .name = "notation",
104
+ .attribute_offset = offsetof (LsmMathmlEncloseElement, notation),
105
+ .trait_class = &lsm_mathml_notation_trait_class,
106
+ .trait_default = &notation_default
107
+ },
108
+ {
109
+ .name = "mathcolor",
110
+ .attribute_offset = offsetof (LsmMathmlEncloseElement, math_color),
111
+ .trait_class = &lsm_mathml_color_trait_class,
112
+ },
113
+ {
114
+ .name = "mathbackground",
115
+ .attribute_offset = offsetof (LsmMathmlEncloseElement, math_background),
116
+ .trait_class = &lsm_mathml_color_trait_class,
117
+ }
118
+ };
119
+
120
+ static void
121
+ lsm_mathml_enclose_element_class_init (LsmMathmlEncloseElementClass *klass)
122
+ {
123
+ LsmDomNodeClass *d_node_class = LSM_DOM_NODE_CLASS (klass);
124
+ LsmMathmlElementClass *m_element_class = LSM_MATHML_ELEMENT_CLASS (klass);
125
+
126
+ parent_class = g_type_class_peek_parent (klass);
127
+
128
+ d_node_class->get_node_name = _get_node_name;
129
+
130
+ m_element_class->update = _update;
131
+ m_element_class->measure = _measure;
132
+ m_element_class->layout = _layout;
133
+ m_element_class->render = _render;
134
+ m_element_class->attribute_manager = lsm_attribute_manager_duplicate (m_element_class->attribute_manager);
135
+
136
+ lsm_attribute_manager_add_attributes (m_element_class->attribute_manager,
137
+ G_N_ELEMENTS (_attribute_infos),
138
+ _attribute_infos);
139
+ }
140
+
141
+ G_DEFINE_TYPE (LsmMathmlEncloseElement, lsm_mathml_enclose_element, LSM_TYPE_MATHML_PRESENTATION_CONTAINER)
142
+
@@ -0,0 +1,64 @@
1
+ /* Lasem
2
+ *
3
+ * Copyright © 2007-2011 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_MATHML_ENCLOSE_ELEMENT_H
25
+ #define LSM_MATHML_ENCLOSE_ELEMENT_H
26
+
27
+ #include <lsmmathmltypes.h>
28
+ #include <lsmmathmlpresentationcontainer.h>
29
+
30
+ G_BEGIN_DECLS
31
+
32
+ #define LSM_TYPE_MATHML_ENCLOSE_ELEMENT (lsm_mathml_enclose_element_get_type ())
33
+ #define LSM_MATHML_ENCLOSE_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LSM_TYPE_MATHML_ENCLOSE_ELEMENT, LsmMathmlEncloseElement))
34
+ #define LSM_MATHML_ENCLOSE_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LSM_TYPE_MATHML_ENCLOSE_ELEMENT, LsmMathmlEncloseElementClass))
35
+ #define LSM_IS_MATHML_ENCLOSE_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LSM_TYPE_MATHML_ENCLOSE_ELEMENT))
36
+ #define LSM_IS_MATHML_ENCLOSE_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LSM_TYPE_MATHML_ENCLOSE_ELEMENT))
37
+ #define LSM_MATHML_ENCLOSE_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), LSM_TYPE_MATHML_ENCLOSE_ELEMENT, LsmMathmlEncloseElementClass))
38
+
39
+ typedef struct _LsmMathmlEncloseElementClass LsmMathmlEncloseElementClass;
40
+
41
+ struct _LsmMathmlEncloseElement {
42
+ LsmMathmlPresentationContainer presentation_container;
43
+
44
+ LsmMathmlEnumAttribute notation;
45
+ LsmMathmlColorAttribute math_color;
46
+ LsmMathmlColorAttribute math_background;
47
+
48
+ /* View data */
49
+
50
+ double x_child_offset;
51
+ };
52
+
53
+ struct _LsmMathmlEncloseElementClass {
54
+ LsmMathmlPresentationContainerClass parent_class;
55
+ };
56
+
57
+ GType lsm_mathml_enclose_element_get_type (void);
58
+
59
+ LsmDomNode *lsm_mathml_enclose_element_new (void);
60
+
61
+ G_END_DECLS
62
+
63
+ #endif
64
+
@@ -427,3 +427,38 @@ lsm_mathml_line_from_string (const char *string)
427
427
  return lsm_enum_value_from_string (string, lsm_mathml_line_strings,
428
428
  G_N_ELEMENTS (lsm_mathml_line_strings));
429
429
  }
430
+
431
+ static const char *lsm_mathml_notation_strings[] = {
432
+ "longdiv",
433
+ "actuarial",
434
+ "radical",
435
+ "box",
436
+ "roundedbox",
437
+ "circle",
438
+ "left",
439
+ "right",
440
+ "top",
441
+ "bottom",
442
+ "updiagonalstrike",
443
+ "downdiagonalstrike",
444
+ "verticalstrike",
445
+ "horizontalstrike",
446
+ "madruwb",
447
+ "updiagonalarrow"
448
+ };
449
+
450
+ const char *
451
+ lsm_mathml_notation_to_string (LsmMathmlNotation notation)
452
+ {
453
+ if (notation < 0 || notation > LSM_MATHML_NOTATION_UP_DIAGONAL_ARROW)
454
+ return NULL;
455
+
456
+ return lsm_mathml_notation_strings [notation];
457
+ }
458
+
459
+ LsmMathmlNotation
460
+ lsm_mathml_notation_from_string (const char *string)
461
+ {
462
+ return lsm_enum_value_from_string (string, lsm_mathml_notation_strings,
463
+ G_N_ELEMENTS (lsm_mathml_notation_strings));
464
+ }