asciimath 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4492ccf2978a02b79bf6d5a70a23871fd33db6893e4a90b1b159db3b4d7b8b3
4
- data.tar.gz: 43fbc1d2bba388ca359e0e908e0118b22189479cc05bf4a9882cb6459b4c6488
3
+ metadata.gz: 9b287c84a0345545fe98b4fc8cb6e229db81256175fe3493267691cf870521b3
4
+ data.tar.gz: fffc143e77dbb1a5a0ba364b702ee08caaf8fe9077cd5b9694ba9ff273132937
5
5
  SHA512:
6
- metadata.gz: 60c01de3ce18dd8eec2ff1a1fa559da2e0de840e08b59686ab3d1ff913a02f2656f2d8ceee1106657ae99bf9de2fdb2f80eeef1f71cc604845541d9d503f7bed
7
- data.tar.gz: 62e0c29f76f709c53b040260dee1e36dce9af4c8737822297ea9d1908b2c72ade763d236c36266c411ce8f7330fbf397d4f0877ac2d5fc80d9064c40920bcbee
6
+ metadata.gz: a691bf5414b2887f98052774c525e604fc3e74ed8fc51a1bec2a6beb3c2dbbf8a1aecc4161a9bd6a8e85bca9f34e307f2043df1bb819a5b8ff9c206adb2e4aa6
7
+ data.tar.gz: f83a4a4ce3340807aa2a1f0e47056bc1438a2504862538935eed6ef0010a9f2da01004e95b0c5f132c23190b01b0ad07f3e238859ecd00d5e3166741665537d4
@@ -0,0 +1,26 @@
1
+ name: CI
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ strategy:
6
+ matrix:
7
+ ruby: [jruby, 2.3, 2.4, 2.5, 2.6, 2.7]
8
+ os: [ubuntu-latest, macos-latest, windows-latest]
9
+ runs-on: ${{ matrix.os }}
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v2
13
+ - name: Set up Ruby
14
+ uses: ruby/setup-ruby@v1
15
+ with:
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
+ - name: Build
24
+ run: bundle install --jobs 4 --retry 3
25
+ - name: Test
26
+ run: bundle exec rake test
@@ -1,5 +1,17 @@
1
1
  = Asciimath Changelog
2
2
 
3
+ == 2.0.2
4
+
5
+ Enhancements::
6
+
7
+ * Issue #51: generate `accent` and `accentunder` attributes on `munder`, `mover`, and `munderover` tags when appropriate
8
+ * Issue #52: map `phi` to U+03D5 and `varphi` to U+03C6 by default.
9
+ * Issue #53: Add support for Roman style font command `rm`.
10
+
11
+ Bug fixes::
12
+
13
+ * Issue #50: fix parsing error when unary and binary operators are missing an operand
14
+
3
15
  == 2.0.1
4
16
 
5
17
  Enhancements::
@@ -1,4 +1,5 @@
1
1
  # AsciiMath
2
+ :uri-project: https://github.com/asciidoctor/asciimath
2
3
  ifndef::env-site[:status:]
3
4
 
4
5
  An http://asciimath.org[AsciiMath] parser and MathML/LaTeX generator written in pure Ruby.
@@ -7,7 +8,7 @@ ifdef::status[]
7
8
  [discrete]
8
9
  ## Status
9
10
 
10
- image:https://travis-ci.org/pepijnve/asciimath.svg?branch=master["Linux Build Status", link="https://travis-ci.org/asciidoctor/asciimath"]
11
+ image:{uri-project}/workflows/CI/badge.svg?branch=master["Build Status", link={uri-project}/actions?query=branch%3Amaster]
11
12
  image:https://img.shields.io/gem/v/asciimath.svg?label=gem%20version[Gem Version, link=https://rubygems.org/gems/asciimath]
12
13
  endif::status[]
13
14
 
@@ -21,7 +21,7 @@ AsciiMath::Parser::DEFAULT_PARSER_SYMBOL_TABLE.each_pair do |asciimath, value|
21
21
  next
22
22
  end
23
23
 
24
- mathml = AsciiMath::MathMLBuilder::DEFAULT_DISPLAY_SYMBOL_TABLE[sym]
24
+ mathml = AsciiMath::MathMLBuilder.default_display_symbol_table[sym]
25
25
 
