latexmath 0.1.0 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e3ecc01756ec040a67e70289d15cf757b15c1b4b6f656a887ef991c15ae3852
4
- data.tar.gz: 46341cdd12a8b4e84bbe14b69c1eae6b66eaa5e136c07bd55fae628fbcf028ac
3
+ metadata.gz: 3dd210bb97aa808bf1bee45d595148730fd1e324917a7fe402c05dcda243357e
4
+ data.tar.gz: 2bf325bde0a31dee92da668bd985d11cbc43424aeb1a3e94397ffbe7b6803a95
5
5
  SHA512:
6
- metadata.gz: 2f67278c0fe3acbacd04e3ba8449fbcb77f75d46f36d5268db8dd42e971fadbf47dabeb4fe1197d0e2b50517e55b0c6db4d37916bdf6267e76bb7fa100dcd535
7
- data.tar.gz: 845366028db2233749cc57f5a18fb5b842953c4426b12e80b416bc0701ec70e3127b030b27de7491f80ff2c9ad233af4407de208a4e92df69e7e2accf3e1e8e4
6
+ metadata.gz: d0ee9acb802192c32b47f22a8563964efd6640d8d606cd622e9f152dd46fd4f1fbe7d2c017aa8f1cc0e769e3b69d20b3e111946be67faed4420f45a519078053
7
+ data.tar.gz: e3cf465915d734f68290aecb7d9b1c9747b9b8202b5c673536899f97356e0fef341428950c31782b228209e4ea4eeb06cb5e87a2b925478a3e05fbee4261f6b9
@@ -0,0 +1,14 @@
1
+ # editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ charset = utf-8
7
+ end_of_line = lf
8
+ indent_size = 2
9
+ indent_style = space
10
+ insert_final_newline = true
11
+ trim_trailing_whitespace = true
12
+
13
+ [*.md]
14
+ trim_trailing_whitespace = false
@@ -0,0 +1,80 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+
8
+ jobs:
9
+ build:
10
+ name: Run specs on ${{ matrix.os }} ruby ${{ matrix.ruby }}
11
+ runs-on: ${{ matrix.os }}
12
+ continue-on-error: ${{ matrix.experimental }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-latest, macos-latest, windows-latest]
17
+ ruby: ['2.6', '2.5', '2.4']
18
+ experimental: [false]
19
+ include:
20
+ - ruby: '2.7'
21
+ os: ubuntu-latest
22
+ experimental: true
23
+ - ruby: '2.7'
24
+ os: macos-latest
25
+ experimental: true
26
+ - ruby: '2.7'
27
+ os: windows-latest
28
+ experimental: true
29
+
30
+ steps:
31
+ - name: Use Ruby
32
+ uses: actions/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+
36
+ - uses: actions/checkout@master
37
+
38
+ - name: Install gems
39
+ run: |
40
+ gem install bundler -v "~> 2"
41
+ bundle install --jobs 4 --retry 5
42
+
43
+ - name: Install LaTeXML on Ubuntu
44
+ if: matrix.os == 'ubuntu-latest'
45
+ run: |
46
+ sudo snap install latexml --edge
47
+ echo "::add-path::/snap/bin"
48
+
49
+ - name: Install LaTeXML on macOS
50
+ if: matrix.os == 'macos-latest'
51
+ run: |
52
+ brew install libxml2 cpanminus
53
+ env PATH=$(brew --prefix libxml2)/bin:$PATH \
54
+ cpanm --notest XML::LibXSLT@1.96 git://github.com/brucemiller/LaTeXML.git@9a0e7dc5
55
+
56
+ - name: Install LaTeXML on Windows
57
+ if: matrix.os == 'windows-latest'
58
+ shell: cmd
59
+ run: |
60
+ cinst -y latexml
61
+ refreshenv
62
+ set PATH=C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;%PATH%
63
+ where latexmlmath
64
+
65
+ - name: Run RSpecs
66
+ if: matrix.os == 'ubuntu-latest'
67
+ run: |
68
+ bundle exec rake
69
+
70
+ - name: Run RSpecs
71
+ if: matrix.os == 'macos-latest'
72
+ run: |
73
+ env PATH=$(brew --prefix perl)/bin:$PATH bundle exec rake
74
+
75
+ - name: Run specs
76
+ if: matrix.os == 'windows-latest'
77
+ shell: pwsh
78
+ run: |
79
+ $env:Path = "C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;$env:Path"
80
+ bundle exec rake
data/.gitignore CHANGED
@@ -7,5 +7,16 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
 
