mathml2latex 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 (79) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +47 -0
  3. data/Rakefile +19 -0
  4. data/lib/mathml2latex.rb +27 -0
  5. data/lib/mathml2latex/mathml_latex_service.rb +42 -0
  6. data/lib/mathml2latex/symbols.rb +1561 -0
  7. data/lib/mathml2latex/version.rb +3 -0
  8. data/lib/mathml2latex/xslt/elements/menclose.xsl +39 -0
  9. data/lib/mathml2latex/xslt/elements/merror.xsl +8 -0
  10. data/lib/mathml2latex/xslt/elements/mfenced.xsl +64 -0
  11. data/lib/mathml2latex/xslt/elements/mfrac.xsl +56 -0
  12. data/lib/mathml2latex/xslt/elements/mi_mn_mo_mtext_ms.xsl +199 -0
  13. data/lib/mathml2latex/xslt/elements/mmultiscripts.xsl +61 -0
  14. data/lib/mathml2latex/xslt/elements/mover.xsl +66 -0
  15. data/lib/mathml2latex/xslt/elements/mphantom.xsl +10 -0
  16. data/lib/mathml2latex/xslt/elements/mroot.xsl +21 -0
  17. data/lib/mathml2latex/xslt/elements/mrow.xsl +8 -0
  18. data/lib/mathml2latex/xslt/elements/mspace.xsl +24 -0
  19. data/lib/mathml2latex/xslt/elements/msqrt.xsl +10 -0
  20. data/lib/mathml2latex/xslt/elements/mstyle.xsl +39 -0
  21. data/lib/mathml2latex/xslt/elements/msub.xsl +12 -0
  22. data/lib/mathml2latex/xslt/elements/msubsup.xsl +14 -0
  23. data/lib/mathml2latex/xslt/elements/msup.xsl +12 -0
  24. data/lib/mathml2latex/xslt/elements/mtable.xsl +86 -0
  25. data/lib/mathml2latex/xslt/elements/mtd.xsl +30 -0
  26. data/lib/mathml2latex/xslt/elements/mtr.xsl +11 -0
  27. data/lib/mathml2latex/xslt/elements/munder.xsl +73 -0
  28. data/lib/mathml2latex/xslt/elements/munderover.xsl +92 -0
  29. data/lib/mathml2latex/xslt/includes.xsl +30 -0
  30. data/lib/mathml2latex/xslt/mml2latex.xsl +30 -0
  31. data/lib/mathml2latex/xslt/shared/color.xsl +117 -0
  32. data/lib/mathml2latex/xslt_functions.rb +29 -0
  33. data/spec/fixtures/basic/aligned_equations.xml +37 -0
  34. data/spec/fixtures/basic/arrow_accent.xml +11 -0
  35. data/spec/fixtures/basic/backspace.xml +6 -0
  36. data/spec/fixtures/basic/bottom_parenthesis.xml +12 -0
  37. data/spec/fixtures/basic/definite_integral_with_differential.xml +17 -0
  38. data/spec/fixtures/basic/digit_space.xml +6 -0
  39. data/spec/fixtures/basic/double_vertical_bars.xml +10 -0
  40. data/spec/fixtures/basic/element_over.xml +15 -0
  41. data/spec/fixtures/basic/element_under.xml +17 -0
  42. data/spec/fixtures/basic/element_under_over.xml +23 -0
  43. data/spec/fixtures/basic/enclose_box_matrix.xml +28 -0
  44. data/spec/fixtures/basic/enclose_left.xml +9 -0
  45. data/spec/fixtures/basic/enclose_right.xml +8 -0
  46. data/spec/fixtures/basic/fraction.xml +6 -0
  47. data/spec/fixtures/basic/greek.xml +30 -0
  48. data/spec/fixtures/basic/left_right_arrow_accent.xml +12 -0
  49. data/spec/fixtures/basic/left_subscript.xml +15 -0
  50. data/spec/fixtures/basic/left_super_sub_script.xml +21 -0
  51. data/spec/fixtures/basic/left_superscript.xml +15 -0
  52. data/spec/fixtures/basic/matrix.xml +26 -0
  53. data/spec/fixtures/basic/matrix_bottom_curly_bracket.xml +32 -0
  54. data/spec/fixtures/basic/matrix_curly_brackets.xml +30 -0
  55. data/spec/fixtures/basic/matrix_parenthesis.xml +28 -0
  56. data/spec/fixtures/basic/matrix_square_brackets.xml +30 -0
  57. data/spec/fixtures/basic/matrix_top_curly_bracket.xml +32 -0
  58. data/spec/fixtures/basic/matrix_with_vertical_bar.xml +30 -0
  59. data/spec/fixtures/basic/n_root.xml +6 -0
  60. data/spec/fixtures/basic/over_script_with_brace.xml +18 -0
  61. data/spec/fixtures/basic/parenthesis.xml +9 -0
  62. data/spec/fixtures/basic/piecewise_function.xml +22 -0
  63. data/spec/fixtures/basic/square_root.xml +5 -0
  64. data/spec/fixtures/basic/subscript.xml +13 -0
  65. data/spec/fixtures/basic/subscript_with_big_operator.xml +10 -0
  66. data/spec/fixtures/basic/sum_over_under.xml +13 -0
  67. data/spec/fixtures/basic/sum_super_sub.xml +9 -0
  68. data/spec/fixtures/basic/super_sub_script.xml +18 -0
  69. data/spec/fixtures/basic/super_sub_script_big_operator.xml +18 -0
  70. data/spec/fixtures/basic/superscript.xml +9 -0
  71. data/spec/fixtures/basic/top_parenthesis.xml +6 -0
  72. data/spec/fixtures/basic/under_script_with_brace.xml +18 -0
  73. data/spec/fixtures/basic/vector_accent.xml +13 -0
  74. data/spec/fixtures/complex/sum_with_nested_matrix.xml +79 -0
  75. data/spec/lib/mathml2latex/mathml_latex_service_spec.rb +383 -0
  76. data/spec/lib/mathml2latex/xslt_functions_spec.rb +39 -0
  77. data/spec/mathml2latex_spec.rb +52 -0
  78. data/spec/spec_helper.rb +15 -0
  79. metadata +257 -0
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Mathml2latex::XsltFunctions do
4
+ let(:functions) { described_class.new }
5
+
6
+ describe '#replace' do
7
+ it 'can replace as expected' do
8
+ expect(
9
+ functions.replace('rewq1132gfewsg334', '\d', 'x')
10
+ ).to eq('rewqxxxxgfewsgxxx')
11
+ end
12
+ end
13
+
14
+ describe '#matches' do
15
+ it 'can find right pattern' do
16
+ expect(
17
+ functions.matches('rewq1132\gfewsg334', '\\\\')
18
+ ).to be(true)
19
+ end
20
+ end
21
+
22
+ describe '#fetch_symbols' do
23
+ let(:str) do
24
+ s = ''
25
+ s << "\u2a5e".encode('utf-8')
26
+ s << "A"
27
+ s << "\u225e".encode('utf-8')
28
+ s << "\u21b6".encode('utf-8')
29
+ s << "\u00ac".encode('utf-8')
30
+ s
31
+ end
32
+
33
+ it 'can find right pattern' do
34
+ expect(
35
+ functions.fetch_symbols(str)
36
+ ).to eq('\doublebarwedge A\stackrel{\scriptscriptstyle\mathrm{m}}{=}\curvearrowleft \neg ')
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Mathml2latex do
4
+ it "has a version number" do
5
+ expect(Mathml2latex::VERSION).not_to be nil
6
+ end
7
+ end
8
+
9
+ RSpec.describe Mathml2latex::Converter do
10
+ let(:service) { instance_double(Mathml2latex::MathmlLatexService) }
11
+
12
+ before do
13
+ expect(Mathml2latex::MathmlLatexService).to receive(:get_service_object).
14
+ and_return(service)
15
+ end
16
+
17
+ context '#to_latex' do
18
+ subject { described_class.new.to_latex('some xml') }
19
+
20
+ it "directs calls to service" do
21
+ expect(service).to receive(:to_latex)
22
+ subject
23
+ end
24
+ end
25
+
26
+ context '#replace_with_latex' do
27
+ let(:xml_doc) { double }
28
+ let(:node1) { double }
29
+ let(:node2) { double }
30
+ let(:nodes) do
31
+ [node1, node2]
32
+ end
33
+
34
+ before do
35
+ allow(xml_doc).to receive(:xpath).and_return(nodes)
36
+ allow(node1).to receive(:dup).and_return(node1)
37
+ allow(node2).to receive(:dup).and_return(node2)
38
+ end
39
+
40
+ subject { described_class.new.replace_with_latex(xml_doc) }
41
+
42
+ it "directs calls to service" do
43
+ expect(service).to receive(:to_latex).twice
44
+ expect(node1).to receive(:to_xml)
45
+ expect(node2).to receive(:to_xml)
46
+ expect(node1).to receive(:replace)
47
+ expect(node2).to receive(:replace)
48
+ subject
49
+ end
50
+ end
51
+ end
52
+
@@ -0,0 +1,15 @@
1
+ require 'bundler/setup'
2
+ require 'mathml2latex'
3
+ require 'pry'
4
+
5
+ RSpec.configure do |config|
6
+ # Enable flags like --only-failures and --next-failure
7
+ config.example_status_persistence_file_path = ".rspec_status"
8
+
9
+ # Disable RSpec exposing methods globally on `Module` and `main`
10
+ config.disable_monkey_patching!
11
+
12
+ config.expect_with :rspec do |c|
13
+ c.syntax = :expect
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,257 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mathml2latex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Han Yan
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 4.2.9
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '5.2'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 4.2.9
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '5.2'
89
+ - !ruby/object:Gem::Dependency
90
+ name: nokogiri
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.8'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.8'
103
+ description:
104
+ email:
105
+ - hyan@instructure.com
106
+ executables: []
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - README.md
111
+ - Rakefile
112
+ - lib/mathml2latex.rb
113
+ - lib/mathml2latex/mathml_latex_service.rb
114
+ - lib/mathml2latex/symbols.rb
115
+ - lib/mathml2latex/version.rb
116
+ - lib/mathml2latex/xslt/elements/menclose.xsl
117
+ - lib/mathml2latex/xslt/elements/merror.xsl
118
+ - lib/mathml2latex/xslt/elements/mfenced.xsl
119
+ - lib/mathml2latex/xslt/elements/mfrac.xsl
120
+ - lib/mathml2latex/xslt/elements/mi_mn_mo_mtext_ms.xsl
121
+ - lib/mathml2latex/xslt/elements/mmultiscripts.xsl
122
+ - lib/mathml2latex/xslt/elements/mover.xsl
123
+ - lib/mathml2latex/xslt/elements/mphantom.xsl
124
+ - lib/mathml2latex/xslt/elements/mroot.xsl
125
+ - lib/mathml2latex/xslt/elements/mrow.xsl
126
+ - lib/mathml2latex/xslt/elements/mspace.xsl
127
+ - lib/mathml2latex/xslt/elements/msqrt.xsl
128
+ - lib/mathml2latex/xslt/elements/mstyle.xsl
129
+ - lib/mathml2latex/xslt/elements/msub.xsl
130
+ - lib/mathml2latex/xslt/elements/msubsup.xsl
131
+ - lib/mathml2latex/xslt/elements/msup.xsl
132
+ - lib/mathml2latex/xslt/elements/mtable.xsl
133
+ - lib/mathml2latex/xslt/elements/mtd.xsl
134
+ - lib/mathml2latex/xslt/elements/mtr.xsl
135
+ - lib/mathml2latex/xslt/elements/munder.xsl
136
+ - lib/mathml2latex/xslt/elements/munderover.xsl
137
+ - lib/mathml2latex/xslt/includes.xsl
138
+ - lib/mathml2latex/xslt/mml2latex.xsl
139
+ - lib/mathml2latex/xslt/shared/color.xsl
140
+ - lib/mathml2latex/xslt_functions.rb
141
+ - spec/fixtures/basic/aligned_equations.xml
142
+ - spec/fixtures/basic/arrow_accent.xml
143
+ - spec/fixtures/basic/backspace.xml
144
+ - spec/fixtures/basic/bottom_parenthesis.xml
145
+ - spec/fixtures/basic/definite_integral_with_differential.xml
146
+ - spec/fixtures/basic/digit_space.xml
147
+ - spec/fixtures/basic/double_vertical_bars.xml
148
+ - spec/fixtures/basic/element_over.xml
149
+ - spec/fixtures/basic/element_under.xml
150
+ - spec/fixtures/basic/element_under_over.xml
151
+ - spec/fixtures/basic/enclose_box_matrix.xml
152
+ - spec/fixtures/basic/enclose_left.xml
153
+ - spec/fixtures/basic/enclose_right.xml
154
+ - spec/fixtures/basic/fraction.xml
155
+ - spec/fixtures/basic/greek.xml
156
+ - spec/fixtures/basic/left_right_arrow_accent.xml
157
+ - spec/fixtures/basic/left_subscript.xml
158
+ - spec/fixtures/basic/left_super_sub_script.xml
159
+ - spec/fixtures/basic/left_superscript.xml
160
+ - spec/fixtures/basic/matrix.xml
161
+ - spec/fixtures/basic/matrix_bottom_curly_bracket.xml
162
+ - spec/fixtures/basic/matrix_curly_brackets.xml
163
+ - spec/fixtures/basic/matrix_parenthesis.xml
164
+ - spec/fixtures/basic/matrix_square_brackets.xml
165
+ - spec/fixtures/basic/matrix_top_curly_bracket.xml
166
+ - spec/fixtures/basic/matrix_with_vertical_bar.xml
167
+ - spec/fixtures/basic/n_root.xml
168
+ - spec/fixtures/basic/over_script_with_brace.xml
169
+ - spec/fixtures/basic/parenthesis.xml
170
+ - spec/fixtures/basic/piecewise_function.xml
171
+ - spec/fixtures/basic/square_root.xml
172
+ - spec/fixtures/basic/subscript.xml
173
+ - spec/fixtures/basic/subscript_with_big_operator.xml
174
+ - spec/fixtures/basic/sum_over_under.xml
175
+ - spec/fixtures/basic/sum_super_sub.xml
176
+ - spec/fixtures/basic/super_sub_script.xml
177
+ - spec/fixtures/basic/super_sub_script_big_operator.xml
178
+ - spec/fixtures/basic/superscript.xml
179
+ - spec/fixtures/basic/top_parenthesis.xml
180
+ - spec/fixtures/basic/under_script_with_brace.xml
181
+ - spec/fixtures/basic/vector_accent.xml
182
+ - spec/fixtures/complex/sum_with_nested_matrix.xml
183
+ - spec/lib/mathml2latex/mathml_latex_service_spec.rb
184
+ - spec/lib/mathml2latex/xslt_functions_spec.rb
185
+ - spec/mathml2latex_spec.rb
186
+ - spec/spec_helper.rb
187
+ homepage: https://github.com/instructure/mathml2latex
188
+ licenses:
189
+ - MIT
190
+ metadata: {}
191
+ post_install_message:
192
+ rdoc_options: []
193
+ require_paths:
194
+ - lib
195
+ required_ruby_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ requirements: []
206
+ rubyforge_project:
207
+ rubygems_version: 2.6.13
208
+ signing_key:
209
+ specification_version: 4
210
+ summary: Translate mathml to latex
211
+ test_files:
212
+ - spec/fixtures/basic/aligned_equations.xml
213
+ - spec/fixtures/basic/arrow_accent.xml
214
+ - spec/fixtures/basic/backspace.xml
215
+ - spec/fixtures/basic/bottom_parenthesis.xml
216
+ - spec/fixtures/basic/definite_integral_with_differential.xml
217
+ - spec/fixtures/basic/digit_space.xml
218
+ - spec/fixtures/basic/double_vertical_bars.xml
219
+ - spec/fixtures/basic/element_over.xml
220
+ - spec/fixtures/basic/element_under.xml
221
+ - spec/fixtures/basic/element_under_over.xml
222
+ - spec/fixtures/basic/enclose_box_matrix.xml
223
+ - spec/fixtures/basic/enclose_left.xml
224
+ - spec/fixtures/basic/enclose_right.xml
225
+ - spec/fixtures/basic/fraction.xml
226
+ - spec/fixtures/basic/greek.xml
227
+ - spec/fixtures/basic/left_right_arrow_accent.xml
228
+ - spec/fixtures/basic/left_subscript.xml
229
+ - spec/fixtures/basic/left_super_sub_script.xml
230
+ - spec/fixtures/basic/left_superscript.xml
231
+ - spec/fixtures/basic/matrix.xml
232
+ - spec/fixtures/basic/matrix_bottom_curly_bracket.xml
233
+ - spec/fixtures/basic/matrix_curly_brackets.xml
234
+ - spec/fixtures/basic/matrix_parenthesis.xml
235
+ - spec/fixtures/basic/matrix_square_brackets.xml
236
+ - spec/fixtures/basic/matrix_top_curly_bracket.xml
237
+ - spec/fixtures/basic/matrix_with_vertical_bar.xml
238
+ - spec/fixtures/basic/n_root.xml
239
+ - spec/fixtures/basic/over_script_with_brace.xml
240
+ - spec/fixtures/basic/parenthesis.xml
241
+ - spec/fixtures/basic/piecewise_function.xml
242
+ - spec/fixtures/basic/square_root.xml
243
+ - spec/fixtures/basic/subscript.xml
244
+ - spec/fixtures/basic/subscript_with_big_operator.xml
245
+ - spec/fixtures/basic/sum_over_under.xml
246
+ - spec/fixtures/basic/sum_super_sub.xml
247
+ - spec/fixtures/basic/super_sub_script.xml
248
+ - spec/fixtures/basic/super_sub_script_big_operator.xml
249
+ - spec/fixtures/basic/superscript.xml
250
+ - spec/fixtures/basic/top_parenthesis.xml
251
+ - spec/fixtures/basic/under_script_with_brace.xml
252
+ - spec/fixtures/basic/vector_accent.xml
253
+ - spec/fixtures/complex/sum_with_nested_matrix.xml
254
+ - spec/lib/mathml2latex/mathml_latex_service_spec.rb
255
+ - spec/lib/mathml2latex/xslt_functions_spec.rb
256
+ - spec/mathml2latex_spec.rb
257
+ - spec/spec_helper.rb