diff options
-rw-r--r-- | ekdosis.dtx | 55 |
1 files changed, 48 insertions, 7 deletions
diff --git a/ekdosis.dtx b/ekdosis.dtx index 2245b8d..1328c4e 100644 --- a/ekdosis.dtx +++ b/ekdosis.dtx | |||
@@ -352,13 +352,19 @@ Running "make install" installs the files in the local TeX tree. | |||
352 | \luadirect{ekdosis.closeteistream()} | 352 | \luadirect{ekdosis.closeteistream()} |
353 | } | 353 | } |
354 | % \end{macrocode} | 354 | % \end{macrocode} |
355 | % Build an process the list of witnesses | 355 | % Build and process the list of witnesses and hands |
356 | % \begin{macrocode} | 356 | % \begin{macrocode} |
357 | \NewDocumentCommand{\DeclareNewWitness}{m m +m}{ | 357 | \NewDocumentCommand{\DeclareNewWitness}{m m +m}{ |
358 | \luadirect{ekdosis.newwitness(\luastringN{#1}, | 358 | \luadirect{ekdosis.newwitness(\luastringN{#1}, |
359 | \luastringN{#2}, | 359 | \luastringN{#2}, |
360 | \luastringN{#3})} | 360 | \luastringN{#3})} |
361 | } | 361 | } |
362 | \NewDocumentCommand{\DeclareNewHand}{m m m +m}{ | ||
363 | \luadirect{ekdosis.newhand(\luastringN{#1}, | ||
364 | \luastringN{#2}, | ||
365 | \luastringN{#3}, | ||
366 | \luastringN{#4})} | ||
367 | } | ||
362 | \NewDocumentCommand{\getsiglum}{m}{% | 368 | \NewDocumentCommand{\getsiglum}{m}{% |
363 | \luadirect{tex.sprint(ekdosis.getsiglum(\luastringN{#1}))}% | 369 | \luadirect{tex.sprint(ekdosis.getsiglum(\luastringN{#1}))}% |
364 | } | 370 | } |
@@ -579,6 +585,7 @@ end | |||
579 | 585 | ||
580 | -- Witnesses | 586 | -- Witnesses |
581 | listWit = {} | 587 | listWit = {} |
588 | idsRend = {} | ||
582 | 589 | ||
583 | local function isintable(table, value) | 590 | local function isintable(table, value) |
584 | for i = 1,#table do | 591 | for i = 1,#table do |
@@ -590,6 +597,18 @@ local function isintable(table, value) | |||
590 | end | 597 | end |
591 | 598 | ||
592 | local sorted_no = 0 | 599 | local sorted_no = 0 |
600 | |||
601 | local function getindex(id, table) | ||
602 | local idfound = nil | ||
603 | for i = 1,#table | ||
604 | do | ||
605 | if table[i].xmlid == id then | ||
606 | idfound = i | ||
607 | break | ||
608 | end | ||
609 | end | ||
610 | return idfound | ||
611 | end | ||
593 | 612 | ||
594 | function ekdosis.newwitness(id, siglum, description) | 613 | function ekdosis.newwitness(id, siglum, description) |
595 | if xmlidfound(id) | 614 | if xmlidfound(id) |
@@ -603,8 +622,30 @@ function ekdosis.newwitness(id, siglum, description) | |||
603 | sorted_no = sorted_no + 1 | 622 | sorted_no = sorted_no + 1 |
604 | table.insert(xmlids, {xmlid = id}) | 623 | table.insert(xmlids, {xmlid = id}) |
605 | table.sort(xmlids, function(a ,b) return(#a.xmlid > #b.xmlid) end) | 624 | table.sort(xmlids, function(a ,b) return(#a.xmlid > #b.xmlid) end) |
606 | table.insert(listWit, {a = id, b = siglum, c = description, d = sorted_no}) | 625 | table.insert(listWit, {xmlid = id, |
607 | table.sort(listWit, function(a ,b) return(#a.a > #b.a) end) | 626 | head = siglum, |
627 | msIdentifier = {}, | ||
628 | physDesc = {}, | ||
629 | description = {}, | ||
630 | sorted = sorted_no}) | ||
631 | table.sort(listWit, function(a ,b) return(#a.xmlid > #b.xmlid) end) | ||
632 | end | ||
633 | return true | ||
634 | end | ||
635 | |||
636 | function ekdosis.newhand(id, witid, siglum, description) | ||
637 | if xmlidfound(id) | ||
638 | then | ||
639 | tex.print([[\unexpanded{\PackageWarning{ekdosis}{"]] | ||
640 | ..id.. | ||
641 | [[" already exists as a xml:id. ]] | ||
642 | .. | ||
643 | [[Please pick another id.}}]]) | ||
644 | else | ||
645 | table.insert(xmlids, {xmlid = id}) | ||
646 | table.sort(xmlids, function(a ,b) return(#a.xmlid > #b.xmlid) end) | ||
647 | local indexwit = getindex(witid, listWit) | ||
648 | table.insert(listWit[indexwit].physDesc, {xmlid = id, head = siglum, description ={}}) | ||
608 | end | 649 | end |
609 | return true | 650 | return true |
610 | end | 651 | end |
@@ -615,15 +656,15 @@ function ekdosis.getsiglum(str, opt) | |||
615 | ctrl = str | 656 | ctrl = str |
616 | if opt == "tei" then | 657 | if opt == "tei" then |
617 | for i = 1,#listWit do | 658 | for i = 1,#listWit do |
618 | str = string.gsub(str, "(%f[%w])"..listWit[i].a.."(%,)", "%1#"..listWit[i].a.."%2") | 659 | str = string.gsub(str, "(%f[%w])"..listWit[i].xmlid.."(%,)", "%1#"..listWit[i].xmlid.."%2") |
619 | ctrl = string.gsub(ctrl, listWit[i].a.."%,", "") | 660 | ctrl = string.gsub(ctrl, listWit[i].xmlid.."%,", "") |
620 | end | 661 | end |
621 | str = string.gsub(str, "%,(%s-)([%#])", " %2") | 662 | str = string.gsub(str, "%,(%s-)([%#])", " %2") |
622 | str = string.gsub(str, "%,$", "") | 663 | str = string.gsub(str, "%,$", "") |
623 | else | 664 | else |
624 | for i = 1,#listWit do | 665 | for i = 1,#listWit do |
625 | str = string.gsub(str, listWit[i].a.."%,", listWit[i].b) | 666 | str = string.gsub(str, listWit[i].xmlid.."%,", listWit[i].head) |
626 | ctrl = string.gsub(ctrl, listWit[i].a.."%,", "") | 667 | ctrl = string.gsub(ctrl, listWit[i].xmlid.."%,", "") |
627 | end | 668 | end |
628 | end | 669 | end |
629 | if string.find(ctrl, "[A-Za-z0-9]") | 670 | if string.find(ctrl, "[A-Za-z0-9]") |