10
+ # ignore generated file via Rakefile
11
+ #/lib/latexmath/constants/symbols.rb
12
+
10
13
  # rspec failure tracking
11
14
  .rspec_status
15
+
16
+ # ignore byebug history
17
+ .byebug_history
18
+
19
+ # ignore MacOS system file
20
+ .DS_Store
21
+
22
+ /dist/
@@ -0,0 +1,129 @@
1
+ Layout/EndAlignment:
2
+ Exclude:
3
+ - 'lib/latexmath/converter.rb'
4
+ - 'lib/latexmath/tokenizer.rb'
5
+
6
+ # Offense count: 1
7
+ # Configuration parameters: AllowSafeAssignment.
8
+ Lint/AssignmentInCondition:
9
+ Exclude:
10
+ - 'lib/latexmath/tokenizer.rb'
11
+
12
+ # Offense count: 2
13
+ Lint/ImplicitStringConcatenation:
14
+ Exclude:
15
+ - 'spec/tokenizer_spec.rb'
16
+
17
+ # Offense count: 1
18
+ # Configuration parameters: AllowKeywordBlockArguments.
19
+ Lint/UnderscorePrefixedVariableName:
20
+ Exclude:
21
+ - 'lib/latexmath/converter.rb'
22
+
23
+ # Offense count: 2
24
+ Lint/UselessAssignment:
25
+ Exclude:
26
+ - 'lib/latexmath/converter.rb'
27
+
28
+ # Offense count: 7
29
+ # Configuration parameters: IgnoredMethods.
30
+ Metrics/AbcSize:
31
+ Max: 32
32
+
33
+ # Offense count: 1
34
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
35
+ # ExcludedMethods: refine
36
+ Metrics/BlockLength:
37
+ Max: 35
38
+
39
+ # Offense count: 1
40
+ # Configuration parameters: CountBlocks.
41
+ Metrics/BlockNesting:
42
+ Max: 4
43
+
44
+ # Offense count: 1
45
+ # Configuration parameters: CountComments, CountAsOne.
46
+ Metrics/ClassLength:
47
+ Max: 157
48
+
49
+ # Offense count: 6
50
+ # Configuration parameters: IgnoredMethods.
51
+ Metrics/CyclomaticComplexity:
52
+ Max: 13
53
+
54
+ # Offense count: 9
55
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
56
+ Metrics/MethodLength:
57
+ Max: 39
58
+
59
+ # Offense count: 6
60
+ # Configuration parameters: IgnoredMethods.
61
+ Metrics/PerceivedComplexity:
62
+ Max: 14
63
+
64
+ # Offense count: 1
65
+ Naming/ConstantName:
66
+ Exclude:
67
+ - 'lib/latexmath.rb'
68
+
69
+ # Offense count: 2
70
+ # Cop supports --auto-correct.
71
+ # Configuration parameters: AutoCorrect, EnforcedStyle.
72
+ # SupportedStyles: nested, compact
73
+ Style/ClassAndModuleChildren:
74
+ Exclude:
75
+ - 'lib/latexmath/xml/builder.rb'
76
+ - 'lib/latexmath/xml/element.rb'
77
+
78
+ # Offense count: 7
79
+ Style/Documentation:
80
+ Exclude:
81
+ - 'spec/**/*'
82
+ - 'test/**/*'
83
+ - 'lib/latexmath.rb'
84
+ - 'lib/latexmath/aggregator.rb'
85
+ - 'lib/latexmath/converter.rb'
86
+ - 'lib/latexmath/equation.rb'
87
+ - 'lib/latexmath/tokenizer.rb'
88
+
89
+ # Offense count: 18
90
+ # Cop supports --auto-correct.
91
+ # Configuration parameters: EnforcedStyle.
92
+ # SupportedStyles: always, always_true, never
93
+ Style/FrozenStringLiteralComment:
94
+ Enabled: false
95
+
96
+ # Offense count: 2
97
+ # Configuration parameters: MinBodyLength.
98
+ Style/GuardClause:
99
+ Exclude:
100
+ - 'lib/latexmath/aggregator.rb'
101
+
102
+ # Offense count: 5
103
+ Style/IdenticalConditionalBranches:
104
+ Exclude:
105
+ - 'lib/latexmath/converter.rb'
106
+
107
+ # Offense count: 1
108
+ # Cop supports --auto-correct.
109
+ Style/LineEndConcatenation:
110
+ Exclude:
111
+ - 'spec/tokenizer_spec.rb'
112
+
113
+ # Offense count: 5
114
+ # Cop supports --auto-correct.
115
+ # Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
116
+ # SupportedStyles: predicate, comparison
117
+ Style/NumericPredicate:
118
+ Exclude:
119
+ - 'spec/**/*'
120
+ - 'lib/latexmath/aggregator.rb'
121
+ - 'lib/latexmath/converter.rb'
122
+
123
+ # Offense count: 2
124
+ # Cop supports --auto-correct.
125
+ Style/ZeroLengthPredicate:
126
+ Exclude:
127
+ - 'lib/latexmath/converter.rb'
128
+
129
+
data/Gemfile CHANGED
@@ -1,7 +1,10 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in latexmath.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
6
+ gem 'byebug'
7
+ gem 'pry'
8
+ gem 'rake', '~> 12.0'
9
+ gem 'rspec', '~> 3.0'
10
+ gem 'rubocop'
@@ -1,16 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- latexmath (0.1.0)
4
+ latexmath (0.1.5)
5
5
  htmlentities (~> 4.3)