26
26
  if mathml
27
27
  val = mathml[:value]
@@ -4,7 +4,7 @@ module AsciiMath
4
4
  class HTMLBuilder < ::AsciiMath::MarkupBuilder
5
5
 
6
6
  def initialize(opts = {})
7
- super(opts[:symbol_table] || DEFAULT_DISPLAY_SYMBOL_TABLE)
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
10
  @html = ''
@@ -96,6 +96,7 @@ module AsciiMath
96
96
  :bold_sans_serif => "\\mathsf",
97
97
  :sans_serif_italic => "\\mathsf",
98
98
  :sans_serif_bold_italic => "\\mathsf",
99
+ :roman => "\\mathrm",
99
100
  }.freeze
100
101
 
101
102
  private
@@ -244,8 +245,6 @@ module AsciiMath
244
245
  end
245
246
 
246
247
  when AsciiMath::AST::Matrix
247
- len = expression.length - 1
248
-
249
248
  parens(expression.lparen, expression.rparen) do
250
249
  c = expression.length
251
250
  @latex << "\\begin{matrix} "
@@ -4,7 +4,7 @@ require_relative 'symbol_table'
4
4
  module AsciiMath
5
5
  class MarkupBuilder
6
6
  # Operation symbols
7
- def self.add_default_display_symbols(b)
7
+ def self.add_default_display_symbols(b, fix_phi: true)
8
8
  b.add(:plus, '+', :operator)
9
9
  b.add(:minus, "\u2212", :operator)
10
10
  b.add(:cdot, "\u22C5", :operator)
@@ -221,6 +221,7 @@ module AsciiMath
221
221
  b.add(:bold_sans_serif, :bold_sans_serif, :font)
222
222
  b.add(:sans_serif_italic, :sans_serif_italic, :font)
223
223
  b.add(:sans_serif_bold_italic, :sans_serif_bold_italic, :font)
224
+ b.add(:roman, :normal, :font)
224
225
 
225
226
  # Greek letters
226
227
  b.add(:alpha, "\u03b1", :identifier)
@@ -265,9 +266,14 @@ module AsciiMath
265
266
  b.add(:Tau, "\u03a4", :identifier)
266
267
  b.add(:upsilon, "\u03c5", :identifier)
267
268
  b.add(:Upsilon, "\u03a5", :identifier)
268
- b.add(:phi, "\u03c6", :identifier)
269
+ if fix_phi
270
+ b.add(:phi, "\u03d5", :identifier)
271
+ b.add(:varphi, "\u03c6", :identifier)
272
+ else
273
+ b.add(:phi, "\u03c6", :identifier)
274
+ b.add(:varphi, "\u03d5", :identifier)
275
+ end
269
276
  b.add(:Phi, "\u03a6", :identifier)
270
- b.add(:varphi, "\u03d5", :identifier)
271
277
  b.add(:chi, "\u03c7", :identifier)
272
278
  b.add(:Chi, "\u03a7", :identifier)
273
279
  b.add(:psi, "\u03c8", :identifier)
@@ -278,7 +284,18 @@ module AsciiMath
278
284
  b
279
285
  end
280
286
 
281
- DEFAULT_DISPLAY_SYMBOL_TABLE = ::AsciiMath::MarkupBuilder.add_default_display_symbols(AsciiMath::SymbolTableBuilder.new).build
287
+ private
288
+ DEFAULT_SYMBOL_TABLE = ::AsciiMath::MarkupBuilder.add_default_display_symbols(AsciiMath::SymbolTableBuilder.new, fix_phi: false).build
289
+ DEFAULT_SYMBOL_TABLE_FIX_PHI = ::AsciiMath::MarkupBuilder.add_default_display_symbols(AsciiMath::SymbolTableBuilder.new, fix_phi: true).build
290
+
291
+ public
292
+ def self.default_display_symbol_table(fix_phi: true)
293
+ if fix_phi
294
+ DEFAULT_SYMBOL_TABLE_FIX_PHI
295
+ else
296
+ DEFAULT_SYMBOL_TABLE
297
+ end
298
+ end
282
299
 
283
300
  def initialize(symbol_table)
284
301
  @symbol_table = symbol_table
