sskatex 0.9.23 → 0.9.30
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/bin/sskatex +100 -0
- data/lib/sskatex.rb +25 -0
- data/test/block/det.html +1 -1
- data/test/span/det.html +1 -1
- data/test/test_all.rb +27 -11
- metadata +6 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0aa682c1169077ee4701f77c536650f1db74038c
|
|
4
|
+
data.tar.gz: 38a1fa30f7165ba0776b3794195f5c924a1231fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0f64c5fd9bee28b5757da65acb6de17126ab4a0de80f21eb8f9855f4a13ddcedb95651bd449e7f6740021a50e9c7632ef3a58e7d7a5a7117d19fdc22169a5483
|
|
7
|
+
data.tar.gz: 0ac7a07aa719ccc0f8ce46b600fd6a836222419e6dfb60d3d672463bdf46c9491b5101fa2a77b9d8f0a92c963ce5071d2ac949750d7e26d52044b6b88d336abd
|
data/bin/sskatex
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'safe_yaml'
|
|
4
|
+
require 'optparse'
|
|
5
|
+
require 'sskatex'
|
|
6
|
+
|
|
7
|
+
me = File.basename(__FILE__)
|
|
8
|
+
|
|
9
|
+
# Useful as Hash.merge argument
|
|
10
|
+
merge_dicts = lambda do |key, left_val, right_val|
|
|
11
|
+
if left_val.class == Hash and right_val.class == Hash
|
|
12
|
+
left_val.merge(right_val, &merge_dicts)
|
|
13
|
+
else
|
|
14
|
+
right_val
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
cmd_opts = {}
|
|
19
|
+
cfg_opts = {}
|
|
20
|
+
config_file = nil
|
|
21
|
+
display_mode = nil
|
|
22
|
+
OptionParser.new do |opts|
|
|
23
|
+
opts.banner = <<USAGE
|
|
24
|
+
Usage: #{me} [options] [INFILE [OUTFILE]]
|
|
25
|
+
|
|
26
|
+
Processes a TeX math fragment from INFILE (default stdin) and
|
|
27
|
+
writes corresponding HTML+MathML to OUTFILE (default stdout).
|
|
28
|
+
Needs katex.min.js and a Javascript engine to do that.
|
|
29
|
+
|
|
30
|
+
Options:
|
|
31
|
+
USAGE
|
|
32
|
+
opts.on('-C CONFIG_FILE', '--config_file=CONFIG_FILE',
|
|
33
|
+
'Specify path to YAML configuration file') do |cf|
|
|
34
|
+
config_file = cf
|
|
35
|
+
end
|
|
36
|
+
opts.on('-D', '--[no-]display',
|
|
37
|
+
'format math in display style') do |dm|
|
|
38
|
+
display_mode = dm
|
|
39
|
+
end
|
|
40
|
+
opts.on('-J KATEX_JS', '--katex_js=KATEX_JS',
|
|
41
|
+
'Specify path to katex.js') do |katex_js|
|
|
42
|
+
cmd_opts[:katex_js] = katex_js
|
|
43
|
+
end
|
|
44
|
+
opts.on('-K JSON', '--katex_opts=JSON',
|
|
45
|
+
'Specify KaTeX options') do |katex_opts|
|
|
46
|
+
cmd_opts[:katex_opts] = JSON.parse(katex_opts, symbolize_names: true)
|
|
47
|
+
end
|
|
48
|
+
opts.on('-L JS_DIR', '--js_dir=JS_DIR',
|
|
49
|
+
'Specify dir with JS helper files') do |js_dir|
|
|
50
|
+
cmd_opts[:js_dir] = js_dir
|
|
51
|
+
end
|
|
52
|
+
opts.on('-l JS_LIB,...', '--js_libs=JS_LIB,...', Array,
|
|
53
|
+
'Specify JS helper files, relative to JS_DIR') do |js_libs|
|
|
54
|
+
cmd_opts[:js_libs] = js_libs
|
|
55
|
+
end
|
|
56
|
+
opts.on('-R JS_RUN', '--js_run=JS_RUN',
|
|
57
|
+
'Specify JS engine to use (-v lists choices)') do |js_run|
|
|
58
|
+
cmd_opts[:js_run] = js_run
|
|
59
|
+
end
|
|
60
|
+
opts.on('-d', '--[no-]debug',
|
|
61
|
+
'Log JS engine config and usage to stderr') do |d|
|
|
62
|
+
cmd_opts[:debug] = d
|
|
63
|
+
end
|
|
64
|
+
opts.on('-v', '--[no-]verbose',
|
|
65
|
+
'Log JS engine configuration to stderr') do |v|
|
|
66
|
+
cmd_opts[:verbose] = v
|
|
67
|
+
end
|
|
68
|
+
opts.on("-h", "--help", "Prints this help and exits") do |h|
|
|
69
|
+
if h
|
|
70
|
+
puts opts
|
|
71
|
+
exit
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end.parse!
|
|
75
|
+
|
|
76
|
+
if ARGV.size > 2
|
|
77
|
+
warn opts
|
|
78
|
+
exit 2
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
cfg_opts = JSON.parse(YAML.load(config_file, safe: true).to_json,
|
|
82
|
+
symbolize_names: true) if config_file
|
|
83
|
+
options = cfg_opts.merge(cmd_opts, &merge_dicts)
|
|
84
|
+
loglevel = options[:debug] ? :debug : options[:verbose] ? :verbose : nil
|
|
85
|
+
display_mode = !!display_mode
|
|
86
|
+
|
|
87
|
+
conv = SsKaTeX.new(options, &SsKaTeX.warn_logger(loglevel))
|
|
88
|
+
tex = if ARGV.size == 0
|
|
89
|
+
$stdin.set_encoding Encoding::UTF_8
|
|
90
|
+
$stdin.read
|
|
91
|
+
else
|
|
92
|
+
IO.read(ARGV.shift, encoding: Encoding::UTF_8)
|
|
93
|
+
end.chomp
|
|
94
|
+
html = conv.call(tex, display_mode) + "\n"
|
|
95
|
+
if ARGV.size == 0
|
|
96
|
+
$stdout.set_encoding Encoding::UTF_8
|
|
97
|
+
$stdout.write html
|
|
98
|
+
else
|
|
99
|
+
IO.write(ARGV.shift, html, encoding: Encoding::UTF_8)
|
|
100
|
+
end
|
data/lib/sskatex.rb
CHANGED
|
@@ -85,6 +85,29 @@ class SsKaTeX
|
|
|
85
85
|
# Relative paths are interpreted relative to #js_dir.
|
|
86
86
|
DEFAULT_JS_LIBS = ['escape_nonascii_html.js', 'tex_to_html.js']
|
|
87
87
|
|
|
88
|
+
# A logger that outputs every message via +warn+
|
|
89
|
+
DEBUG_LOGGER = lambda {|level, &expr| warn expr.call}
|
|
90
|
+
private_constant :DEBUG_LOGGER
|
|
91
|
+
|
|
92
|
+
# A logger that outputs only verbose-level messages via +warn+
|
|
93
|
+
VERBOSE_LOGGER = lambda {|level, &expr| warn expr.call if level == :verbose}
|
|
94
|
+
private_constant :VERBOSE_LOGGER
|
|
95
|
+
|
|
96
|
+
# A dictionary with simple loggers
|
|
97
|
+
LOGGERS = {debug: DEBUG_LOGGER, 'debug' => DEBUG_LOGGER,
|
|
98
|
+
verbose: VERBOSE_LOGGER, 'verbose' => VERBOSE_LOGGER}
|
|
99
|
+
private_constant :LOGGERS
|
|
100
|
+
|
|
101
|
+
# Given a desired log _level_, this returns an object useful for #logger.
|
|
102
|
+
# That logger object simply outputs messages via +warn+.
|
|
103
|
+
# If _level_ is +:debug+, all messages are output.
|
|
104
|
+
# If _level_ is +:verbose+, only verbose-level messages are output.
|
|
105
|
+
# _level_ can be given as a symbol or as its JSON-equivalent string.
|
|
106
|
+
# If _level_ is anything else, +nil+ will be returned, thus disabling logging.
|
|
107
|
+
def self.warn_logger(level = :verbose)
|
|
108
|
+
LOGGERS[level]
|
|
109
|
+
end
|
|
110
|
+
|
|
88
111
|
# This is a module with miscellaneous utility functions needed by SsKaTeX.
|
|
89
112
|
module Utils
|
|
90
113
|
# Dictionary for escape sequences used in Javascript string literals
|
|
@@ -173,6 +196,8 @@ class SsKaTeX
|
|
|
173
196
|
#
|
|
174
197
|
# For example, to trace +:verbose+ but not +:debug+ messages, set #logger to
|
|
175
198
|
# lambda {|level, &block| warn(block.call) if level == :verbose}
|
|
199
|
+
# or, equivalently, to the output of ::warn_logger.
|
|
200
|
+
#
|
|
176
201
|
# If #logger is +nil+, no logging will be done.
|
|
177
202
|
attr_accessor :logger
|
|
178
203
|
|
data/test/block/det.html
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi mathvariant="normal">Δ</mi><mo>=</mo><mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac><mrow><mo fence="true">∣</mo><mtable><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>a</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>b</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>c</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>e</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>f</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>g</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>h</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi></mrow></mstyle></mtd></mtr></mtable><mo fence="true">∣</mo></mrow></mrow><annotation encoding="application/x-tex">\Delta = \frac{1}{2}
|
|
2
|
-
\begin{vmatrix}a & b & c \\ d & e & f \\ g & h & i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord mathrm">Δ</span><span class="mrel">=</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathrm">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="
|
|
2
|
+
\begin{vmatrix}a & b & c \\ d & e & f \\ g & h & i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord mathrm">Δ</span><span class="mrel">=</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathrm">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line hide-tail" style="height:0.04em;"><svg width='400em' height='400em' viewBox='0 0 400000 400000' preserveAspectRatio='xMinYMin slice'><path d='M0 0 h400000 v400000 h-400000z M0 0 h400000 v400000 h-400000z'/></svg></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathrm">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">a</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">d</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">b</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">e</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">h</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">c</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span></span></span></span></span></span>
|
data/test/span/det.html
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi mathvariant="normal">Δ</mi><mo>=</mo><mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac><mrow><mo fence="true">∣</mo><mtable><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>a</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>b</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>c</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>e</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>f</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>g</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>h</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi></mrow></mstyle></mtd></mtr></mtable><mo fence="true">∣</mo></mrow></mrow><annotation encoding="application/x-tex">\Delta = \frac{1}{2}
|
|
2
|
-
\begin{vmatrix}a & b & c \\ d & e & f \\ g & h & i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord mathrm">Δ</span><span class="mrel">=</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.845108em;"><span style="top:-2.6550000000000002em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathrm mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="
|
|
2
|
+
\begin{vmatrix}a & b & c \\ d & e & f \\ g & h & i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord mathrm">Δ</span><span class="mrel">=</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.845108em;"><span style="top:-2.6550000000000002em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathrm mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line hide-tail" style="height:0.04em;"><svg width='400em' height='400em' viewBox='0 0 400000 400000' preserveAspectRatio='xMinYMin slice'><path d='M0 0 h400000 v400000 h-400000z M0 0 h400000 v400000 h-400000z'/></svg></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathrm mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">a</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">d</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">b</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">e</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">h</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">c</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span></span></span></span></span>
|
data/test/test_all.rb
CHANGED
|
@@ -11,22 +11,38 @@ require 'sskatex'
|
|
|
11
11
|
|
|
12
12
|
class SsKaTeXTest < Minitest::Test
|
|
13
13
|
def setup
|
|
14
|
-
@tex2html = SsKaTeX.new
|
|
15
|
-
# warn(block.call) if level == :verbose
|
|
16
|
-
end
|
|
14
|
+
@tex2html = SsKaTeX.new
|
|
17
15
|
end
|
|
18
16
|
|
|
19
17
|
TESTDIR = File.dirname(__FILE__)
|
|
20
18
|
|
|
21
19
|
# Generate test methods
|
|
22
|
-
Dir[File.join(TESTDIR, 'tex', '*.tex')].each do |
|
|
23
|
-
testcase = File.basename(
|
|
24
|
-
[
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
Dir[File.join(TESTDIR, 'tex', '*.tex')].each do |tex_file|
|
|
21
|
+
testcase = File.basename(tex_file, '.tex').tr('^a-zA-Z0-9_', '_')
|
|
22
|
+
[:none, :static, :dynamic].each do |logger_lifetime|
|
|
23
|
+
['block', 'span'].each do |display_mode|
|
|
24
|
+
name = "#{testcase}_#{logger_lifetime}_#{display_mode}"
|
|
25
|
+
define_method("test_#{name}") do
|
|
26
|
+
logged = {}
|
|
27
|
+
logger = lambda {|level, &block| logged[level] = true}
|
|
28
|
+
static_logger = (logger if logger_lifetime == :static)
|
|
29
|
+
dynamic_logger = (logger if logger_lifetime == :dynamic)
|
|
30
|
+
@tex2html.logger = static_logger
|
|
31
|
+
tex = IO.read(tex_file, external_encoding: Encoding::UTF_8).chomp
|
|
32
|
+
ref_html_file = File.join(TESTDIR, display_mode, testcase) + '.html'
|
|
33
|
+
ref_html = IO.read(ref_html_file,
|
|
34
|
+
external_encoding: Encoding::UTF_8).chomp
|
|
35
|
+
html = @tex2html.call(tex, display_mode == 'block', &dynamic_logger)
|
|
36
|
+
assert_equal html, ref_html
|
|
37
|
+
if logger_lifetime == :none
|
|
38
|
+
assert logged.empty?
|
|
39
|
+
else
|
|
40
|
+
assert logged[:verbose]
|
|
41
|
+
assert logged[:debug]
|
|
42
|
+
assert logged.size == 2
|
|
43
|
+
end
|
|
44
|
+
assert @tex2html.logger == static_logger
|
|
45
|
+
end
|
|
30
46
|
end
|
|
31
47
|
end
|
|
32
48
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sskatex
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.30
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Christian Cornelssen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-11-
|
|
11
|
+
date: 2017-11-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: execjs
|
|
@@ -59,12 +59,14 @@ description: |
|
|
|
59
59
|
as well as custom Javascript for pre- and postprocessing.
|
|
60
60
|
For that reason, the configuration must not be left to untrusted users.
|
|
61
61
|
email: ccorn@1tein.de
|
|
62
|
-
executables:
|
|
62
|
+
executables:
|
|
63
|
+
- sskatex
|
|
63
64
|
extensions: []
|
|
64
65
|
extra_rdoc_files: []
|
|
65
66
|
files:
|
|
66
67
|
- COPYING
|
|
67
68
|
- README.md
|
|
69
|
+
- bin/sskatex
|
|
68
70
|
- data/sskatex/js/escape_nonascii_html.js
|
|
69
71
|
- data/sskatex/js/tex_to_html.js
|
|
70
72
|
- lib/sskatex.rb
|
|
@@ -88,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
88
90
|
requirements:
|
|
89
91
|
- - ">="
|
|
90
92
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: '2.
|
|
93
|
+
version: '2.1'
|
|
92
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
95
|
requirements:
|
|
94
96
|
- - ">="
|