6
- unicode2latex (~> 0.0.1)
6
+ ox (~> 2.13)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
+ ast (2.4.1)
12
+ byebug (11.1.3)
13
+ coderay (1.1.3)
11
14
  diff-lcs (1.4.4)
15
+ equivalent-xml (0.6.0)
16
+ nokogiri (>= 1.4.3)
17
+ execjs (2.7.0)
12
18
  htmlentities (4.3.4)
19
+ method_source (1.0.0)
20
+ mini_portile2 (2.4.0)
21
+ nokogiri (1.10.10)
22
+ mini_portile2 (~> 2.4.0)
23
+ opal (1.0.3)
24
+ ast (>= 2.3.0)
25
+ parser (~> 2.6)
26
+ ox (2.13.3)
27
+ parallel (1.19.2)
28
+ parser (2.7.1.4)
29
+ ast (~> 2.4.1)
30
+ pry (0.13.1)
31
+ coderay (~> 1.1)
32
+ method_source (~> 1.0)
33
+ rainbow (3.0.0)
13
34
  rake (12.3.3)
35
+ regexp_parser (1.7.1)
36
+ rexml (3.2.4)
14
37
  rspec (3.9.0)
15
38
  rspec-core (~> 3.9.0)
16
39
  rspec-expectations (~> 3.9.0)
@@ -24,15 +47,33 @@ GEM
24
47
  diff-lcs (>= 1.2.0, < 2.0)
25
48
  rspec-support (~> 3.9.0)
26
49
  rspec-support (3.9.3)
27
- unicode2latex (0.0.4)
50
+ rubocop (0.90.0)
51
+ parallel (~> 1.10)
52
+ parser (>= 2.7.1.1)
53
+ rainbow (>= 2.2.2, < 4.0)
54
+ regexp_parser (>= 1.7)
55
+ rexml
56
+ rubocop-ast (>= 0.3.0, < 1.0)
57
+ ruby-progressbar (~> 1.7)
58
+ unicode-display_width (>= 1.4.0, < 2.0)
59
+ rubocop-ast (0.3.0)
60
+ parser (>= 2.7.1.4)
61
+ ruby-progressbar (1.10.1)
62
+ unicode-display_width (1.7.0)
28
63
 
29
64
  PLATFORMS
30
65
  ruby
31
66
 
32
67
  DEPENDENCIES
68
+ byebug
69
+ equivalent-xml
70
+ execjs
33
71
  latexmath!
72
+ opal
73
+ pry
34
74
  rake (~> 12.0)
35
75
  rspec (~> 3.0)
76
+ rubocop
36
77
 
37
78
  BUNDLED WITH
38
79
  2.1.4
