latexmath 0.1.3 → 0.1.4
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/.gitignore +3 -2
- data/.rubocop.yml +0 -3
- data/Gemfile.lock +1 -1
- data/Rakefile +64 -1
- data/lib/latexmath.rb +2 -6
- data/lib/latexmath/converter.rb +3 -0
- data/lib/latexmath/symbol.rb +1 -23
- data/lib/latexmath/tokenizer.rb +1 -3
- data/lib/latexmath/version.rb +1 -1
- data/lib/unimathsymbols.js.erb +3 -3
- metadata +5 -7
- data/lib/latexmath/latexml_requirement.rb +0 -83
- data/lib/latexmath/requirement.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e751a24bfc7b92e3df8e1af211b838f679acaa888236d34b12853f43614891e
|
4
|
+
data.tar.gz: 10f0770286d862f60da92690bc316a6f1926b1e11c95fe8f4249fe3a96a6e5bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e3ff4b0ca14dad864a356f98e4d9f805fcdc182b58359396963724f62d9f9da433249c0f2471b36503189fdf351fab4693ee916fb82e708a675568a0267cce9
|
7
|
+
data.tar.gz: e8b4bfd444e139005535f183769a8721a8b7bfea8ffde74c14028f4bd79398c0684dc0f2b515c353127eb8a4fd6df61b969e33d8c41b41451fe4abea56b85fab
|
data/.gitignore
CHANGED
@@ -7,6 +7,9 @@
|
|
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
|
12
15
|
|
@@ -16,6 +19,4 @@
|
|
16
19
|
# ignore MacOS system file
|
17
20
|
.DS_Store
|
18
21
|
|
19
|
-
*.tex.html
|
20
|
-
|
21
22
|
/dist/
|
data/.rubocop.yml
CHANGED
@@ -84,8 +84,6 @@ Style/Documentation:
|
|
84
84
|
- 'lib/latexmath/aggregator.rb'
|
85
85
|
- 'lib/latexmath/converter.rb'
|
86
86
|
- 'lib/latexmath/equation.rb'
|
87
|
-
- 'lib/latexmath/latexml_requirement.rb'
|
88
|
-
- 'lib/latexmath/requirement.rb'
|
89
87
|
- 'lib/latexmath/tokenizer.rb'
|
90
88
|
|
91
89
|
# Offense count: 18
|
@@ -121,7 +119,6 @@ Style/NumericPredicate:
|
|
121
119
|
- 'spec/**/*'
|
122
120
|
- 'lib/latexmath/aggregator.rb'
|
123
121
|
- 'lib/latexmath/converter.rb'
|
124
|
-
- 'lib/latexmath/latexml_requirement.rb'
|
125
122
|
|
126
123
|
# Offense count: 2
|
127
124
|
# Cop supports --auto-correct.
|
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'bundler/gem_tasks'
|
3
3
|
require 'rspec/core/rake_task'
|
4
|
-
|
5
4
|
RSpec::Core::RakeTask.new(:spec)
|
6
5
|
|
7
6
|
task 'build-opal' do
|
@@ -29,4 +28,68 @@ task 'spec-opal' => 'build-opal' do
|
|
29
28
|
ENV.delete 'TEST_OPAL'
|
30
29
|
end
|
31
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
|
+
|
32
95
|
task default: [:spec, 'spec-opal']
|
data/lib/latexmath.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'byebug' unless RUBY_ENGINE == 'opal'
|
1
|
+
#require 'byebug' unless RUBY_ENGINE == 'opal'
|
2
2
|
require 'json'
|
3
3
|
require 'htmlentities'
|
4
4
|
require 'ox'
|
5
5
|
require_relative 'latexmath/ext'
|
6
6
|
require_relative 'latexmath/version'
|
7
|
-
|
7
|
+
require_relative 'latexmath/constants/symbols'
|
8
8
|
require_relative 'latexmath/aggregator'
|
9
9
|
require_relative 'latexmath/converter'
|
10
10
|
require_relative 'latexmath/symbol'
|
@@ -77,10 +77,6 @@ module Latexmath
|
|
77
77
|
COMMANDS[limit] = [1, 'munder', {}]
|
78
78
|
end
|
79
79
|
|
80
|
-
Requirements = {
|
81
|
-
#latexml: LatexmlRequirement.new
|
82
|
-
}.freeze
|
83
|
-
|
84
80
|
def self.parse(string)
|
85
81
|
lxm_input = HTMLEntities.new.decode(string)
|
86
82
|
|
data/lib/latexmath/converter.rb
CHANGED
@@ -301,6 +301,9 @@ module Latexmath
|
|
301
301
|
if element == '_' && index == 1 && param == '\\sum'
|
302
302
|
new_parent.tag = 'munder'
|
303
303
|
classify(param, new_parent)
|
304
|
+
elsif element == '_^' && param == '\\sum'
|
305
|
+
new_parent.tag = 'munderover'
|
306
|
+
classify(param, new_parent)
|
304
307
|
elsif element == '\\left' || element == '\\right'
|
305
308
|
if param == '.'
|
306
309
|
|
data/lib/latexmath/symbol.rb
CHANGED
@@ -13,31 +13,9 @@ module Latexmath
|
|
13
13
|
require 'native'
|
14
14
|
@symbols ||= Native::Object.new(`globalThis.unimathsymbols`)
|
15
15
|
else
|
16
|
-
@symbols ||=
|
16
|
+
@symbols ||= Latexmath::Constants::SYMBOLS
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
private
|
21
|
-
|
22
|
-
def read_symbols
|
23
|
-
@symbols = {}
|
24
|
-
File.readlines(File.join(File.dirname(__FILE__), "..", 'unimathsymbols.txt')).each do |line|
|
25
|
-
next if line.start_with?('#')
|
26
|
-
|
27
|
-
columns = line.chop.split('^')
|
28
|
-
_unicode = columns[0]
|
29
|
-
latex = columns[2]
|
30
|
-
unicode_math = columns[3]
|
31
|
-
|
32
|
-
@symbols[latex] = _unicode if latex && !@symbols.include?(latex)
|
33
|
-
@symbols[unicode_math] = _unicode if unicode_math && !@symbols.include?(unicode_math)
|
34
|
-
|
35
|
-
matches = columns[-1].match(/=\s+(\\[^,^ ]+),?/)
|
36
|
-
if matches
|
37
|
-
@symbols[matches[1]] = _unicode unless @symbols[matches[1]]
|
38
|
-
end
|
39
|
-
end
|
40
|
-
@symbols
|
41
|
-
end
|
42
20
|
end
|
43
21
|
end
|
data/lib/latexmath/tokenizer.rb
CHANGED
data/lib/latexmath/version.rb
CHANGED
data/lib/unimathsymbols.js.erb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
<%# This preprocesses
|
2
|
-
<% require_relative 'lib/latexmath/
|
1
|
+
<%# This preprocesses Latexmath::SYMBOLS constant for Opal %>
|
2
|
+
<% require_relative 'lib/latexmath/constants/symbols' %>
|
3
3
|
|
4
|
-
globalThis.unimathsymbols = <%= Latexmath::
|
4
|
+
globalThis.unimathsymbols = <%= Latexmath::Constants::SYMBOLS.to_json %>;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: latexmath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: htmlentities
|
@@ -107,8 +107,6 @@ files:
|
|
107
107
|
- lib/latexmath/converter.rb
|
108
108
|
- lib/latexmath/equation.rb
|
109
109
|
- lib/latexmath/ext.rb
|
110
|
-
- lib/latexmath/latexml_requirement.rb
|
111
|
-
- lib/latexmath/requirement.rb
|
112
110
|
- lib/latexmath/symbol.rb
|
113
111
|
- lib/latexmath/tokenizer.rb
|
114
112
|
- lib/latexmath/version.rb
|
@@ -126,7 +124,7 @@ metadata:
|
|
126
124
|
homepage_uri: https://github.com/plurimath/latexmath
|
127
125
|
source_code_uri: https://github.com/plurimath/latexmath
|
128
126
|
changelog_uri: https://github.com/plurimath/latexmath/blob/master/CHANGELOG.md.
|
129
|
-
post_install_message:
|
127
|
+
post_install_message:
|
130
128
|
rdoc_options: []
|
131
129
|
require_paths:
|
132
130
|
- lib
|
@@ -142,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
140
|
version: '0'
|
143
141
|
requirements: []
|
144
142
|
rubygems_version: 3.0.3
|
145
|
-
signing_key:
|
143
|
+
signing_key:
|
146
144
|
specification_version: 4
|
147
145
|
summary: Converts LaTeX math into MathML.
|
148
146
|
test_files: []
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require_relative './requirement'
|
2
|
-
require 'open3'
|
3
|
-
|
4
|
-
module Latexmath
|
5
|
-
class LatexmlRequirement < Requirement
|
6
|
-
@recommended_version = '0.8.4'
|
7
|
-
@minimal_version = '0.8.0'
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
version_output, = Open3.capture2e('latexml --VERSION')
|
11
|
-
version = version_output&.match(/\d+(.\d+)*/)
|
12
|
-
puts version_output
|
13
|
-
if version.to_s.empty?
|
14
|
-
@error_message = 'LaTeXML is not available. (Or is PATH not setup properly?)'\
|
15
|
-
" You must upgrade/install LaTeXML to a version higher than `#{@recommended_version}`"
|
16
|
-
|
17
|
-
elsif Gem::Version.new(version) < Gem::Version.new(@minimal_version)
|
18
|
-
@error_message = "Minimal supported LaTeXML version is `#{@minimal_version}` "\
|
19
|
-
"Version `#{version}` found; recommended version is `#{@recommended_version}`"
|
20
|
-
|
21
|
-
elsif Gem::Version.new(version) < Gem::Version.new(@recommended_version)
|
22
|
-
version = 'unknown' if version.to_s.empty?
|
23
|
-
header_msg = "latexmlmath version `#{version}` below `#{@recommended_version}`!"
|
24
|
-
suggestion = if Gem.win_platform?
|
25
|
-
'cmd encoding is set to UTF-8 with `chcp 65001`'
|
26
|
-
else
|
27
|
-
'terminal encoding is set to UTF-8 with `export LANG=en_US.UTF-8`'
|
28
|
-
end
|
29
|
-
|
30
|
-
@error_message = "WARNING #{header_msg} Please sure that #{suggestion} command."
|
31
|
-
|
32
|
-
@cmd = 'latexmlmath --strict --preload=amsmath -- -'
|
33
|
-
@cmd2 = 'latexmlmath --strict -- -'
|
34
|
-
else
|
35
|
-
@cmd = 'latexmlmath --strict --preload=amsmath --inputencoding=UTF-8 -- -'
|
36
|
-
@cmd2 = 'latexmlmath --strict --inputencoding=UTF-8 -- -'
|
37
|
-
end
|
38
|
-
rescue StandardError
|
39
|
-
@error_message = 'LaTeXML is not available. (Or is PATH not setup properly?)'\
|
40
|
-
" You must upgrade/install LaTeXML to a version higher than `#{@recommended_version}`"
|
41
|
-
end
|
42
|
-
|
43
|
-
def satisfied(abort = false)
|
44
|
-
unless @error_message.nil?
|
45
|
-
if abort
|
46
|
-
abort @error_message
|
47
|
-
else
|
48
|
-
warn @error_message
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
@error_message.nil?
|
53
|
-
end
|
54
|
-
|
55
|
-
def cmd
|
56
|
-
abort @error_message unless @error_message.nil?
|
57
|
-
|
58
|
-
[@cmd, @cmd2]
|
59
|
-
end
|
60
|
-
|
61
|
-
def run(input, command)
|
62
|
-
puts command
|
63
|
-
IO.popen(command, 'r+', external_encoding: 'UTF-8') do |io|
|
64
|
-
io.write(input)
|
65
|
-
io.close_write
|
66
|
-
io.read
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def convert(input)
|
71
|
-
results = nil
|
72
|
-
cmd.each_with_index do |cmd, i|
|
73
|
-
warn "Retrying with #{cmd}" if i > 0
|
74
|
-
results = run(input, cmd)
|
75
|
-
if $CHILD_STATUS.to_i.zero?
|
76
|
-
warn 'Success!' if i > 0
|
77
|
-
break
|
78
|
-
end
|
79
|
-
end
|
80
|
-
$CHILD_STATUS.to_i.zero? ? results : nil
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|