@@ -475,5 +492,10 @@ module AsciiMath
475
492
  nil
476
493
  end
477
494
  end
495
+
496
+ def is_accent(node)
497
+ resolved = resolve_symbol(node)
498
+ !resolved.nil? && resolved[:type] == :accent
499
+ end
478
500
  end
479
501
  end
@@ -5,7 +5,7 @@ module AsciiMath
5
5
  class MathMLBuilder < ::AsciiMath::MarkupBuilder
6
6
 
7
7
  def initialize(opts = {})
8
- super(opts[:symbol_table] || DEFAULT_DISPLAY_SYMBOL_TABLE)
8
+ super(opts[:symbol_table] || ::AsciiMath::MarkupBuilder.default_display_symbol_table(fix_phi: opts.fetch(:fix_phi, true)))
9
9
  @prefix = opts[:prefix] || ''
10
10
  @mathml = ''
11
11
  if opts[:msword]
@@ -149,21 +149,37 @@ module AsciiMath
149
149
  end
150
150
 
151
151
  def append_underover(base, sub, sup)
152
+ attrs = {}
153
+
154
+ sub_row_mode = @row_mode
155
+ if is_accent(sub)
156
+ attrs[:accentunder] = true
157
+ sub_row_mode = :avoid
158
+ end
159
+
160
+ sup_row_mode = @row_mode
161
+ if is_accent(sup)
162
+ attrs[:accent] = true
163
+ sup_row_mode = :avoid
164
+ end
165
+
166
+
167
+
152
168
  if sub && sup
153
- munderover do
169
+ munderover(attrs) do
154
170
  append(base, :row => @row_mode)
155
- append(sub, :row => @row_mode)
156
- append(sup, :row => @row_mode)
171
+ append(sub, :row => sub_row_mode)
172
+ append(sup, :row => sup_row_mode)
157
173
  end
158
174
  elsif sub
159
- munder do
175
+ munder(attrs) do
160
176
  append(base, :row => @row_mode)
161
- append(sub, :row => @row_mode)
177
+ append(sub, :row => sub_row_mode)
162
178
  end
163
179
  elsif sup
164
- mover do
180
+ mover(attrs) do
165
181
  append(base, :row => @row_mode)
166
- append(sup, :row => @row_mode)
182
+ append(sup, :row => sup_row_mode)
167
183
  end
168
184
  else
169
185
  append(base)
@@ -441,6 +441,7 @@ module AsciiMath
441
441
  b.add('bsf', :bold_sans_serif, :unary)
442
442
  b.add('sfi', :sans_serif_italic, :unary)
443
443
  b.add('sfbi', :sans_serif_bold_italic, :unary)
444
+ b.add('rm', :roman, :unary)
444
445
 
445
446
  # Greek letters
446
447
  b.add('alpha', :alpha, :symbol)
@@ -612,12 +613,16 @@ module AsciiMath
612
613
  token_to_symbol(t1)
613
614
  end
614
615
  when :unary
615
- s = unwrap_paren(parse_simple_expression(tok, depth))
616
+ parse_simple_expression = parse_simple_expression(tok, depth)
617
+ s = unwrap_paren(parse_simple_expression)
618
+ s = identifier('') if s.nil?
616
619
  s = convert_node(s, t1[:convert_operand])
617
620
  unary(token_to_symbol(t1), s)
618
621
  when :binary
619
622
  s1 = unwrap_paren(parse_simple_expression(tok, depth))
623
+ s1 = identifier('') if s1.nil?
620
624
  s2 = unwrap_paren(parse_simple_expression(tok, depth))
625
+ s2 = identifier('') if s2.nil?
621
626
 
622
627
  s1 = convert_node(s1, t1[:convert_operand1])
623
628
  s2 = convert_node(s2, t1[:convert_operand2])
@@ -704,7 +709,6 @@ module AsciiMath
704
709
  def convert_to_color(color_expression)
705
710
  s = ""
706
711
  append_color_text(s, color_expression)
707
- s
708
712
 
709
713
  case s
710
714
  when /#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i
@@ -1,3 +1,3 @@
1
1
  module AsciiMath
2
- VERSION = "2.0.1"
2
+ VERSION = "2.0.2"
3
3
  end
