From db70ffae9b765557aa5c14e59e6515efde371794 Mon Sep 17 00:00:00 2001
From: Robert Alessi <alessi@robertalessi.net>
Date: Tue, 26 Mar 2019 19:56:22 +0100
Subject: added \TeXtoTEI

---
 ekdosis.dtx | 78 ++++++++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 57 insertions(+), 21 deletions(-)

(limited to 'ekdosis.dtx')

diff --git a/ekdosis.dtx b/ekdosis.dtx
index ad26fc9..c4a706f 100644
--- a/ekdosis.dtx
+++ b/ekdosis.dtx
@@ -134,6 +134,7 @@ Running "make install" installs the files in the local TeX tree.
 \documentclass{ltxdoc}
 \usepackage[letterpaper,margin=25mm,left=50mm,nohead]{geometry}
 \usepackage{metalogox}
+\usepackage{hologo}
 \usepackage{hyperxmp}
 \usepackage{uri}
 \usepackage[numbered]{hypdoc}
@@ -162,7 +163,7 @@ Running "make install" installs the files in the local TeX tree.
 \usepackage{units}
 \usepackage[newfloat=true]{minted}
 \newminted[ekdlua]{lua}{linenos, fontsize=\relsize{-0.5},
-  xleftmargin=12pt,
+  xleftmargin=12pt, breaklines,
   numberblanklines=false, numbersep=3pt, firstnumber=last}
 \renewcommand{\theFancyVerbLine}{\rmfamily\smaller\arabic{FancyVerbLine}}
 \usepackage[contents]{colordoc}
