summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/greek-fontenc/lgr2licr.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/greek-fontenc/lgr2licr.lua')
-rwxr-xr-xMaster/texmf-dist/doc/latex/greek-fontenc/lgr2licr.lua169
1 files changed, 169 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/greek-fontenc/lgr2licr.lua b/Master/texmf-dist/doc/latex/greek-fontenc/lgr2licr.lua
new file mode 100755
index 00000000000..da64c0ad73b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/greek-fontenc/lgr2licr.lua
@@ -0,0 +1,169 @@
+#!/usr/bin/env lua
+
+-- LGR Transcription to Greek LICR transformation
+-- **********************************************
+--
+-- :Copyright: © 2010 Günter Milde
+-- :Licence: This work may be distributed and/or modified under the
+-- conditions of the `LaTeX Project Public License`_, either
+-- version 1.3 of this license or any later version.
+--
+-- .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
+--
+-- The LGR font encoding is the de-facto standard for Greek typesetting with
+-- LaTeX. This file provides a translation from the Latin transcription defined
+-- by LGR into the LaTeX Internal Character Representation (LICR) macros.
+--
+-- ::
+
+usage = [[
+Usage: lua lgr2licr.lua [OPTIONS] [STRING]
+ Convert STRING from Latin transcription to LICR macros for Greek symbols.
+ (This dumb conversion fails if the string contains TeX macros.)
+ Without argument, the script reads from standard input like a
+ redirected file. End interactive input with Ctrl-D.
+Options: -h, --help show this help
+ -f, --file read input from file STRING
+]]
+
+if arg[1] == "-h" or arg[1] == "--help" then
+ print(usage)
+ return
+end
+
+-- Get input string::
+
+local s
+
+if arg[1] == "-f" then
+ local f = assert(io.open(arg[2], "r"))
+ s = f:read("*all")
+ f:close()
+elseif arg[1] then
+ s = table.concat(arg, " ") .. "\n"
+else
+ -- test:
+ -- s = "\\emph{x\\'us}"
+ s = io.read("*all")
+end
+
+-- The mapping from the LGR Latin transcription to LICR macros::
+
+LGR_map = {
+ A = "\\textAlpha{}",
+ B = "\\textBeta{}",
+ G = "\\textGamma{}",
+ D = "\\textDelta{}",
+ E = "\\textEpsilon{}",
+ Z = "\\textZeta{}",
+ H = "\\textEta{}",
+ J = "\\textTheta{}",
+ I = "\\textIota{}",
+ K = "\\textKappa{}",
+ L = "\\textLambda{}",
+ M = "\\textMu{}",
+ N = "\\textNu{}",
+ X = "\\textXi{}",
+ O = "\\textOmicron{}",
+ P = "\\textPi{}",
+ R = "\\textRho{}",
+ S = "\\textSigma{}",
+ T = "\\textTau{}",
+ U = "\\textUpsilon{}",
+ F = "\\textPhi{}",
+ Q = "\\textChi{}",
+ Y = "\\textPsi{}",
+ W = "\\textOmega{}",
+
+ a = "\\textalpha{}",
+ b = "\\textbeta{}",
+ g = "\\textgamma{}",
+ d = "\\textdelta{}",
+ e = "\\textepsilon{}",
+ z = "\\textzeta{}",
+ h = "\\texteta{}",
+ j = "\\texttheta{}",
+ i = "\\textiota{}",
+ k = "\\textkappa{}",
+ l = "\\textlambda{}",
+ m = "\\textmu{}",
+ n = "\\textnu{}",
+ x = "\\textxi{}",
+ o = "\\textomicron{}",
+ p = "\\textpi{}",
+ r = "\\textrho{}",
+ s = "\\textautosigma{}",
+ c = "\\textfinalsigma{}",
+ t = "\\texttau{}",
+ u = "\\textupsilon{}",
+ f = "\\textphi{}",
+ q = "\\textchi{}",
+ y = "\\textpsi{}",
+ w = "\\textomega{}",
+ v = "\\noboundary{}",
+
+ ["'"] = "\\'",
+ ["`"] = "\\`",
+ ["~"] = "\\~",
+ ["<"] = "\\<",
+ [">"] = "\\>",
+ ["|"] = "\\|",
+ ['"'] = '\\"',
+ [";"] = "\\textanoteleia{}",
+ ["?"] = "\\texterotimatiko{}",
+}
+
+-- Return substitution string for 3 captures:
+--
+-- `c1` backslash
+-- `c2` a-zA-Z
+-- `c3` any other char
+-- ::
+
+function lgr_replace(c1, c2, c3)
+ -- print (c1, c2, c3)
+ if c1 == "\\" then
+ if c2 and (c2 ~= "") then
+ return c1 .. c2 .. (LGR_map[c3] or c3 or "")
+ end
+ return c1 .. c3
+ end
+ c2 = string.gsub(c2, "s(.)", "sv%1")
+ return (string.gsub(c2, ".", LGR_map) or "") .. (LGR_map[c3] or c3 or "")
+end
+
+-- Use the mapping to replace every ASCII-character with
+-- non-standard meaning to the corresponding LICR macro
+-- (skip macros)::
+ -- *([a-zA-Z'`~<>|\";?]
+s = string.gsub(s, "(\\?)([a-zA-Z]*)([^\\]?)", lgr_replace)
+
+-- Ligatures::
+
+s = string.gsub(s, "%(%(", "\\guillemotleft{}")
+s = string.gsub(s, "%)%)", "\\guillemotright{}")
+s = string.gsub(s, "\\'\\'", "\\textquoteright{}") -- ''
+s = string.gsub(s, "\\`\\`", "\\textquoteleft{}") -- ``
+s = string.gsub(s, '\"(%s)', "\\textquoteright{}%1")
+
+-- Separating empty group "{}" only required if followed by space or ASCII::
+
+s = string.gsub(s, "{}([^ a-zA-Z])", "%1")
+
+-- Autosigma replacements::
+
+s = string.gsub(s, "\\textautosigma\\noboundary", "\\textsigma") -- sv
+s = string.gsub(s, "\\textautosigma(\\['`~<>|\"])", "\\textsigma%1") -- accents
+
+s = string.gsub(s, "\\textautosigma([-%s!#$%%&%(%)*+,./0-9:=%[%]{|}])",
+ "\\textfinalsigma%1")
+
+s = string.gsub(s, "\\textautosigma(\\textquote)", "\\textfinalsigma%1")
+s = string.gsub(s, "\\textautosigma(\\texterotimatiko)", "\\textfinalsigma%1")
+s = string.gsub(s, "\\textautosigma(\\textanoteleia)", "\\textfinalsigma%1")
+
+s = string.gsub(s, "\\textautosigma$", "\\textfinalsigma")
+
+-- Write the result to stdout::
+
+io.write(s)