@@ -74,8 +74,8 @@ RSpec.shared_examples 'AsciiMath Examples' do
74
74
  'j',
75
75
  sub(symbol('vartheta'), '0')
76
76
  ),
77
- :mathml => '<math><munder><mover><mi>A</mi><mo>^</mo></mover><mo>_</mo></munder><mo>=</mo><mover><mi>A</mi><mo>^</mo></mover><mi>exp</mi><mi>j</mi><msub><mi>&#x3D1;</mi><mn>0</mn></msub></math>',
78
- :mathml_word => '<math><munder><mrow><mover><mrow><mi>A</mi></mrow><mrow><mo>^</mo></mrow></mover></mrow><mrow><mo>_</mo></mrow></munder><mo>=</mo><mover><mrow><mi>A</mi></mrow><mrow><mo>^</mo></mrow></mover><mi>exp</mi><mi>j</mi><msub><mrow><mi>&#x3D1;</mi></mrow><mrow><mn>0</mn></mrow></msub></math>',
77
+ :mathml => '<math><munder><mover accent="true"><mi>A</mi><mo>^</mo></mover><mo>_</mo></munder><mo>=</mo><mover accent="true"><mi>A</mi><mo>^</mo></mover><mi>exp</mi><mi>j</mi><msub><mi>&#x3D1;</mi><mn>0</mn></msub></math>',
78
+ :mathml_word => '<math><munder><mrow><mover accent="true"><mrow><mi>A</mi></mrow><mo>^</mo></mover></mrow><mrow><mo>_</mo></mrow></munder><mo>=</mo><mover accent="true"><mrow><mi>A</mi></mrow><mo>^</mo></mover><mi>exp</mi><mi>j</mi><msub><mrow><mi>&#x3D1;</mi></mrow><mrow><mn>0</mn></mrow></msub></math>',
79
79
  :latex => '\\underset{\\text{–}}{\\hat{A}} = \\hat{A} \\exp j \\vartheta_0'
80
80
  ))
81
81
 
@@ -272,7 +272,7 @@ RSpec.shared_examples 'AsciiMath Examples' do
272
272
  unary(symbol('ul'), group('A')),
273
273
  unary(symbol('vec'), group('v')),
274
274
  ),
275
- :mathml => '<math><mover><mrow><mi>a</mi><mi>b</mi></mrow><mo>^</mo></mover><mover><mrow><mi>x</mi><mi>y</mi></mrow><mo>&#xAF;</mo></mover><munder><mi>A</mi><mo>_</mo></munder><mover><mi>v</mi><mo>&#x2192;</mo></mover></math>',
275
+ :mathml => '<math><mover accent="true"><mrow><mi>a</mi><mi>b</mi></mrow><mo>^</mo></mover><mover accent="true"><mrow><mi>x</mi><mi>y</mi></mrow><mo>&#xAF;</mo></mover><munder accentunder="true"><mi>A</mi><mo>_</mo></munder><mover accent="true"><mi>v</mi><mo>&#x2192;</mo></mover></math>',
276
276
  :html => '<span class="math-inline"><span class="math-blank">&#x200D;</span><span class="math-underover"><span class="math-smaller"><span class="math-operator">^</span></span><span class="math-row"><span class="math-identifier">a</span><span class="math-identifier">b</span></span><span class="math-smaller"><span class="math-blank">&#x200D;</span></span></span><span class="math-blank">&#x200D;</span><span class="math-underover"><span class="math-smaller"><span class="math-operator">&#xAF;</span></span><span class="math-row"><span class="math-identifier">x</span><span class="math-identifier">y</span></span><span class="math-smaller"><span class="math-blank">&#x200D;</span></span></span><span class="math-blank">&#x200D;</span><span class="math-underover"><span class="math-smaller"><span class="math-blank">&#x200D;</span></span><span class="math-identifier">A</span><span class="math-smaller"><span class="math-operator">_</span></span></span><span class="math-blank">&#x200D;</span><span class="math-underover"><span class="math-smaller"><span class="math-operator">&#x2192;</span></span><span class="math-identifier">v</span><span class="math-smaller"><span class="math-blank">&#x200D;</span></span></span></span>',
277
277
  :latex => '\\hat{a b} \\overline{x y} \\underline{A} \\vec{v}',
