summaryrefslogtreecommitdiff
path: root/macros/generic/crossrefenum/doc/fixes.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/crossrefenum/doc/fixes.lua')
-rw-r--r--macros/generic/crossrefenum/doc/fixes.lua45
1 files changed, 45 insertions, 0 deletions
diff --git a/macros/generic/crossrefenum/doc/fixes.lua b/macros/generic/crossrefenum/doc/fixes.lua
new file mode 100644
index 0000000000..1d4d0b5cc9
--- /dev/null
+++ b/macros/generic/crossrefenum/doc/fixes.lua
@@ -0,0 +1,45 @@
+local ZERO_WD_SP = pandoc.RawInline('context', '\\hskip0pt ')
+
+local function set_break_points(code)
+ local raw_code = code.text
+ local broken_code = {}
+ for a, b in string.gmatch(raw_code, '([^a-zA-Z\\]?)([A-Z\\]?[a-z.]*)') do
+ if a ~= '' then
+ table.insert(broken_code, ZERO_WD_SP)
+ table.insert(broken_code, pandoc.Code(a))
+ end
+ if b ~= '' then
+ table.insert(broken_code, ZERO_WD_SP)
+ table.insert(broken_code, pandoc.Code(b))
+ end
+ end
+ return broken_code
+end
+
+local function has_one_of(s, string_table)
+ for i = 1, #string_table do
+ if string.match(s, string_table[i]) then
+ return string_table[i]
+ end
+ end
+ return false
+end
+
+local function logos(str)
+ local s = str.text
+ -- 'TeX' must be included last because it is contained in the other names.
+ local match = has_one_of(s, { 'LaTeX', 'ConTeXt', 'TeX' })
+ if match then
+ local pre, logo, post = string.match(s, '^(.*)(' .. match .. ')(.*)$')
+ local to_return = {}
+ if pre then table.insert(to_return, pandoc.Str(pre)) end
+ table.insert(to_return, pandoc.RawInline('context', '\\' .. logo .. '{}'))
+ if post then table.insert(to_return, pandoc.Str(post)) end
+ return to_return
+ end
+end
+
+return {
+ { Code = set_break_points },
+ { Str = logos }
+}