@@ -0,0 +1,28 @@
1
+ = latexmath
2
+
3
+ image:https://img.shields.io/gem/v/latexmath.svg["Gem Version", link="https://rubygems.org/gems/latexmath"]
4
+ image:https://github.com/metanorma/latexmath/workflows/test/badge.svg["Build Status", link="https://github.com/metanorma/latexmath/actions?workflow=test"]
5
+ image:https://codeclimate.com/github/metanorma/latexmath/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/latexmath"]
6
+ image:https://img.shields.io/github/issues-pr-raw/metanorma/latexmath.svg["Pull Requests", link="https://github.com/metanorma/latexmath/pulls"]
7
+ image:https://img.shields.io/github/commits-since/metanorma/latexmath/latest.svg["Commits since latest",link="https://github.com/metanorma/latexmath/releases"]
8
+
9
+ == Purpose
10
+
11
+ Ruby gem to translate LaTeX math into MathML.
12
+ The MathML is supposed to be compliant with output of LaTeXML.
13
+
14
+ It also works in reverse by translating MathML into LaTeX code.
15
+
16
+ The LaTeX math syntax supports `amsmath`, `array`, `split` and `pmatrix` packages.
17
+
18
+ NOTE: Bolding, symbols like `\backepsilon`, equation alignment, are all supported.
19
+
20
+ == Usage
21
+
22
+ [source,ruby]
23
+ -------------
24
+ require "latexmath"
25
+
26
+ latex = "$$f_i = \sum_{j=1}^2 s_{ij} n_j \quad {\rm for} \quad i = 1,2$$"
27
+ mathml = Latexmath.parse(latex).to_mathml
28
+ -------------
data/Rakefile CHANGED
@@ -1,6 +1,95 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task 'build-opal' do
7
+ require 'opal'
8
+ require 'erb'
9
+ require 'json'
10
+
11
+ b = Opal::Builder.new
12
+
13
+ b.append_paths __dir__ + '/lib'
14
+ b.append_paths __dir__ + '/opal'
15
+ b.use_gem 'htmlentities'
16
+
17
+ build = b.build('latexmath-opal').to_s
18
+ # This is a hack intended for ExecJS to work properly.
19
+ build = build.gsub('Object freezing is not supported by Opal', '')
20
+
21
+ FileUtils.mkdir_p 'dist'
22
+ File.write('dist/latexmath.js', build)
23
+ end
24
+
25
+ task 'spec-opal' => 'build-opal' do
26
+ ENV['TEST_OPAL'] = '1'
27
+ Rake::Task['spec'].execute
28
+ ENV.delete 'TEST_OPAL'
29
+ end
30
+
31
+ def read_symbols(input)
32
+ @symbols = {}
33
+ File.readlines(input).each do |line|
34
+ next if line.start_with?('#')
35
+
36
+ columns = line.chop.split('^')
37
+ _unicode = columns[0]
38
+ latex = columns[2]
39
+ unicode_math = columns[3]
40
+
41
+ @symbols[latex] = _unicode if latex && !@symbols.include?(latex)
42
+ @symbols[unicode_math] = _unicode if unicode_math && !@symbols.include?(unicode_math)
43
+
44
+ matches = columns[-1].match(/=\s+(\\[^,^ ]+),?/)
45
+ if matches
46
+ @symbols[matches[1]] = _unicode unless @symbols[matches[1]]
47
+ end
48
+ end
49
+ @symbols
50
+ end
51
+
52
+ directory 'lib/latexmath/constants'
53
+ file 'lib/latexmath/constants/symbols.rb' => [
54
+ 'lib/latexmath/constants',
55
+ 'lib/unimathsymbols.txt'
56
+ ] do |file|
57
+ symbols = read_symbols(file.prerequisites.last)
58
+
59
+ File.open(file.name, "w+") do |f|
60
+ f.puts <<~HERE
61
+ module Latexmath
62
+ module Constants
63
+ SYMBOLS = {
64
+ HERE
65
+
66
+ @symbols.each_pair do |k,v|
67
+ f.puts(" '#{k.to_s}' => '#{v}',")
68
+ end
69
+
70
+ f.puts <<~HERE
71
+ }.freeze
72
+ end
73
+ end
74
+ HERE
75
+ end
76
+ end
77
+
78
+ Rake::Task['build'].enhance ['lib/latexmath/constants/symbols.rb']
79
+ Rake::Task[:spec].enhance ['lib/latexmath/constants/symbols.rb']
80
+
81
+ desc 'Generate and write MathML fixtures'
82
+ task 'create-mathml-fixtures' do
83
+ require_relative 'lib/latexmath'
84
+ records = Dir.glob('spec/fixtures/*/*.tex')
85
+
86
+ records.each do |file|
87
+ tex = File.read("./#{file}")
88
+ tokens = Latexmath::Tokenizer.new(tex).tokenize
89
+ aggr = Latexmath::Aggregator.new(tokens).aggregate
90
+
91
+ File.write("./#{file.chomp('.tex')}.html", Latexmath::Converter.new(aggr).convert)
92
+ end
93
+ end
94
+
95
+ task default: [:spec, 'spec-opal']