278
278
  ))
@@ -418,7 +418,7 @@ RSpec.shared_examples 'AsciiMath Examples' do
418
418
  unary(symbol('ubrace'), grseq('1', symbol('+'), '2')),
419
419
  unary(symbol('obrace'), group(symbol('('), seq('3', symbol('+'), '4'), nil))
420
420
  ),
421
- :mathml => '<math><munder><mrow><mn>1</mn><mo>+</mo><mn>2</mn></mrow><mo>&#x23DF;</mo></munder><mover><mrow><mn>3</mn><mo>+</mo><mn>4</mn></mrow><mo>&#x23DE;</mo></mover></math>',
421
+ :mathml => '<math><munder accentunder="true"><mrow><mn>1</mn><mo>+</mo><mn>2</mn></mrow><mo>&#x23DF;</mo></munder><mover accent="true"><mrow><mn>3</mn><mo>+</mo><mn>4</mn></mrow><mo>&#x23DE;</mo></mover></math>',
422
422
  :latex => '\\underbrace{1 + 2} \\overbrace{3 + 4}',
423
423
  ))
424
424
 
@@ -519,7 +519,7 @@ RSpec.shared_examples 'AsciiMath Examples' do
519
519
 
520
520
  example('overarc a_b^c', &should_generate(
521
521
  :ast => subsup(unary(symbol('overarc'), 'a'), 'b', 'c'),
522
- :mathml => '<math><msubsup><mover><mi>a</mi><mo>&#x23DC;</mo></mover><mi>b</mi><mi>c</mi></msubsup></math>',
522
+ :mathml => '<math><msubsup><mover accent="true"><mi>a</mi><mo>&#x23DC;</mo></mover><mi>b</mi><mi>c</mi></msubsup></math>',
523
523
  :latex => '{\\overset{\\frown}{a}}_b^c'
524
524
  ))
525
525
 
@@ -572,6 +572,21 @@ RSpec.shared_examples 'AsciiMath Examples' do
572
572
  :latex => '\\left \\{ x \\; : \\; x \\in A \\wedge x \\in B \\right \\}',
573
573
  ))
574
574
 
575
+ example('ii', &should_generate(
576
+ :ast => unary(symbol('ii'), identifier('')),
577
+ :mathml => '<math><mstyle mathvariant="italic"><mi></mi></mstyle></math>'
578
+ ))
579
+
580
+ example('rm(ms)', &should_generate(
581
+ :ast => unary(symbol('rm'), grseq(identifier('m'), identifier('s'))),
582
+ :mathml => '<math><mstyle mathvariant="normal"><mrow><mi>m</mi><mi>s</mi></mrow></mstyle></math>'
583
+ ))
584
+
585
+ example('hat', &should_generate(
586
+ :ast => unary(symbol('hat'), identifier('')),
587
+ :mathml => '<math><mover accent="true"><mi></mi><mo>^</mo></mover></math>'
588
+ ))
589
+
575
590
  version = RUBY_VERSION.split('.').map { |s| s.to_i }
576
591
 
577
592
  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.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pepijn Van Eeckhoudt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-06-29 00:00:00.000000000 Z
12
+ date: 2020-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -76,8 +76,8 @@ executables:
76
76
  extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
+ - ".github/workflows/ci.yml"
79
80
  - ".gitignore"
80
- - ".travis.yml"
81
81
  - AST.adoc
82
82
  - CHANGELOG.adoc
83
83
  - Gemfile
@@ -156,8 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
158
  requirements: []
159
- rubyforge_project:
160
- rubygems_version: 2.7.6
159
+ rubygems_version: 3.0.3
161
160
  signing_key:
162
161
  specification_version: 4
163
162
  summary: AsciiMath parser and converter
@@ -1,16 +0,0 @@
1
- language: ruby
2
- cache:
3
- apt: true
4
- directories:
5
- - vendor/bundle
6
- - $HOME/.cache/pip
7
- rvm:
8
- - 2.3
9
- - 2.4
10
- - 2.5
11
- - jruby
12
- - truffleruby
13
- before_install:
14
- - type bundle || gem install bundler --version '~> 1.0'
15
- install:
16
- - bundle install --path vendor/bundle --jobs=3 --retry=3