@@ -362,6 +363,14 @@ Running "make install" installs the files in the local TeX tree.
   \luadirect{tex.sprint(ekdosis.getsiglum(\luastringN{#1}))}
 }
 %    \end{macrocode}
+% Add a \hologo{(La)TeX} command to be processed as a |TEI xml| tag:
+%    \begin{macrocode}
+\NewDocumentCommand{\TeXtoTEI}{m m m}{%
+  \luadirect{ekdosis.newcmdtotag(\luastringN{#1},
+    \luastringN{#2},
+    \luastringN{#3})}
+}
+%    \end{macrocode}
 %    \begin{macrocode}
 \newbool{ekd@started}
 \newbool{do@app}
@@ -548,16 +557,10 @@ local aftercmd = lpeg.Cs(lpeg.S("*[{,.?;:'`\"") + dblbkslash)
 local cmdargs = lpeg.Cs(spce^-1 * bsqbracketsii * bcbracesii * bsqbrackets^-1)
 local lemrdg = lpeg.Cs(lpeg.Cs("lem") + lpeg.Cs("rdg"))
 
+-- Witnesses
 listWit = {}
 
-function ekdosis.newwitness(id, siglum, description)
-   id = id..","
-   table.insert(listWit, {a = id, b = siglum, c = description})
-   table.sort(listWit, function(a ,b) return(#a.a > #b.a) end)
-   return true
-end
-
-function ekdosis.isintable(table, element)
+local function isintable(table, element)
    for i = 1,#table do
       if table[i].a == element then
 	 return true
@@ -566,13 +569,32 @@ function ekdosis.isintable(table, element)
    return false
 end
 
+local sorted_no = 0
+
+function ekdosis.newwitness(id, siglum, description)
+   if isintable(listWit, id..",")
+   then
+      tex.print([[\unexpanded{\PackageWarning{ekdosis}{"]]
+      	 ..id..
+      	 [[" already exists as a witness id. ]]
+      	 ..
+      	 [[Please pick another id.}}]])
+   else
+      sorted_no = sorted_no + 1
+      id = id..","
+      table.insert(listWit, {a = id, b = siglum, c = description, d = sorted_no})
+      table.sort(listWit, function(a ,b) return(#a.a > #b.a) end)
+   end
+   return true
+end
+
 function ekdosis.getsiglum(str, opt)
    str = str..","
    str = string.gsub(str, "%s-(%,)", "%1")
    ctrl = str
    if opt == "tei" then
       for i = 1,#listWit do
-	 str  = string.gsub(str, listWit[i].a, "#"..listWit[i].a)
+	 str  = string.gsub(str, "(%f[%w])"..listWit[i].a, "%1#"..listWit[i].a)
 	 ctrl = string.gsub(ctrl, listWit[i].a, "")
       end
       str = string.gsub(str, "%,(%s-)([%#])", " %2")
@@ -592,19 +614,33 @@ function ekdosis.getsiglum(str, opt)
 end
 
 -- begin totei functions
-local tags = {
-   {a="footnote", b="note", c=" pos=\"foot\""},
+local cmdtotags = {
+   {a="footnote", b="note", c=" place=\"bottom\""},
    {a="textbf", b="hi", c=" rend=\"bold\""},
-   {a="emph", b="hi", c=" rend=\"italic\""},
-   {a="textsf", b="hi", c=" rend=\"sans\""},
    {a="txarb", b="foreign", c=" xml:lang=\"arb\""},
+   {a="emph", b="hi", c=" rend=\"italic\""},
    {a="arb", b="foreign", c=" xml:lang=\"arb\""},
-   {a="sg", b="foreign", c=" xml:lang=\"grc\""},
    {a="app", b="app", c=""},
    {a="lem", b="lem", c=""},
    {a="rdg", b="rdg", c=""}
 }
 
+function ekdosis.newcmdtotag(cmd, tag, attr)
+   if isintable(cmdtotags, cmd)
+   then
+      tex.print([[\unexpanded{\PackageWarning{ekdosis}{"]]
+      	 ..cmd..
+      	 [[" already exists as a known command to be processed to TEI. ]]
+      	 ..
+      	 [[Please pick another command.}}]])
+   else
+      table.insert(cmdtotags, {a = cmd, b = tag, c = " "..attr})
+      table.sort(cmdtotags, function(a ,b) return(#a.a > #b.a) end)
+   end
+   return true
+end
+
+
 local function lem_rdg_totei(str)
    str = gsub(str, dblbkslash * lemrdg * spcenc^-1 * bsqbrackets * bcbraces,
 	      function(bkslash, cmd, opt, arg)
@@ -623,10 +659,10 @@ end
 function ekdosis.textotei(str)
    str = string.gsub(str, "%s?\\par%s?", "</p>\n<p>")
    str = lem_rdg_totei(str)
-   for i = 1,#tags
+   for i = 1,#cmdtotags
    do
-      str = string.gsub(str, "(\\"..tags[i].a..")%s?(%b{})", "%1[]%2")
-      str = string.gsub(str, "(\\"..tags[i].a..")%s?(%b[])(%b{})",
+      str = string.gsub(str, "(\\"..cmdtotags[i].a..")%s?(%b{})", "%1[]%2")
+      str = string.gsub(str, "(\\"..cmdtotags[i].a..")%s?(%b[])(%b{})",
 			function(cmd, arg, body)
 			   body = string.sub(body, 2, -2)
 			   arg = string.sub(arg, 2, -2)
@@ -635,7 +671,7 @@ function ekdosis.textotei(str)
 						return string.format("\"%s\"", braces)
 			   end)
 			   body = ekdosis.textotei(body)
-			   return string.format("<"..tags[i].b..tags[i].c.." %s>%s</"..tags[i].b..">", arg, body)
+			   return string.format("<"..cmdtotags[i].b..cmdtotags[i].c.." %s>%s</"..cmdtotags[i].b..">", arg, body)
       end)
    end
    str = string.gsub(str, "\\(%a+)%s?%*?(%b[])(%b{})",
@@ -708,7 +744,7 @@ ekdosis.getabspg = function(pg) --not used
    end
 end
 
-local function isintable(table, value)
+local function mdvisintable(table, value)
    for _, v in pairs(table) do
       if v == value then return true end
    end
@@ -761,7 +797,7 @@ local salt = 0
 
 function ekdosis.mdvappend(str)
    i = md5.sumhexa(str)
-   if not isintable(md5items, i) then
+   if not mdvisintable(md5items, i) then
       table.insert(md5items, i)
    else
       i = i..salt
-- 
cgit v1.2.3

