sskatex 0.9.23 → 0.9.30
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
- - ">="
|