asciimath 2.0.2 → 2.0.3
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +0 -6
- data/CHANGELOG.adoc +11 -0
- data/Gemfile +5 -0
- data/asciimath.gemspec +0 -5
- data/lib/asciimath/html.rb +2 -1
- data/lib/asciimath/latex.rb +1 -1
- data/lib/asciimath/markup.rb +10 -2
- data/lib/asciimath/mathml.rb +2 -1
- data/lib/asciimath/version.rb +1 -1
- data/spec/parser_spec.rb +18 -9
- metadata +4 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d9ffbd1e2a3ba0ae760422ed287d430cce18f80583aa8ceb043cd5235a9805e
|
4
|
+
data.tar.gz: ebbf1108292b512df0b9aa76a7ee4a17e91fdebf52019dafca3d1e4c9950c4e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d117d91868212eea9a0a5fe763fd91e0d4e2febe112c6ed92f8ed6fe745005fb27fc91c0e4dbcfe274cf3beced5d2ffcaa566f03fa2310b355eb40e93fde964
|
7
|
+
data.tar.gz: 49580040db7cc0f1f5941bdd5d55d2d5829c5b84503ce093faef266ef54aae5a74b8fb7992bebd62b55b92d3f3d0fc75645e82c25a2ca3e0b990b4f7147aa11e
|
data/.github/workflows/ci.yml
CHANGED
@@ -14,12 +14,6 @@ jobs:
|
|
14
14
|
uses: ruby/setup-ruby@v1
|
15
15
|
with:
|
16
16
|
ruby-version: ${{ matrix.ruby }}
|
17
|
-
- name: Reinstall Bundler
|
18
|
-
if: matrix.os == 'windows-latest' && matrix.ruby == 'jruby'
|
19
|
-
# Temporary workaround for https://github.com/ruby/setup-ruby/issues/129
|
20
|
-
run: |
|
21
|
-
gem uninstall -x bundler
|
22
|
-
gem install -N bundler -v 2.1.4
|
23
17
|
- name: Build
|
24
18
|
run: bundle install --jobs 4 --retry 3
|
25
19
|
- name: Test
|
data/CHANGELOG.adoc
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
= Asciimath Changelog
|
2
2
|
|
3
|
+
== 2.0.3
|
4
|
+
|
5
|
+
Enhancements::
|
6
|
+
|
7
|
+
* Issue #59: make escaping of non-ASCII characters in MathML and HTML output optional.
|
8
|
+
|
9
|
+
Bug fixes::
|
10
|
+
|
11
|
+
* Issue #58: produce `<mo>` tags instead of `<mi>` tags for non-alphanumeric strings.
|
12
|
+
* Issue #62: resolve infinite recursion in LaTeX generator.
|
13
|
+
|
3
14
|
== 2.0.2
|
4
15
|
|
5
16
|
Enhancements::
|
data/Gemfile
CHANGED
data/asciimath.gemspec
CHANGED
@@ -18,9 +18,4 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
21
|
-
|
22
|
-
spec.add_development_dependency "bundler", "> 0"
|
23
|
-
spec.add_development_dependency "rake", "~> 13.0.0"
|
24
|
-
spec.add_development_dependency "rspec", "~> 3.9.0"
|
25
|
-
spec.add_development_dependency "nokogiri", "~> 1.10.9"
|
26
21
|
end
|
data/lib/asciimath/html.rb
CHANGED
@@ -7,6 +7,7 @@ module AsciiMath
|
|
7
7
|
super(opts[:symbol_table] || ::AsciiMath::MarkupBuilder.default_display_symbol_table(fix_phi: opts.fetch(:fix_phi, true)))
|
8
8
|
@prefix = opts[:prefifx] || ''
|
9
9
|
@inline = opts[:inline]
|
10
|
+
@escape_non_ascii = opts.fetch(:escape_non_ascii, true)
|
10
11
|
@html = ''
|
11
12
|
end
|
12
13
|
|
@@ -227,7 +228,7 @@ module AsciiMath
|
|
227
228
|
@html << "<"
|
228
229
|
elsif cp == 62
|
229
230
|
@html << ">"
|
230
|
-
elsif cp > 127
|
231
|
+
elsif cp > 127 && @escape_non_ascii
|
231
232
|
@html << "&#x#{cp.to_s(16).upcase};"
|
232
233
|
else
|
233
234
|
@html << cp
|
data/lib/asciimath/latex.rb
CHANGED
data/lib/asciimath/markup.rb
CHANGED
@@ -329,7 +329,7 @@ module AsciiMath
|
|
329
329
|
when ::AsciiMath::AST::Number
|
330
330
|
append_number(node.value)
|
331
331
|
when ::AsciiMath::AST::Identifier
|
332
|
-
|
332
|
+
append_identifier_or_operator(node.value)
|
333
333
|
when ::AsciiMath::AST::Symbol
|
334
334
|
if (symbol = resolve_symbol(node))
|
335
335
|
case symbol[:type]
|
@@ -339,7 +339,7 @@ module AsciiMath
|
|
339
339
|
append_identifier(symbol[:value])
|
340
340
|
end
|
341
341
|
else
|
342
|
-
|
342
|
+
append_identifier_or_operator(node[:value])
|
343
343
|
end
|
344
344
|
when ::AsciiMath::AST::Paren
|
345
345
|
append_paren(resolve_paren(node.lparen), node.expression, resolve_paren(node.rparen), opts)
|
@@ -405,6 +405,14 @@ module AsciiMath
|
|
405
405
|
raise NotImplementedError.new __method__.to_s
|
406
406
|
end
|
407
407
|
|
408
|
+
def append_identifier_or_operator(value)
|
409
|
+
if value.empty? || value =~ /[[:alnum:]].*/
|
410
|
+
append_identifier(value)
|
411
|
+
else
|
412
|
+
append_operator(value)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
408
416
|
def append_identifier(identifier)
|
409
417
|
raise NotImplementedError.new __method__.to_s
|
410
418
|
end
|
data/lib/asciimath/mathml.rb
CHANGED
@@ -15,6 +15,7 @@ module AsciiMath
|
|
15
15
|
@row_mode = :avoid
|
16
16
|
@fence_mode = :row
|
17
17
|
end
|
18
|
+
@escape_non_ascii = opts.fetch(:escape_non_ascii, true)
|
18
19
|
end
|
19
20
|
|
20
21
|
def to_s
|
@@ -239,7 +240,7 @@ module AsciiMath
|
|
239
240
|
@mathml << "<"
|
240
241
|
elsif cp == 62
|
241
242
|
@mathml << ">"
|
242
|
-
elsif cp > 127
|
243
|
+
elsif cp > 127 && @escape_non_ascii
|
243
244
|
@mathml << "&#x#{cp.to_s(16).upcase};"
|
244
245
|
else
|
245
246
|
@mathml << cp
|
data/lib/asciimath/version.rb
CHANGED
data/spec/parser_spec.rb
CHANGED
@@ -7,11 +7,11 @@ require 'nokogiri'
|
|
7
7
|
|
8
8
|
module Xml
|
9
9
|
def self.mathml2_xsd
|
10
|
-
@
|
10
|
+
@mathml2_schema ||= File.open(File.expand_path('../schema/mathml2/mathml2.xsd', __FILE__)) { |io| Nokogiri::XML::Schema(io) }
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.mathml3_xsd
|
14
|
-
@
|
14
|
+
@mathml3_schema ||= File.open(File.expand_path('../schema/mathml3/mathml3.xsd', __FILE__)) { |io| Nokogiri::XML::Schema(io) }
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.parse(content)
|
@@ -31,12 +31,14 @@ def should_generate(expected_output)
|
|
31
31
|
expect(parsed.ast).to eq(expected)
|
32
32
|
when :mathml
|
33
33
|
expect(parsed.to_mathml).to eq(expected)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE != 'jruby'
|
35
|
+
xml_dom = Xml.parse(parsed.to_mathml(:xmlns => 'http://www.w3.org/1998/Math/MathML'))
|
36
|
+
Xml.mathml2_xsd.validate(xml_dom).each do |error|
|
37
|
+
fail(error.message)
|
38
|
+
end
|
39
|
+
Xml.mathml3_xsd.validate(xml_dom).each do |error|
|
40
|
+
fail(error.message)
|
41
|
+
end
|
40
42
|
end
|
41
43
|
when :mathml_word
|
42
44
|
expect(::AsciiMath::MathMLBuilder.new(:msword => true).append_expression(parsed.ast).to_s).to eq(expected)
|
@@ -568,7 +570,7 @@ RSpec.shared_examples 'AsciiMath Examples' do
|
|
568
570
|
seq('x', symbol('\ '), ':', symbol('\ '), 'x', symbol('in'), 'A', symbol('^^'), 'x', symbol('in'), 'B'),
|
569
571
|
symbol('}')
|
570
572
|
),
|
571
|
-
:mathml => '<math><mrow><mo>{</mo><mrow><mi>x</mi><mo> </mo><
|
573
|
+
:mathml => '<math><mrow><mo>{</mo><mrow><mi>x</mi><mo> </mo><mo>:</mo><mo> </mo><mi>x</mi><mo>∈</mo><mi>A</mi><mo>∧</mo><mi>x</mi><mo>∈</mo><mi>B</mi></mrow><mo>}</mo></mrow></math>',
|
572
574
|
:latex => '\\left \\{ x \\; : \\; x \\in A \\wedge x \\in B \\right \\}',
|
573
575
|
))
|
574
576
|
|
@@ -587,6 +589,13 @@ RSpec.shared_examples 'AsciiMath Examples' do
|
|
587
589
|
:mathml => '<math><mover accent="true"><mi></mi><mo>^</mo></mover></math>'
|
588
590
|
))
|
589
591
|
|
592
|
+
example('40% * 3!', &should_generate(
|
593
|
+
:ast => seq('40', '%', symbol('*'), '3', '!'),
|
594
|
+
:mathml => '<math><mn>40</mn><mo>%</mo><mo>⋅</mo><mn>3</mn><mo>!</mo></math>',
|
595
|
+
:html => '<span class="math-inline"><span class="math-number">40</span><span class="math-operator">%</span><span class="math-operator">⋅</span><span class="math-number">3</span><span class="math-operator">!</span></span>',
|
596
|
+
:latex => '40 \% \cdot 3 !'
|
597
|
+
))
|
598
|
+
|
590
599
|
version = RUBY_VERSION.split('.').map { |s| s.to_i }
|
591
600
|
|
592
601
|
if version[0] > 1 || version[1] > 8
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciimath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pepijn Van Eeckhoudt
|
@@ -9,64 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: bundler
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :development
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: rake
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 13.0.0
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 13.0.0
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: rspec
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 3.9.0
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 3.9.0
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: nokogiri
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - "~>"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 1.10.9
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 1.10.9
|
12
|
+
date: 2021-07-26 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
70
14
|
description: A pure Ruby AsciiMath parsing and conversion library.
|
71
15
|
email:
|
72
16
|
- pepijn@vaneeckhoudt.net
|
@@ -156,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
100
|
- !ruby/object:Gem::Version
|
157
101
|
version: '0'
|
158
102
|
requirements: []
|
159
|
-
rubygems_version: 3.
|
103
|
+
rubygems_version: 3.1.4
|
160
104
|
signing_key:
|
161
105
|
specification_version: 4
|
162
106
|
summary: AsciiMath parser and converter
|