diff options
Diffstat (limited to 'Master/texmf-dist/doc/plain/pitex/i-pitex.lua')
-rw-r--r-- | Master/texmf-dist/doc/plain/pitex/i-pitex.lua | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/plain/pitex/i-pitex.lua b/Master/texmf-dist/doc/plain/pitex/i-pitex.lua new file mode 100644 index 00000000000..4559a1901db --- /dev/null +++ b/Master/texmf-dist/doc/plain/pitex/i-pitex.lua @@ -0,0 +1,163 @@ +local gsub, match, gmatch = string.gsub, string.match, string.gmatch +local insert = table.insert +local add_pattern = interpreter.add_pattern + +-- CLASS 1: things that prevent other things, thanks to protection. +interpreter.default_class = 1 + +-- "> foo ..." as the first line of a paragraph signals a description +-- of foo. +local function describe (buffer, num) + if num == 1 then + local line = buffer[num] + line = line .. " " + line = gsub(line, "^> ", "") + line = gsub(line, "{<(.-)>}", "\\hskip1pt\\hbox{\\barg{%1}}") + line = gsub(line, "^(.-)%s+", "\\describe{%1}{") + line = gsub(line, "%[<(.-)>%]", "\\hskip1pt\\hbox{\\oarg{%1}}") + line = gsub(line, "<(.-)>", "\\hskip1pt\\hbox{\\arg{%1}}") + line = gsub(line, "\\hfil", "", 1) + line = gsub(line, "%s*$", "}", 1) + buffer[num] = line + interpreter.protect(num) + else + return 2 + end +end +add_pattern{pattern = "^[\\>]", call = describe} + +-- Verbatim material is marked by a 10-space indent. +local function verbatim (buffer) + for n, l in ipairs(buffer) do + buffer[n] = gsub(l, "%s%s%s%s%s%s%s%s%s%s","", 1) + end + insert(buffer, 1, [[\verbatim]]) + if gsub(buffer[#buffer], + interpreter.paragraph, "") == "" then + buffer[#buffer] = [[\verbatim/]] + else + insert(buffer, [[\verbatim/]]) + end + interpreter.protect() +end +add_pattern{pattern = "^%s%s%s%s%s%s%s%s%s%s", call = verbatim} + +-- CLASS 2: protecting control sequences, so they're verbatim. +interpreter.default_class = 2 +add_pattern { + pattern = "(\\[%a@]+)", + replace = '"%1"'} + + +-- CLASS 3: things that precede other things. +interpreter.default_class = 3 + +-- Tables. +local function table (buffer) + buffer[1] = "PROTECT\\tablePROTECT" + if buffer[#buffer] == "" then + buffer[#buffer-1] = "PROTECT\\table/PROTECT" + else + buffer[#buffer] = "PROTECT\\table/PROTECT" + end + local cells = 0 + for i, l in ipairs(buffer) do + if match(l, "^%-%-%-") then + l = "%" + else + l = gsub(l, "^|", "") + l = gsub(l, "|%s*$", "PROTECT\\crPROTECT") + local c = 0 + l = gsub(l, "|", function () c = c + 1 return "&" end) + cells = c > cells and c or cells + end + buffer[i] = l + end + for i, l in ipairs(buffer) do + if match(l, "\\cr") then + local c = 0 + for tab in gmatch(l, "&") do + c = c + 1 + end + for x = 1, cells - c do + buffer[i] = gsub(l, "\\cr", "\\span\\cr") + end + end + end +end +add_pattern{pattern = "^%-%-%-", call = table} + +-- Sections. +local function make_header(buffer, num, _, pattern) + if num + 1 == #buffer then + local l = buffer[1] + l = gsub(l, "^%s*", "") + l = "\\" .. pattern.type .. "{" .. l + if match(l, ":([%S]+)%s*$") then + l = gsub(l, "%s*:([%a_]+)%s*$", "}PROTECT[%1]PROTECT") + else + l = l .. "}" + end + buffer[1] = l + buffer[num] = "" + end +end +add_pattern {pattern = "^%s*===", call = make_header, type = "section"} +add_pattern {pattern = "^%s*~~~", call = make_header, type = "subsection"} +add_pattern {pattern = "^%s%s%s*%-%-%s+(.-)%s+%-%-", + call = function (buffer, line, _, pattern) + buffer[line] = gsub(buffer[line], pattern.pattern, "\\paragraph{%1}") + buffer[line] = gsub(buffer[line], "%s*:(%S+)", "PROTECT[%1]PROTECT") + end} + + +-- CLASS 4: things with no order of preference. +interpreter.default_class = 4 + +add_pattern {pattern = "%*(.-)%*", replace = "\\emph{%1}"} +add_pattern {pattern = "%*%*(.-)%*%*", replace = "\\bold{%1}"} +add_pattern {pattern = "%?([a-zA-Z]+)", replace = "\\attr{%1}"} +add_pattern {pattern = "!([a-zA-Z]+)", replace = "\\param{%1}"} +add_pattern {pattern = "=([a-zA-Z]+)", replace = "\\value{%1}"} +add_pattern {pattern = "|(.-)|", replace = "\\gateaction{%1}"} +add_pattern {pattern = "<(.-)>", replace = "\\arg{%1}"} +add_pattern {pattern = "{<(.-)>}", replace = "\\barg{%1}", offset = 7} +add_pattern {pattern = "%[<(.-)>%]", replace = "\\oarg{%1}", offset = 7} +add_pattern {pattern = "TeX", replace = "\\TeX{}", offset = 2} + +add_pattern {pattern = "(texapi)(.?)", offset = 7, + replace = function (a, b) + a = "\\emph{texapi}" + if b == "'" then + a = a .. "\\kern.2em'" + else + a = a .. b + end + return a + end} + +-- Links. +add_pattern {pattern = "%s*%[see%s+([%a_]+)%]", + call = function (buffer, line, index, pattern) + local l = buffer[line] + local pre, post = l:sub(1, index-1), l:sub(index) + local text + if pre:match("{.-}$") then + pre, text = match(pre, "(.*){(.-)}$") + else + pre, text = match(pre, "(.-)(%a+)$") + end + post = gsub(post, pattern.pattern, "\\jumplink{PROTECT%1PROTECT}{" .. text .. "}", 1) + buffer[line] = pre .. post + end} +add_pattern {pattern = ":([%a_]+)", replace = "\\anchor{PROTECT%1PROTECT}"} + + +-- CLASS 0: the broom wagon +interpreter.default_class = 0 + +interpreter.protector('"') +add_pattern {pattern = '"(.-)"', replace = "\\verb`%1`", class = 0} + +interpreter.protector("PROTECT") +add_pattern {pattern = "PROTECT(.-)PROTECT", replace = "%1", class = 0} |