[sword-svn] r565 - in trunk/modules: . na28 na28/migratetags na28/migratetags/matchers

scribe at crosswire.org scribe at crosswire.org
Fri May 17 10:17:21 EDT 2024


Author: scribe
Date: 2024-05-17 10:17:21 -0400 (Fri, 17 May 2024)
New Revision: 565

Added:
   trunk/modules/na28/
   trunk/modules/na28/Makefile
   trunk/modules/na28/app-entities.sed
   trunk/modules/na28/entities.sed
   trunk/modules/na28/migratetags/
   trunk/modules/na28/migratetags/Makefile
   trunk/modules/na28/migratetags/matchers/
   trunk/modules/na28/migratetags/matchers/defaultmatcher.h
   trunk/modules/na28/migratetags/matchers/gntmatcher.h
   trunk/modules/na28/migratetags/matchers/matcher.h
   trunk/modules/na28/migratetags/migratetags.cpp
   trunk/modules/na28/na28.conf
   trunk/modules/na28/na28raw.conf
   trunk/modules/na28/osis2imp.sed
   trunk/modules/na28/osis2impfn.sed
   trunk/modules/na28/tag-exceptions-ecm.conf
   trunk/modules/na28/tag-exceptions-na28.conf
   trunk/modules/na28/verses.sed
Log:
added na28 build


Added: trunk/modules/na28/Makefile
===================================================================
--- trunk/modules/na28/Makefile	                        (rev 0)
+++ trunk/modules/na28/Makefile	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,150 @@
+CIPHERKEY=changeme_in_cipherkey.mk
+include cipherkey.mk
+BUNDLE=NA28_5th_pr_XML.zip
+FINALTARGET:=NA28.zip
+ECMSTRIP:=-e ../tag-exceptions-na28.conf
+ECMREPLACE:=echo
+
+###### for ECM
+# Strip accents and appCrit for ECM
+## not sure what this is ###ECMSTRIP:=-fa -fc -ss NA28Tags -e ../tag-exceptions-na28.conf -e ../tag-exceptions-ecm.conf
+
+#ECMSTRIP:=-fa -fc -e ../tag-exceptions-na28.conf -e ../tag-exceptions-ecm.conf
+#ECMREPLACE:=imp2vs
+#FINALTARGET:=ECM.zip
+
+all: NA28/$(FINALTARGET)
+
+cipherkey.mk:
+	scp crosswire.org:/home/swordmod/pristine-private/na28/cipherkey.mk . || true
+
+deploy: deploy$(FINALTARGET)
+
+deployECM.zip:
+	scp NA28/ECM.zip scribe at host.crosswire.org:/home/swordweb/webmods/
+
+deployNA28.zip:
+	scp NA28/NA28.zip scribe at host.crosswire.org:/home/sword/ftp/dbgpackages/
+
+NA28/finalmod/mods.d/na28.conf: NA28/modules/texts/ztext/na28/nt.bzz 
+	rm -rf NA28/finalmod/mods.d
+	rm -rf NA28/finalmod/modules
+	mkdir -p NA28/finalmod/mods.d/
+	mkdir -p NA28/finalmod/modules/texts/ztext/
+	cp -a NA28/mods.d/na28.conf NA28/finalmod/mods.d/
+	cp -a NA28/modules/texts/ztext/na28 NA28/finalmod/modules/texts/ztext/
+
+prezipNA28.zip:
+	echo "no prezip work to do for the NA28"
+
+prezipECM.zip: unlock
+	rm -rf NA28/finalmod/modules/texts/ztext/ecm
+	rm -rf NA28/finalmod/mods.d/ecm.conf
+	mv NA28/finalmod/modules/texts/ztext/na28 NA28/finalmod/modules/texts/ztext/ecm
+	mv NA28/finalmod/mods.d/na28.conf NA28/finalmod/mods.d/ecm.conf
+	sed -i 's/DataPath=.*$$/DataPath=.\/modules\/texts\/ztext\/ecm\//' NA28/finalmod/mods.d/ecm.conf
+	sed -i 's/\[NA28]$$/[ECM]/' NA28/finalmod/mods.d/ecm.conf
+	sed -i 's/Description=.*$$/Description=Editio Critica Maior/' NA28/finalmod/mods.d/ecm.conf
+	
+
+NA28/$(FINALTARGET): NA28/finalmod/mods.d/na28.conf prezip$(FINALTARGET)
+	cd NA28/finalmod && zip -r ../$(FINALTARGET) *
+
+
+NA28/modules/texts/ztext/na28/nt.bzz: NA28/modules/texts/rawtext/na28/nt NA28/mods.d/na28.conf
+	mkdir -p NA28/modules/texts/ztext/na28/
+	cd NA28 && mod2zmod NA28raw modules/texts/ztext/na28/ 4 2 0 ${CIPHERKEY}
+	chmod a+r NA28/modules/texts/ztext/na28/*
+
+
+NA28/mods.d/na28.conf: na28.conf
+	mkdir -p NA28/mods.d
+	cp na28raw.conf na28.conf NA28/mods.d/
+
+
+NA28/modules/texts/rawtext/na28/nt: NA28/NA28-tagged.imp
+	mkdir -p NA28/modules/texts/rawtext/na28
+	imp2vs NA28/NA28-tagged.imp -o NA28/modules/texts/rawtext/na28/ > output.log
+	imp2vs NA28/NA28-apparatus.imp -a -o NA28/modules/texts/rawtext/na28/ >> output.log
+
+
+NA28/NA28-tagged.imp: migratetags/modules/texts/rawtext/na28/nt migratetags/migratetags
+	cd migratetags && ./migratetags $(ECMSTRIP) 2> ../NA28/tag-errors.txt > ../NA28/NA28-tagged.imp
+
+
+migratetags/migratetags: migratetags/mods.d/whnu.conf migratetags/Makefile
+	cd migratetags && make
+	cp na28raw.conf na28.conf migratetags/mods.d/
+
+
+# these two targets build na28/nt from imp instead of from
+# osis until we figure out why osis isn't working
+migratetags/modules/texts/rawtext/na28/nt: NA28/NA28.imp
+	mkdir -p migratetags/modules/texts/rawtext/na28
+	imp2vs NA28/NA28.imp -o migratetags/modules/texts/rawtext/na28/ > output.log
+	# update parts of NA28 with ECM text
+	echo "" >> output.log
+	echo "=================================" >> output.log
+	echo "" >> output.log
+	$(ECMREPLACE) NA29-Acts.imp -a -r -o migratetags/modules/texts/rawtext/na28/ >> output.log
+	$(ECMREPLACE) NA29-Mark.imp -a -r -o migratetags/modules/texts/rawtext/na28/ >> output.log
+
+
+NA28/NA28.imp: NA28/NA28.osis NA28/NA28-apparatus.osis
+	sed -f osis2imp.sed NA28/NA28.osis > NA28/NA28.imp
+	sed -f osis2impfn.sed NA28/NA28-apparatus.osis > NA28/NA28-apparatus.imp
+
+
+# osis isn't working right this second
+#migratetags/modules/texts/rawtext/na28/nt: NA28/NA28.osis
+#	mkdir -p NA28/mod
+#	osis2mod NA28/mod NA28/NA28.osis -d 1023 > output.log
+
+NA28/NA28.osis: NA28/NA28.stage1
+	sed -f verses.sed NA28/NA28.stage1 > NA28/NA28.osis
+
+NA28/NA28-apparatus.osis: NA28/NA28-apparatus.stage1
+	sed -f verses.sed NA28/NA28-apparatus.stage1 > NA28/NA28-apparatus.pre1
+	sed ':a;N;$$!ba;s/<\/app>\n<app/<\/app>\n<span class="bold">|<\/span><app/g;s/<\/rdg>\n<rdg/<\/rdg>\n<span class="bold">¦<\/span><rdg/g' NA28/NA28-apparatus.pre1 > NA28/NA28-apparatus.osis
+
+NA28/NA28.stage1: NA28/03Hauptteil/Obertext/01_Mt_ot_UCF_100921_End8_LH.xml entities.sed
+	sed -f entities.sed NA28/03Hauptteil/Obertext/*.xml > NA28/NA28.stage1
+
+NA28/NA28-apparatus.stage1: NA28/03Hauptteil/Obertext/01_Mt_ot_UCF_100921_End8_LH.xml entities.sed
+	sed -f entities.sed NA28/03Hauptteil/Apparat/*.xml | sed -f app-entities.sed > NA28/NA28-apparatus.stage1
+
+${BUNDLE}:
+	scp crosswire.org:/home/swordmod/pristine-private/na28/${BUNDLE} .
+
+NA28/03Hauptteil/Obertext/01_Mt_ot_UCF_100921_End8_LH.xml: ${BUNDLE}
+	mkdir -p NA28
+	cd NA28 && unzip ../${BUNDLE}
+	cd NA28/03Hauptteil/Obertext/ && for i in *.zip; do unzip $$i; done
+	cd NA28/03Hauptteil/Apparat/ && for i in *.zip; do unzip $$i; done
+	touch NA28/03Hauptteil/Obertext/01_Mt_ot_UCF_100921_End8_LH.xml
+
+unlock:
+	sed -i 's/CipherKey=.*$$/CipherKey=${CIPHERKEY}/' NA28/finalmod/mods.d/na28.conf
+
+genkey: .SHELLFLAGS = -c eval
+genkey: SHELL = bash -c 'eval "$${@//\\\\/}"'
+genkey: PERSONALIZATION = KKLEIN
+genkey:
+	~/src/sword/tests/ciphertest xyz 2 <<! \
+	${PERSONALIZATION}-${CIPHERKEY}-sum \
+	!
+
+clean:
+	rm -rf NA28 output.log migratetags/modules/texts/rawtext/na28
+	rm -rf NA28 output.log migratetags/mods.d/na28*
+	rm -rf *.zip *.zip.1 *.zip.2
+	cd migratetags && make clean
+
+migratetags/mods.d/whnu.conf:
+	wget https://crosswire.org/ftpmirror/pub/sword/raw/packages/WHNU.zip
+	unzip WHNU.zip -d migratetags/
+
+distclean: clean
+	rm -rf NA28 output.log migratetags/mods.d
+	rm -rf NA28 output.log migratetags/modules
+

Added: trunk/modules/na28/app-entities.sed
===================================================================
--- trunk/modules/na28/app-entities.sed	                        (rev 0)
+++ trunk/modules/na28/app-entities.sed	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,829 @@
+s/&A13-1Chr;/1Chr/g
+s/&A19-Ps;/Ps/g
+s/&A1-Gn;/Gn/g
+s/&A23-Is;/Is/g
+s/&A24-Jr;/Jr/g
+s/&A26-Ez;/Ez/g
+s/&A29-Joel;/Joel/g
+s/&A33-Mch;/Mch/g
+s/&A3-Lv;/Lv/g
+s/&A4-Nu;/Nu/g
+s/&A5-Dt;/Dt/g
+s/&accentus;/<span class="italic">acc.<\/span>/g
+s/&ad;/ad/g
+s/&Ad;/Ad/g
+s/&addit;/add./g
+s/&ante;/ante/g
+s/&apparatus;/app./g
+s/&app-LXX;/𝔖/g
+s/&app-p;/p)/g
+s/&B10-E;/E/g
+s/&B13-1Th;/1Th/g
+s/&B14-2Th;/2Th/g
+s/&B15-1T;/1T/g
+s/&B16-2T;/2T/g
+s/&B17-Tt;/Tt/g
+s/&B19-H;/H/g
+s/&B1-Mt;/Mt/g
+s/&B22-2P;/2P/g
+s/&B23-1J;/1J/g
+s/&B26-Jd;/Jd/g
+s/&B2-Mc;/Mc/g
+s/&B3-L;/L/g
+s/&B4-J;/J/g
+s/&B5-Act;/Act/g
+s/&B6-R;/R/g
+s/&B7-1C;/1C/g
+s/&B8-2C;/2C/g
+s/&B9-G;/G/g
+s/&bis;/<span class="italic">bis<\/span>/g
+s/&brevior;/brevior/g
+s/•/•/g
+s/&cj-lsqb;/[/g
+s/&cj-rsqb;/]/g
+s/&conclusio;/conclusio/g
+s/&confer;/cf/g
+s/&cum;/c./g
+s/&E-Byz;/Byz/g
+s/&E-May;/𝔐/g
+s/&endash;/–/g
+s/&epistulam;/epistulam/g
+s/&et;/et/g
+s/&exerr;/ex err./g
+s/&ex;/ex/g
+s/&exitac;/ex itac./g
+s/&exlat;/ex lat./g
+s/&exlect;/ex lect./g
+s/&exp-1a;/¹<sup>a<\/sup>/g
+s/&exp-1b;/¹<sup>b<\/sup>/g
+s/&exp-1;/¹/g
+s/&exp-2a;/²<sup>a<\/sup>/g
+s/&exp-2b;/²<sup>b<\/sup>/g
+s/&exp-2;/²/g
+s/&exp-3;/³/g
+s/&exp-ast;/<sup>*<\/sup>/g
+s/&exp-bo-ms;/<sup>ms<\/sup>/g
+s/&exp-bo-mss;/<sup>mss<\/sup>/g
+s/&exp-bo-pt;/<sup>pt<\/sup>/g
+s/&exp-Byz-pt;/<sup>pt<\/sup>/g
+s/&exp-c1;/<sup>c1<\/sup>/g
+s/&exp-c2;/<sup>c2<\/sup>/g
+s/&exp-c;/<sup>c<\/sup>/g
+s/&exp-Cl-exThd;/Cl<sup>ex Thd<\/sup>/g
+s/&exp-Cl-hom;/Cl<sup>hom<\/sup>/g
+s/&exp-Cl-lat;/Cl<sup>lat<\/sup>/g
+s/&exp-com;/<sup>com<\/sup>/g
+s/&exp-co-msvar;/<sup>s<\/sup>/g
+s/&exp-Eus-syr;/<sup>syr<\/sup>/g
+s/&exp-f-13;/¹³/g
+s/&exp-F-1739mg;/<sup>1739mg<\/sup>/g
+s/&exp-f-1;/¹/g
+s/&exp-F-com;/<sup>com<\/sup>/g
+s/&exp-F-lem;/<sup>lem<\/sup>/g
+s/&exp-F-ms;/<sup>ms<\/sup>/g
+s/&exp-F-mss;/<sup>mss<\/sup>/g
+s/&exp-F-pt;/<sup>pt<\/sup>/g
+s/&exp-F-txt;/<sup>txt<\/sup>/g
+s/&exp-F-vid;/<sup>vid<\/sup>/g
+s/&exp-F-vl;/<sup>v.l.<\/sup>/g
+s/&exp-Ir-arm;/<sup>arm<\/sup>/g
+s/&exp-Ir-gr;/<sup>gr<\/sup>/g
+s/&exp-Ir-lat;/<sup>lat<\/sup>/g
+s/&exp-lect-1;/¹/g
+s/&exp-lect-2;/²/g
+s/&exp-May-A;/<sup>A<\/sup>/g
+s/&exp-May-K;/<sup>K<\/sup>/g
+s/&exp-Mcion-A;/<sup>A<\/sup>/g
+s/&exp-Mcion-E;/<sup>E<\/sup>/g
+s/&exp-Mcion-Hier;/<sup>Hier<\/sup>/g
+s/&exp-Mcion-Or;/<sup>Or<\/sup>/g
+s/&exp-Mcion-Or-lat;/<sup>Or lat<\/sup>/g
+s/&exp-Mcion-T;/<sup>T<\/sup>/g
+s/&exp-mg;/<sup>mg<\/sup>/g
+s/&exp-Or-lat;/<sup>lat<\/sup>/g
+s/&exp-Or-s;/<sup>s<\/sup>/g
+s/&P;&exp-P-100;/<span class="witnessSiglum" data-docid="10100">𝔓¹⁰⁰<\/span>/g
+s/&P;&exp-P-101;/<span class="witnessSiglum" data-docid="10101">𝔓¹⁰¹<\/span>/g
+s/&P;&exp-P-103;/<span class="witnessSiglum" data-docid="10103">𝔓¹⁰³<\/span>/g
+s/&P;&exp-P-105;/<span class="witnessSiglum" data-docid="10105">𝔓¹⁰⁵<\/span>/g
+s/&P;&exp-P-106;/<span class="witnessSiglum" data-docid="10106">𝔓¹⁰⁶<\/span>/g
+s/&P;&exp-P-107;/<span class="witnessSiglum" data-docid="10107">𝔓¹⁰⁷<\/span>/g
+s/&P;&exp-P-108;/<span class="witnessSiglum" data-docid="10108">𝔓¹⁰⁸<\/span>/g
+s/&P;&exp-P-109;/<span class="witnessSiglum" data-docid="10109">𝔓¹⁰⁹<\/span>/g
+s/&P;&exp-P-10;/<span class="witnessSiglum" data-docid="10010">𝔓¹⁰<\/span>/g
+s/&P;&exp-P-110;/<span class="witnessSiglum" data-docid="10110">𝔓¹¹⁰<\/span>/g
+s/&P;&exp-P-111;/<span class="witnessSiglum" data-docid="10111">𝔓¹¹¹<\/span>/g
+s/&P;&exp-P-112;/<span class="witnessSiglum" data-docid="10112">𝔓¹¹²<\/span>/g
+s/&P;&exp-P-115;/<span class="witnessSiglum" data-docid="10115">𝔓¹¹⁵<\/span>/g
+s/&P;&exp-P-117;/<span class="witnessSiglum" data-docid="10117">𝔓¹¹⁷<\/span>/g
+s/&P;&exp-P-118;/<span class="witnessSiglum" data-docid="10118">𝔓¹¹⁸<\/span>/g
+s/&P;&exp-P-119;/<span class="witnessSiglum" data-docid="10119">𝔓¹¹⁹<\/span>/g
+s/&P;&exp-P-11;/<span class="witnessSiglum" data-docid="10011">𝔓¹¹<\/span>/g
+s/&P;&exp-P-120;/<span class="witnessSiglum" data-docid="10120">𝔓¹²⁰<\/span>/g
+s/&P;&exp-P-121;/<span class="witnessSiglum" data-docid="10121">𝔓¹²¹<\/span>/g
+s/&P;&exp-P-122;/<span class="witnessSiglum" data-docid="10122">𝔓¹²²<\/span>/g
+s/&P;&exp-P-123;/<span class="witnessSiglum" data-docid="10123">𝔓¹²³<\/span>/g
+s/&P;&exp-P-124;/<span class="witnessSiglum" data-docid="10124">𝔓¹²⁴<\/span>/g
+s/&P;&exp-P-125;/<span class="witnessSiglum" data-docid="10125">𝔓¹²⁵<\/span>/g
+s/&P;&exp-P-126;/<span class="witnessSiglum" data-docid="10126">𝔓¹²⁶<\/span>/g
+s/&P;&exp-P-127;/<span class="witnessSiglum" data-docid="10127">𝔓¹²⁷<\/span>/g
+s/&P;&exp-P-12;/<span class="witnessSiglum" data-docid="10012">𝔓¹²<\/span>/g
+s/&P;&exp-P-13;/<span class="witnessSiglum" data-docid="10013">𝔓¹³<\/span>/g
+s/&P;&exp-P-15;/<span class="witnessSiglum" data-docid="10015">𝔓¹⁵<\/span>/g
+s/&P;&exp-P-16;/<span class="witnessSiglum" data-docid="10016">𝔓¹⁶<\/span>/g
+s/&P;&exp-P-17;/<span class="witnessSiglum" data-docid="10017">𝔓¹⁷<\/span>/g
+s/&P;&exp-P-18;/<span class="witnessSiglum" data-docid="10018">𝔓¹⁸<\/span>/g
+s/&P;&exp-P-19;/<span class="witnessSiglum" data-docid="10019">𝔓¹⁹<\/span>/g
+s/&P;&exp-P-1;/<span class="witnessSiglum" data-docid="10001">𝔓¹<\/span>/g
+s/&P;&exp-P-20;/<span class="witnessSiglum" data-docid="10020">𝔓²⁰<\/span>/g
+s/&P;&exp-P-21;/<span class="witnessSiglum" data-docid="10021">𝔓²¹<\/span>/g
+s/&P;&exp-P-22;/<span class="witnessSiglum" data-docid="10022">𝔓²²<\/span>/g
+s/&P;&exp-P-23;/<span class="witnessSiglum" data-docid="10023">𝔓²³<\/span>/g
+s/&P;&exp-P-24;/<span class="witnessSiglum" data-docid="10024">𝔓²⁴<\/span>/g
+s/&P;&exp-P-25;/<span class="witnessSiglum" data-docid="10025">𝔓²⁵<\/span>/g
+s/&P;&exp-P-26;/<span class="witnessSiglum" data-docid="10026">𝔓²⁶<\/span>/g
+s/&P;&exp-P-27;/<span class="witnessSiglum" data-docid="10027">𝔓²⁷<\/span>/g
+s/&P;&exp-P-28;/<span class="witnessSiglum" data-docid="10028">𝔓²⁸<\/span>/g
+s/&P;&exp-P-2;/<span class="witnessSiglum" data-docid="10002">𝔓²<\/span>/g
+s/&P;&exp-P-30;/<span class="witnessSiglum" data-docid="10030">𝔓³⁰<\/span>/g
+s/&P;&exp-P-31;/<span class="witnessSiglum" data-docid="10031">𝔓³¹<\/span>/g
+s/&P;&exp-P-32;/<span class="witnessSiglum" data-docid="10032">𝔓³²<\/span>/g
+s/&P;&exp-P-33;/<span class="witnessSiglum" data-docid="10033">𝔓³³<\/span>/g
+s/&P;&exp-P-34;/<span class="witnessSiglum" data-docid="10034">𝔓³⁴<\/span>/g
+s/&P;&exp-P-35;/<span class="witnessSiglum" data-docid="10035">𝔓³⁵<\/span>/g
+s/&P;&exp-P-36;/<span class="witnessSiglum" data-docid="10036">𝔓³⁶<\/span>/g
+s/&P;&exp-P-37;/<span class="witnessSiglum" data-docid="10037">𝔓³⁷<\/span>/g
+s/&P;&exp-P-38;/<span class="witnessSiglum" data-docid="10038">𝔓³⁸<\/span>/g
+s/&P;&exp-P-39;/<span class="witnessSiglum" data-docid="10039">𝔓³⁹<\/span>/g
+s/&P;&exp-P-3;/<span class="witnessSiglum" data-docid="10003">𝔓³<\/span>/g
+s/&P;&exp-P-40;/<span class="witnessSiglum" data-docid="10040">𝔓⁴⁰<\/span>/g
+s/&P;&exp-P-41;/<span class="witnessSiglum" data-docid="10041">𝔓⁴¹<\/span>/g
+s/&P;&exp-P-44;/<span class="witnessSiglum" data-docid="10044">𝔓⁴⁴<\/span>/g
+s/&P;&exp-P-45;/<span class="witnessSiglum" data-docid="10045">𝔓⁴⁵<\/span>/g
+s/&P;&exp-P-46;/<span class="witnessSiglum" data-docid="10046">𝔓⁴⁶<\/span>/g
+s/&P;&exp-P-47;/<span class="witnessSiglum" data-docid="10047">𝔓⁴⁷<\/span>/g
+s/&P;&exp-P-48;/<span class="witnessSiglum" data-docid="10048">𝔓⁴⁸<\/span>/g
+s/&P;&exp-P-49;/<span class="witnessSiglum" data-docid="10049">𝔓⁴⁹<\/span>/g
+s/&P;&exp-P-4;/<span class="witnessSiglum" data-docid="10004">𝔓⁴<\/span>/g
+s/&P;&exp-P-50;/<span class="witnessSiglum" data-docid="10050">𝔓⁵⁰<\/span>/g
+s/&P;&exp-P-51;/<span class="witnessSiglum" data-docid="10051">𝔓⁵¹<\/span>/g
+s/&P;&exp-P-52;/<span class="witnessSiglum" data-docid="10052">𝔓⁵²<\/span>/g
+s/&P;&exp-P-53;/<span class="witnessSiglum" data-docid="10053">𝔓⁵³<\/span>/g
+s/&P;&exp-P-54;/<span class="witnessSiglum" data-docid="10054">𝔓⁵⁴<\/span>/g
+s/&P;&exp-P-55;/<span class="witnessSiglum" data-docid="10055">𝔓⁵⁵<\/span>/g
+s/&P;&exp-P-56;/<span class="witnessSiglum" data-docid="10056">𝔓⁵⁶<\/span>/g
+s/&P;&exp-P-57;/<span class="witnessSiglum" data-docid="10057">𝔓⁵⁷<\/span>/g
+s/&P;&exp-P-59;/<span class="witnessSiglum" data-docid="10059">𝔓⁵⁹<\/span>/g
+s/&P;&exp-P-5;/<span class="witnessSiglum" data-docid="10005">𝔓⁵<\/span>/g
+s/&P;&exp-P-60;/<span class="witnessSiglum" data-docid="10060">𝔓⁶⁰<\/span>/g
+s/&P;&exp-P-61;/<span class="witnessSiglum" data-docid="10061">𝔓⁶¹<\/span>/g
+s/&P;&exp-P-62;/<span class="witnessSiglum" data-docid="10062">𝔓⁶²<\/span>/g
+s/&P;&exp-P-63;/<span class="witnessSiglum" data-docid="10063">𝔓⁶³<\/span>/g
+s/&P;&exp-P-64;/<span class="witnessSiglum" data-docid="10064">𝔓⁶⁴<\/span>/g
+s/&P;&exp-P-65;/<span class="witnessSiglum" data-docid="10065">𝔓⁶⁵<\/span>/g
+s/&P;&exp-P-66;/<span class="witnessSiglum" data-docid="10066">𝔓⁶⁶<\/span>/g
+s/&P;&exp-P-68;/<span class="witnessSiglum" data-docid="10068">𝔓⁶⁸<\/span>/g
+s/&P;&exp-P-69;/<span class="witnessSiglum" data-docid="10069">𝔓⁶⁹<\/span>/g
+s/&P;&exp-P-6;/<span class="witnessSiglum" data-docid="10006">𝔓⁶<\/span>/g
+s/&P;&exp-P-70;/<span class="witnessSiglum" data-docid="10070">𝔓⁷⁰<\/span>/g
+s/&P;&exp-P-71;/<span class="witnessSiglum" data-docid="10071">𝔓⁷¹<\/span>/g
+s/&P;&exp-P-72;/<span class="witnessSiglum" data-docid="10072">𝔓⁷²<\/span>/g
+s/&P;&exp-P-74;/<span class="witnessSiglum" data-docid="10074">𝔓⁷⁴<\/span>/g
+s/&P;&exp-P-75;/<span class="witnessSiglum" data-docid="10075">𝔓⁷⁵<\/span>/g
+s/&P;&exp-P-77;/<span class="witnessSiglum" data-docid="10077">𝔓⁷⁷<\/span>/g
+s/&P;&exp-P-78;/<span class="witnessSiglum" data-docid="10078">𝔓⁷⁸<\/span>/g
+s/&P;&exp-P-79;/<span class="witnessSiglum" data-docid="10079">𝔓⁷⁹<\/span>/g
+s/&P;&exp-P-7;/<span class="witnessSiglum" data-docid="10007">𝔓⁷<\/span>/g
+s/&P;&exp-P-81;/<span class="witnessSiglum" data-docid="10081">𝔓⁸¹<\/span>/g
+s/&P;&exp-P-83;/<span class="witnessSiglum" data-docid="10083">𝔓⁸³<\/span>/g
+s/&P;&exp-P-84;/<span class="witnessSiglum" data-docid="10084">𝔓⁸⁴<\/span>/g
+s/&P;&exp-P-85;/<span class="witnessSiglum" data-docid="10085">𝔓⁸⁵<\/span>/g
+s/&P;&exp-P-86;/<span class="witnessSiglum" data-docid="10086">𝔓⁸⁶<\/span>/g
+s/&P;&exp-P-87;/<span class="witnessSiglum" data-docid="10087">𝔓⁸⁷<\/span>/g
+s/&P;&exp-P-88;/<span class="witnessSiglum" data-docid="10088">𝔓⁸⁸<\/span>/g
+s/&P;&exp-P-89;/<span class="witnessSiglum" data-docid="10089">𝔓⁸⁹<\/span>/g
+s/&P;&exp-P-8;/<span class="witnessSiglum" data-docid="10008">𝔓⁸<\/span>/g
+s/&P;&exp-P-90;/<span class="witnessSiglum" data-docid="10090">𝔓⁹⁰<\/span>/g
+s/&P;&exp-P-91;/<span class="witnessSiglum" data-docid="10091">𝔓⁹¹<\/span>/g
+s/&P;&exp-P-92;/<span class="witnessSiglum" data-docid="10092">𝔓⁹²<\/span>/g
+s/&P;&exp-P-94;/<span class="witnessSiglum" data-docid="10094">𝔓⁹⁴<\/span>/g
+s/&P;&exp-P-95;/<span class="witnessSiglum" data-docid="10095">𝔓⁹⁵<\/span>/g
+s/&P;&exp-P-96;/<span class="witnessSiglum" data-docid="10096">𝔓⁹⁶<\/span>/g
+s/&P;&exp-P-97;/<span class="witnessSiglum" data-docid="10097">𝔓⁹⁷<\/span>/g
+s/&P;&exp-P-98;/<span class="witnessSiglum" data-docid="10098">𝔓⁹⁸<\/span>/g
+s/&P;&exp-P-99;/<span class="witnessSiglum" data-docid="10099">𝔓⁹⁹<\/span>/g
+s/&P;&exp-P-9;/<span class="witnessSiglum" data-docid="10009">𝔓⁹<\/span>/g
+s/&exp-P-100;/¹⁰⁰/g
+s/&exp-P-101;/¹⁰¹/g
+s/&exp-P-103;/¹⁰³/g
+s/&exp-P-105;/¹⁰⁵/g
+s/&exp-P-106;/¹⁰⁶/g
+s/&exp-P-107;/¹⁰⁷/g
+s/&exp-P-108;/¹⁰⁸/g
+s/&exp-P-109;/¹⁰⁹/g
+s/&exp-P-10;/¹⁰/g
+s/&exp-P-110;/¹¹⁰/g
+s/&exp-P-111;/¹¹¹/g
+s/&exp-P-112;/¹¹²/g
+s/&exp-P-115;/¹¹⁵/g
+s/&exp-P-117;/¹¹⁷/g
+s/&exp-P-118;/¹¹⁸/g
+s/&exp-P-119;/¹¹⁹/g
+s/&exp-P-11;/¹¹/g
+s/&exp-P-120;/¹²⁰/g
+s/&exp-P-121;/¹²¹/g
+s/&exp-P-122;/¹²²/g
+s/&exp-P-123;/¹²³/g
+s/&exp-P-124;/¹²⁴/g
+s/&exp-P-125;/¹²⁵/g
+s/&exp-P-126;/¹²⁶/g
+s/&exp-P-127;/¹²⁷/g
+s/&exp-P-12;/¹²/g
+s/&exp-P-13;/¹³/g
+s/&exp-P-15;/¹⁵/g
+s/&exp-P-16;/¹⁶/g
+s/&exp-P-17;/¹⁷/g
+s/&exp-P-18;/¹⁸/g
+s/&exp-P-19;/¹⁹/g
+s/&exp-P-1;/¹/g
+s/&exp-P-20;/²⁰/g
+s/&exp-P-21;/²¹/g
+s/&exp-P-22;/²²/g
+s/&exp-P-23;/²³/g
+s/&exp-P-24;/²⁴/g
+s/&exp-P-25;/²⁵/g
+s/&exp-P-26;/²⁶/g
+s/&exp-P-27;/²⁷/g
+s/&exp-P-28;/²⁸/g
+s/&exp-P-2;/²/g
+s/&exp-P-30;/³⁰/g
+s/&exp-P-31;/³¹/g
+s/&exp-P-32;/³²/g
+s/&exp-P-33;/³³/g
+s/&exp-P-34;/³⁴/g
+s/&exp-P-35;/³⁵/g
+s/&exp-P-36;/³⁶/g
+s/&exp-P-37;/³⁷/g
+s/&exp-P-38;/³⁸/g
+s/&exp-P-39;/³⁹/g
+s/&exp-P-3;/³/g
+s/&exp-P-40;/⁴⁰/g
+s/&exp-P-41;/⁴¹/g
+s/&exp-P-44;/⁴⁴/g
+s/&exp-P-45;/⁴⁵/g
+s/&exp-P-46;/⁴⁶/g
+s/&exp-P-47;/⁴⁷/g
+s/&exp-P-48;/⁴⁸/g
+s/&exp-P-49;/⁴⁹/g
+s/&exp-P-4;/⁴/g
+s/&exp-P-50;/⁵⁰/g
+s/&exp-P-51;/⁵¹/g
+s/&exp-P-52;/⁵²/g
+s/&exp-P-53;/⁵³/g
+s/&exp-P-54;/⁵⁴/g
+s/&exp-P-55;/⁵⁵/g
+s/&exp-P-56;/⁵⁶/g
+s/&exp-P-57;/⁵⁷/g
+s/&exp-P-59;/⁵⁹/g
+s/&exp-P-5;/⁵/g
+s/&exp-P-60;/⁶⁰/g
+s/&exp-P-61;/⁶¹/g
+s/&exp-P-62;/⁶²/g
+s/&exp-P-63;/⁶³/g
+s/&exp-P-64;/⁶⁴/g
+s/&exp-P-65;/⁶⁵/g
+s/&exp-P-66;/⁶⁶/g
+s/&exp-P-68;/⁶⁸/g
+s/&exp-P-69;/⁶⁹/g
+s/&exp-P-6;/⁶/g
+s/&exp-P-70;/⁷⁰/g
+s/&exp-P-71;/⁷¹/g
+s/&exp-P-72;/⁷²/g
+s/&exp-P-74;/⁷⁴/g
+s/&exp-P-75;/⁷⁵/g
+s/&exp-P-77;/⁷⁷/g
+s/&exp-P-78;/⁷⁸/g
+s/&exp-P-79;/⁷⁹/g
+s/&exp-P-7;/⁷/g
+s/&exp-P-81;/⁸¹/g
+s/&exp-P-83;/⁸³/g
+s/&exp-P-84;/⁸⁴/g
+s/&exp-P-85;/⁸⁵/g
+s/&exp-P-86;/⁸⁶/g
+s/&exp-P-87;/⁸⁷/g
+s/&exp-P-88;/⁸⁸/g
+s/&exp-P-89;/⁸⁹/g
+s/&exp-P-8;/⁸/g
+s/&exp-P-90;/⁹⁰/g
+s/&exp-P-91;/⁹¹/g
+s/&exp-P-92;/⁹²/g
+s/&exp-P-94;/⁹⁴/g
+s/&exp-P-95;/⁹⁵/g
+s/&exp-P-96;/⁹⁶/g
+s/&exp-P-97;/⁹⁷/g
+s/&exp-P-98;/⁹⁸/g
+s/&exp-P-99;/⁹⁹/g
+s/&exp-P-9;/⁹/g
+s/&exp-Ptol-Ir;/<sup>Ir<\/sup>/g
+s/&exp-Ptol-Ir-lat;/<sup>Ir lat<\/sup>/g
+s/&exp-sa-ms;/<sup>ms<\/sup>/g
+s/&exp-sa-mss;/<sup>mss<\/sup>/g
+s/&exp-s;/<sup>s<\/sup>/g
+s/&exp-sy-c;/<sup>c<\/sup>/g
+s/&exp-sy-h-crit;/<sup>h**<\/sup>/g
+s/&exp-sy-h;/<sup>h<\/sup>/g
+s/&exp-sy-hmg;/<sup>hmg<\/sup>/g
+s/&exp-sy-ms;/<sup>ms<\/sup>/g
+s/&exp-sy-mss;/<sup>mss<\/sup>/g
+s/&exp-sy-p;/<sup>p<\/sup>/g
+s/&exp-sy-ph;/<sup>ph<\/sup>/g
+s/&exp-sy-s;/<sup>s<\/sup>/g
+s/&exp-txt;/<sup>txt<\/sup>/g
+s/&exp-vg-cl;/<sup>cl<\/sup>/g
+s/&exp-vg-ms;/<sup>vg-ms<\/sup>/g
+s/&exp-vg-mss;/<sup>mss<\/sup>/g
+s/&exp-vg-s;/<sup>s<\/sup>/g
+s/&exp-vg-st;/<sup>st<\/sup>/g
+s/&exp-vg-ww;/<sup>ww<\/sup>/g
+s/&exp-vid;/<sup>vid<\/sup>/g
+s/&exp-vl;/<sup>v.l.<\/sup>/g
+s/&exp-vother-ms;/<sup>ms<\/sup>/g
+s/&exp-vother-mss;/<sup>mss<\/sup>/g
+s/&exp-vother-pt;/<sup>pt<\/sup>/g
+s/&F-2Cl;/2Cl/g
+s/&F-Acac;/Acac/g
+s/&F-Ad;/Ad/g
+s/&F-Ambr;/Ambr/g
+s/&F-Ambst;/Ambst/g
+s/&F-Apr;/Apr/g
+s/&F-Athen;/Athen/g
+s/&F-Ath;/Ath/g
+s/&F-Aug;/Aug/g
+s/&F-BasA;/BasA/g
+s/&F-Bas;/Bas/g
+s/&F-BasilCl;/BasilCl/g
+s/&F-Bea;/Bea/g
+s/&F-Beda;/Beda/g
+s/&F-Cass;/Cass/g
+s/&F-Chr;/Chr/g
+s/&F-Cl;/Cl/g
+s/&F-Cn;/Cn/g
+s/&F-Cyp;/Cyp/g
+s/&F-Cyr;/Cyr/g
+s/&F-CyrJ;/CyrJ/g
+s/&F-Didache;/Didache/g
+s/&F-Did;/Did/g
+s/&F-Dion;/Dion/g
+s/&F-Ephr;/Ephr/g
+s/&F-Epiph;/Epiph/g
+s/&F-Eus;/Eus/g
+s/&F-Fulg;/Fulg/g
+s/&F-GrNy;/GrNy/g
+s/&F-Hes;/Hes/g
+s/&F-Hier;/Hier/g
+s/&F-Hil;/Hil/g
+s/&F-Hipp;/Hipp/g
+s/&F-Ir;/Ir/g
+s/&F-Ju;/Ju/g
+s/&F-JulCl;/JulCl/g
+s/&F-Lcf;/Lcf/g
+s/&F-Marc;/Marc/g
+s/&F-MarIr;/MarIr/g
+s/&F-MarIrlat;/Mar <sup>Ir lat<\/sup>/g
+s/&F-Mcion;/Mcion/g
+s/&F-Meth;/Meth/g
+s/&F-MVict;/MVict/g
+s/&F-Nic;/Nic/g
+s/&F-Nil;/Nil/g
+s/&F-Nov;/Nov/g
+s/&F-OphitesIrlat;/Ophites<sup>Ir lat<\/sup>/g
+s/&F-Or;/Or/g
+s/&F-Pel;/Pel/g
+s/&F-Polyc;/Polyc/g
+s/&F-Prim;/Prim/g
+s/&F-Prisc;/Prisc/g
+s/&F-PsAmbr;/PsAmbr/g
+s/&F-PsDion;/PsDion/g
+s/&F-Ptol;/Ptol/g
+s/&F-Spec;/Spec/g
+s/&F-Tert;/Tert/g
+s/&F-Theoph;/Theoph/g
+s/&F-Thret;/Thret/g
+s/&F-Tit;/Tit/g
+s/&F-Tyc;/Tyc/g
+s/&F-Vic;/Vic/g
+s/&hic;/hic/g
+s/‐/-/g
+s/&incert;/incert./g
+s/&inmg;/in mg/g
+s/&inscr;/Inscr./g
+s/&inscriptio;/<span class="italic">Inscriptio<\/span>/g
+s/&interp;/interp./g
+s/&lac-dot;/./g
+s/&lac-lsqb;/[/g
+s/&lac-rsqb;/]/g
+s/&l-a-d;/d/g
+s/&l-a-e;/e/g
+s/&l-a-gig;/gig/g
+s/&l-a-h;/h/g
+s/&l-a-l;/l/g
+s/&l-a-p;/p/g
+s/&l-a-r;/r/g
+s/&l-a-sin;/sin/g
+s/&l-a-s;/s/g
+s/&l-a-t;/t/g
+s/&l-a-w;/w/g
+s/&l-c-d;/d/g
+s/&l-c-ff;/ff/g
+s/&l-c-h;/h/g
+s/&l-c-l;/l/g
+s/&l-c-r;/r/g
+s/&l-c-s;/s/g
+s/&l-c-t;/t/g
+s/&l-c-w;/w/g
+s/&l-c-z;/z/g
+s/&ldots;/…/g
+s/&l-e-a-2;/a²/g
+s/&l-e-a;/a/g
+s/&l-e-aur;/aur/g
+s/&l-e-beta;/β/g
+s/&l-e-b;/b/g
+s/&l-e-c;/c/g
+s/&lect-1602;/<span data-docid="41602" class="witnessSiglum"><span class="italic">l<\/span> 1602<\/span>/g
+s/&lect-2211;/<span data-docid="42211" class="witnessSiglum"><span class="italic">l<\/span> 2211<\/span>/g
+s/&lect-249;/<span data-docid="40249" class="witnessSiglum"><span class="italic">l<\/span> 249<\/span>/g
+s/&lect-844;/<span data-docid="40844" class="witnessSiglum"><span class="italic">l<\/span> 844<\/span>/g
+s/&lect-846;/<span data-docid="40846" class="witnessSiglum"><span class="italic">l<\/span> 846<\/span>/g
+s/&l-e-d;/d/g
+s/&l-e-e;/e/g
+s/&l-e-ff-1;/ff¹/g
+s/&l-e-ff-2;/ff²/g
+s/&l-e-f;/f/g
+s/&l-e-g-1;/g¹/g
+s/&l-e-h;/h/g
+s/&l-e-i;/i/g
+s/&l-e-j;/j/g
+s/&l-e-k;/k/g
+s/&l-e-lambda;/λ/g
+s/&l-e-l;/l/g
+s/&l-e-my;/μ/g
+s/&l-e-n;/n/g
+s/&l-e-o;/o/g
+s/&l-e-pi;/π/g
+s/&l-e-p;/p/g
+s/&l-e-q;/q/g
+s/&l-e-r-1;/r¹/g
+s/&l-e-rho;/ρ/g
+s/&l-e-s;/s/g
+s/&l-e-t;/t/g
+s/&loco;/loco/g
+s/&l-p-ar;/ar/g
+s/&l-p-b;/b/g
+s/&l-p-d;/d/g
+s/&l-p-f;/f/g
+s/&l-p-g;/g/g
+s/&l-p-gue;/gue/g
+s/&l-p-m;/m/g
+s/&l-p-my;/μ/g
+s/&l-p-rho;/ρ/g
+s/&l-p-r;/r/g
+s/&l-p-t;/t/g
+s/&l-p-v;/v/g
+s/&l-p-z;/z/g
+s/&l-r-ar;/ar/g
+s/&l-r-gig;/gig/g
+s/&l-r-h;/h/g
+s/&l-r-sin;/sin/g
+s/&l-r-t;/t/g
+s/&M-0101;/<span class="witnessSiglum" data-docid="20101">0101<\/span>/g
+s/&M-0102;/<span class="witnessSiglum" data-docid="20102">0102<\/span>/g
+s/&M-0105;/<span class="witnessSiglum" data-docid="20105">0105<\/span>/g
+s/&M-0106;/<span class="witnessSiglum" data-docid="20106">0106<\/span>/g
+s/&M-0107;/<span class="witnessSiglum" data-docid="20107">0107<\/span>/g
+s/&M-0108;/<span class="witnessSiglum" data-docid="20108">0108<\/span>/g
+s/&M-0109;/<span class="witnessSiglum" data-docid="20109">0109<\/span>/g
+s/&M-010;/<span class="witnessSiglum" data-docid="20010">F<\/span>/g
+s/&M-0111;/<span class="witnessSiglum" data-docid="20111">0111<\/span>/g
+s/&M-0115;/<span class="witnessSiglum" data-docid="20115">0115<\/span>/g
+s/&M-0121;/<span class="witnessSiglum" data-docid="20121">0121<\/span>/g
+s/&M-0122;/<span class="witnessSiglum" data-docid="20122">0122<\/span>/g
+s/&M-0126;/<span class="witnessSiglum" data-docid="20126">0126<\/span>/g
+s/&M-0127;/<span class="witnessSiglum" data-docid="20127">0127<\/span>/g
+s/&M-0128;/<span class="witnessSiglum" data-docid="20128">0128<\/span>/g
+s/&M-012;/<span class="witnessSiglum" data-docid="20012">G<\/span>/g
+s/&M-0130;/<span class="witnessSiglum" data-docid="20130">0130<\/span>/g
+s/&M-0131;/<span class="witnessSiglum" data-docid="20131">0131<\/span>/g
+s/&M-0132;/<span class="witnessSiglum" data-docid="20132">0132<\/span>/g
+s/&M-013;/<span class="witnessSiglum" data-docid="20013">H<\/span>/g
+s/&M-0140;/<span class="witnessSiglum" data-docid="20140">0140<\/span>/g
+s/&M-0141;/<span class="witnessSiglum" data-docid="20141">0141<\/span>/g
+s/&M-0143;/<span class="witnessSiglum" data-docid="20143">0143<\/span>/g
+s/&M-0145;/<span class="witnessSiglum" data-docid="20145">0145<\/span>/g
+s/&M-0146;/<span class="witnessSiglum" data-docid="20146">0146<\/span>/g
+s/&M-0147;/<span class="witnessSiglum" data-docid="20147">0147<\/span>/g
+s/&M-0148;/<span class="witnessSiglum" data-docid="20148">0148<\/span>/g
+s/&M-014;/<span class="witnessSiglum" data-docid="20014">H<\/span>/g
+s/&M-0150;/<span class="witnessSiglum" data-docid="20150">0150<\/span>/g
+s/&M-015;/<span class="witnessSiglum" data-docid="20015">H<\/span>/g
+s/&M-0160;/<span class="witnessSiglum" data-docid="20160">0160<\/span>/g
+s/&M-0161;/<span class="witnessSiglum" data-docid="20161">0161<\/span>/g
+s/&M-0162;/<span class="witnessSiglum" data-docid="20162">0162<\/span>/g
+s/&M-0163;/<span class="witnessSiglum" data-docid="20163">0163<\/span>/g
+s/&M-0165;/<span class="witnessSiglum" data-docid="20165">0165<\/span>/g
+s/&M-0167;/<span class="witnessSiglum" data-docid="20167">0167<\/span>/g
+s/&M-0169;/<span class="witnessSiglum" data-docid="20169">0169<\/span>/g
+s/&M-016;/<span class="witnessSiglum" data-docid="20016">I<\/span>/g
+s/&M-0170;/<span class="witnessSiglum" data-docid="20170">0170<\/span>/g
+s/&M-0171;/<span class="witnessSiglum" data-docid="20171">0171<\/span>/g
+s/&M-0172;/<span class="witnessSiglum" data-docid="20172">0172<\/span>/g
+s/&M-0175;/<span class="witnessSiglum" data-docid="20175">0175<\/span>/g
+s/&M-0176;/<span class="witnessSiglum" data-docid="20176">0176<\/span>/g
+s/&M-0177;/<span class="witnessSiglum" data-docid="20177">0177<\/span>/g
+s/&M-017;/<span class="witnessSiglum" data-docid="20017">K<\/span>/g
+s/&M-0181;/<span class="witnessSiglum" data-docid="20181">0181<\/span>/g
+s/&M-0182;/<span class="witnessSiglum" data-docid="20182">0182<\/span>/g
+s/&M-0183;/<span class="witnessSiglum" data-docid="20183">0183<\/span>/g
+s/&M-0184;/<span class="witnessSiglum" data-docid="20184">0184<\/span>/g
+s/&M-0185;/<span class="witnessSiglum" data-docid="20185">0185<\/span>/g
+s/&M-0186;/<span class="witnessSiglum" data-docid="20186">0186<\/span>/g
+s/&M-0187;/<span class="witnessSiglum" data-docid="20187">0187<\/span>/g
+s/&M-0188;/<span class="witnessSiglum" data-docid="20188">0188<\/span>/g
+s/&M-0189;/<span class="witnessSiglum" data-docid="20189">0189<\/span>/g
+s/&M-018;/<span class="witnessSiglum" data-docid="20018">K<\/span>/g
+s/&M-0198;/<span class="witnessSiglum" data-docid="20198">0198<\/span>/g
+s/&M-0199;/<span class="witnessSiglum" data-docid="20199">0199<\/span>/g
+s/&M-019;/<span class="witnessSiglum" data-docid="20019">L<\/span>/g
+s/&M-01;/<span class="witnessSiglum" data-docid="20001">א<\/span>/g
+s/&M-0201;/<span class="witnessSiglum" data-docid="20201">0201<\/span>/g
+s/&M-0204;/<span class="witnessSiglum" data-docid="20204">0204<\/span>/g
+s/&M-0207;/<span class="witnessSiglum" data-docid="20207">0207<\/span>/g
+s/&M-0208;/<span class="witnessSiglum" data-docid="20208">0208<\/span>/g
+s/&M-0209;/<span class="witnessSiglum" data-docid="20209">0209<\/span>/g
+s/&M-020;/<span class="witnessSiglum" data-docid="20020">L<\/span>/g
+s/&M-0210;/<span class="witnessSiglum" data-docid="20210">0210<\/span>/g
+s/&M-0211;/<span class="witnessSiglum" data-docid="20211">0211<\/span>/g
+s/&M-0213;/<span class="witnessSiglum" data-docid="20213">0213<\/span>/g
+s/&M-0214;/<span class="witnessSiglum" data-docid="20214">0214<\/span>/g
+s/&M-0216;/<span class="witnessSiglum" data-docid="20216">0216<\/span>/g
+s/&M-0217;/<span class="witnessSiglum" data-docid="20217">0217<\/span>/g
+s/&M-0218;/<span class="witnessSiglum" data-docid="20218">0218<\/span>/g
+s/&M-0219;/<span class="witnessSiglum" data-docid="20219">0219<\/span>/g
+s/&M-0220;/<span class="witnessSiglum" data-docid="20220">0220<\/span>/g
+s/&M-0221;/<span class="witnessSiglum" data-docid="20221">0221<\/span>/g
+s/&M-0222;/<span class="witnessSiglum" data-docid="20222">0222<\/span>/g
+s/&M-0223;/<span class="witnessSiglum" data-docid="20223">0223<\/span>/g
+s/&M-0225;/<span class="witnessSiglum" data-docid="20225">0225<\/span>/g
+s/&M-0226;/<span class="witnessSiglum" data-docid="20226">0226<\/span>/g
+s/&M-0227;/<span class="witnessSiglum" data-docid="20227">0227<\/span>/g
+s/&M-0228;/<span class="witnessSiglum" data-docid="20228">0228<\/span>/g
+s/&M-0229;/<span class="witnessSiglum" data-docid="20229">0229<\/span>/g
+s/&M-022;/<span class="witnessSiglum" data-docid="20022">N<\/span>/g
+s/&M-0231;/<span class="witnessSiglum" data-docid="20231">0231<\/span>/g
+s/&M-0234;/<span class="witnessSiglum" data-docid="20234">0234<\/span>/g
+s/&M-0236;/<span class="witnessSiglum" data-docid="20236">0236<\/span>/g
+s/&M-0237;/<span class="witnessSiglum" data-docid="20237">0237<\/span>/g
+s/&M-0238;/<span class="witnessSiglum" data-docid="20238">0238<\/span>/g
+s/&M-0239;/<span class="witnessSiglum" data-docid="20239">0239<\/span>/g
+s/&M-0240;/<span class="witnessSiglum" data-docid="20240">0240<\/span>/g
+s/&M-0241;/<span class="witnessSiglum" data-docid="20241">0241<\/span>/g
+s/&M-0242;/<span class="witnessSiglum" data-docid="20242">0242<\/span>/g
+s/&M-0243;/<span class="witnessSiglum" data-docid="20243">0243<\/span>/g
+s/&M-0244;/<span class="witnessSiglum" data-docid="20244">0244<\/span>/g
+s/&M-0249;/<span class="witnessSiglum" data-docid="20249">0249<\/span>/g
+s/&M-024;/<span class="witnessSiglum" data-docid="20024">P<\/span>/g
+s/&M-0252;/<span class="witnessSiglum" data-docid="20252">0252<\/span>/g
+s/&M-0254;/<span class="witnessSiglum" data-docid="20254">0254<\/span>/g
+s/&M-025;/<span class="witnessSiglum" data-docid="20025">P<\/span>/g
+s/&M-0260;/<span class="witnessSiglum" data-docid="20260">0260<\/span>/g
+s/&M-0261;/<span class="witnessSiglum" data-docid="20261">0261<\/span>/g
+s/&M-0262;/<span class="witnessSiglum" data-docid="20262">0262<\/span>/g
+s/&M-0266;/<span class="witnessSiglum" data-docid="20266">0266<\/span>/g
+s/&M-0269;/<span class="witnessSiglum" data-docid="20269">0269<\/span>/g
+s/&M-026;/<span class="witnessSiglum" data-docid="20026">Q<\/span>/g
+s/&M-0270;/<span class="witnessSiglum" data-docid="20270">0270<\/span>/g
+s/&M-0271;/<span class="witnessSiglum" data-docid="20271">0271<\/span>/g
+s/&M-0274;/<span class="witnessSiglum" data-docid="20274">0274<\/span>/g
+s/&M-0275;/<span class="witnessSiglum" data-docid="20275">0275<\/span>/g
+s/&M-0277;/<span class="witnessSiglum" data-docid="20277">0277<\/span>/g
+s/&M-0278;/<span class="witnessSiglum" data-docid="20278">0278<\/span>/g
+s/&M-0279;/<span class="witnessSiglum" data-docid="20279">0279<\/span>/g
+s/&M-0281;/<span class="witnessSiglum" data-docid="20281">0281<\/span>/g
+s/&M-0282;/<span class="witnessSiglum" data-docid="20282">0282<\/span>/g
+s/&M-0285;/<span class="witnessSiglum" data-docid="20285">0285<\/span>/g
+s/&M-0289;/<span class="witnessSiglum" data-docid="20289">0289<\/span>/g
+s/&M-028;/<span class="witnessSiglum" data-docid="20028">S<\/span>/g
+s/&M-0291;/<span class="witnessSiglum" data-docid="20291">0291<\/span>/g
+s/&M-0292;/<span class="witnessSiglum" data-docid="20292">0292<\/span>/g
+s/&M-0293;/<span class="witnessSiglum" data-docid="20293">0293<\/span>/g
+s/&M-0294;/<span class="witnessSiglum" data-docid="20294">0294<\/span>/g
+s/&M-0296;/<span class="witnessSiglum" data-docid="20296">0296<\/span>/g
+s/&M-0298;/<span class="witnessSiglum" data-docid="20298">0298<\/span>/g
+s/&M-0299;/<span class="witnessSiglum" data-docid="20299">0299<\/span>/g
+s/&M-029;/<span class="witnessSiglum" data-docid="20029">T<\/span>/g
+s/&M-02;/<span class="witnessSiglum" data-docid="20002">A<\/span>/g
+s/&M-0301;/<span class="witnessSiglum" data-docid="20301">0301<\/span>/g
+s/&M-0303;/<span class="witnessSiglum" data-docid="20303">0303<\/span>/g
+s/&M-032;/<span class="witnessSiglum" data-docid="20032">W<\/span>/g
+s/&M-033;/<span class="witnessSiglum" data-docid="20033">X<\/span>/g
+s/&M-035;/<span class="witnessSiglum" data-docid="20035">Z<\/span>/g
+s/&M-036;/<span class="witnessSiglum" data-docid="20036">Γ<\/span>/g
+s/&M-037;/<span class="witnessSiglum" data-docid="20037">Δ<\/span>/g
+s/&M-038;/<span class="witnessSiglum" data-docid="20038">Θ<\/span>/g
+s/&M-039;/<span class="witnessSiglum" data-docid="20039">Λ<\/span>/g
+s/&M-03;/<span class="witnessSiglum" data-docid="20003">B<\/span>/g
+s/&M-040;/<span class="witnessSiglum" data-docid="20040">Ξ<\/span>/g
+s/&M-043;/<span class="witnessSiglum" data-docid="20043">Φ<\/span>/g
+s/&M-044;/<span class="witnessSiglum" data-docid="20044">Ψ<\/span>/g
+s/&M-046;/<span class="witnessSiglum" data-docid="20046">046<\/span>/g
+s/&M-048;/<span class="witnessSiglum" data-docid="20048">048<\/span>/g
+s/&M-049;/<span class="witnessSiglum" data-docid="20049">049<\/span>/g
+s/&M-04;/<span class="witnessSiglum" data-docid="20004">C<\/span>/g
+s/&M-050;/<span class="witnessSiglum" data-docid="20050">050<\/span>/g
+s/&M-051;/<span class="witnessSiglum" data-docid="20051">051<\/span>/g
+s/&M-058;/<span class="witnessSiglum" data-docid="20058">058<\/span>/g
+s/&M-059;/<span class="witnessSiglum" data-docid="20059">059<\/span>/g
+s/&M-05;/<span class="witnessSiglum" data-docid="20005">D<\/span>/g
+s/&M-060;/<span class="witnessSiglum" data-docid="20060">060<\/span>/g
+s/&M-062;/<span class="witnessSiglum" data-docid="20062">062<\/span>/g
+s/&M-066;/<span class="witnessSiglum" data-docid="20066">066<\/span>/g
+s/&M-067;/<span class="witnessSiglum" data-docid="20067">067<\/span>/g
+s/&M-068;/<span class="witnessSiglum" data-docid="20068">068<\/span>/g
+s/&M-069;/<span class="witnessSiglum" data-docid="20069">069<\/span>/g
+s/&M-06;/<span class="witnessSiglum" data-docid="20006">D<\/span>/g
+s/&M-070;/<span class="witnessSiglum" data-docid="20070">070<\/span>/g
+s/&M-071;/<span class="witnessSiglum" data-docid="20071">071<\/span>/g
+s/&M-072;/<span class="witnessSiglum" data-docid="20072">072<\/span>/g
+s/&M-073;/<span class="witnessSiglum" data-docid="20073">073<\/span>/g
+s/&M-075;/<span class="witnessSiglum" data-docid="20075">075<\/span>/g
+s/&M-076;/<span class="witnessSiglum" data-docid="20076">076<\/span>/g
+s/&M-078;/<span class="witnessSiglum" data-docid="20078">078<\/span>/g
+s/&M-079;/<span class="witnessSiglum" data-docid="20079">079<\/span>/g
+s/&M-07;/<span class="witnessSiglum" data-docid="20007">E<\/span>/g
+s/&M-082;/<span class="witnessSiglum" data-docid="20082">082<\/span>/g
+s/&M-083;/<span class="witnessSiglum" data-docid="20083">083<\/span>/g
+s/&M-085;/<span class="witnessSiglum" data-docid="20085">085<\/span>/g
+s/&M-086;/<span class="witnessSiglum" data-docid="20086">086<\/span>/g
+s/&M-087;/<span class="witnessSiglum" data-docid="20087">087<\/span>/g
+s/&M-088;/<span class="witnessSiglum" data-docid="20088">088<\/span>/g
+s/&M-08;/<span class="witnessSiglum" data-docid="20008">E<\/span>/g
+s/&M-091;/<span class="witnessSiglum" data-docid="20091">091<\/span>/g
+s/&M-094;/<span class="witnessSiglum" data-docid="20094">094<\/span>/g
+s/&M-095;/<span class="witnessSiglum" data-docid="20095">095<\/span>/g
+s/&M-096;/<span class="witnessSiglum" data-docid="20096">096<\/span>/g
+s/&M-097;/<span class="witnessSiglum" data-docid="20097">097<\/span>/g
+s/&M-098;/<span class="witnessSiglum" data-docid="20098">098<\/span>/g
+s/&M-099;/<span class="witnessSiglum" data-docid="20099">099<\/span>/g
+s/&m-1006;/<span class="witnessSiglum" data-docid="31006">1006<\/span>/g
+s/&m-1012;/<span class="witnessSiglum" data-docid="31012">1012<\/span>/g
+s/&m-104;/<span class="witnessSiglum" data-docid="30104">104<\/span>/g
+s/&m-1175;/<span class="witnessSiglum" data-docid="31175">1175<\/span>/g
+s/&m-118;/<span class="witnessSiglum" data-docid="30118">118<\/span>/g
+s/&m-1195;/<span class="witnessSiglum" data-docid="31195">1195<\/span>/g
+s/&m-1241;/<span class="witnessSiglum" data-docid="31241">1241<\/span>/g
+s/&m-1243;/<span class="witnessSiglum" data-docid="31243">1243<\/span>/g
+s/&m-1253;/<span class="witnessSiglum" data-docid="31253">1253<\/span>/g
+s/&m-131;/<span class="witnessSiglum" data-docid="30131">131<\/span>/g
+s/&m-1333;/<span class="witnessSiglum" data-docid="31333">1333<\/span>/g
+s/&m-13;/<span class="witnessSiglum" data-docid="30013">13<\/span>/g
+s/&m-1424;/<span class="witnessSiglum" data-docid="31424">1424<\/span>/g
+s/&m-1448;/<span class="witnessSiglum" data-docid="31448">1448<\/span>/g
+s/&m-1505;/<span class="witnessSiglum" data-docid="31505">1505<\/span>/g
+s/&m-1506;/<span class="witnessSiglum" data-docid="31506">1506<\/span>/g
+s/&m-157;/<span class="witnessSiglum" data-docid="30157">157<\/span>/g
+s/&m-1582;/<span class="witnessSiglum" data-docid="31582">1582<\/span>/g
+s/&m-1611;/<span class="witnessSiglum" data-docid="31611">1611<\/span>/g
+s/&m-162;/<span class="witnessSiglum" data-docid="30162">162<\/span>/g
+s/&m-1704;/<span class="witnessSiglum" data-docid="31704">1704<\/span>/g
+s/&m-1718;/<span class="witnessSiglum" data-docid="31718">1718<\/span>/g
+s/&m-1735;/<span class="witnessSiglum" data-docid="31735">1735<\/span>/g
+s/&m-1739;/<span class="witnessSiglum" data-docid="31739">1739<\/span>/g
+s/&m-174;/<span class="witnessSiglum" data-docid="30174">174<\/span>/g
+s/&m-17;/<span class="witnessSiglum" data-docid="30017">17<\/span>/g
+s/&m-1841;/<span class="witnessSiglum" data-docid="31841">1841<\/span>/g
+s/&m-1852;/<span class="witnessSiglum" data-docid="31852">1852<\/span>/g
+s/&m-1854;/<span class="witnessSiglum" data-docid="31854">1854<\/span>/g
+s/&m-1881;/<span class="witnessSiglum" data-docid="31881">1881<\/span>/g
+s/&m-1884;/<span class="witnessSiglum" data-docid="31884">1884<\/span>/g
+s/&m-1891;/<span class="witnessSiglum" data-docid="31891">1891<\/span>/g
+s/&m-189;/<span class="witnessSiglum" data-docid="30189">189<\/span>/g
+s/&m-18;/<span class="witnessSiglum" data-docid="30018">18<\/span>/g
+s/&m-1;/<span class="witnessSiglum" data-docid="30001">1<\/span>/g
+s/&m-2030;/<span class="witnessSiglum" data-docid="32030">2030<\/span>/g
+s/&m-2050;/<span class="witnessSiglum" data-docid="32050">2050<\/span>/g
+s/&m-2053;/<span class="witnessSiglum" data-docid="32053">2053<\/span>/g
+s/&m-2062;/<span class="witnessSiglum" data-docid="32062">2062<\/span>/g
+s/&m-209;/<span class="witnessSiglum" data-docid="30209">209<\/span>/g
+s/&m-2147;/<span class="witnessSiglum" data-docid="32147">2147<\/span>/g
+s/&m-21;/<span class="witnessSiglum" data-docid="30021">21<\/span>/g
+s/&m-221;/<span class="witnessSiglum" data-docid="30221">221<\/span>/g
+s/&m-225;/<span class="witnessSiglum" data-docid="30225">225<\/span>/g
+s/&m-22;/<span class="witnessSiglum" data-docid="30022">22<\/span>/g
+s/&m-230;/<span class="witnessSiglum" data-docid="30230">230<\/span>/g
+s/&m-2318;/<span class="witnessSiglum" data-docid="32318">2318<\/span>/g
+s/&m-2329;/<span class="witnessSiglum" data-docid="32329">2329<\/span>/g
+s/&m-2344;/<span class="witnessSiglum" data-docid="32344">2344<\/span>/g
+s/&m-2351;/<span class="witnessSiglum" data-docid="32351">2351<\/span>/g
+s/&m-2377;/<span class="witnessSiglum" data-docid="32377">2377<\/span>/g
+s/&m-2464;/<span class="witnessSiglum" data-docid="32464">2464<\/span>/g
+s/&m-2473;/<span class="witnessSiglum" data-docid="32473">2473<\/span>/g
+s/&m-2492;/<span class="witnessSiglum" data-docid="32492">2492<\/span>/g
+s/&m-2495;/<span class="witnessSiglum" data-docid="32495">2495<\/span>/g
+s/&m-2541;/<span class="witnessSiglum" data-docid="32541">2541<\/span>/g
+s/&m-2542;/<span class="witnessSiglum" data-docid="32542">2542<\/span>/g
+s/&m-2685;/<span class="witnessSiglum" data-docid="32685">2685<\/span>/g
+s/&m-274;/<span class="witnessSiglum" data-docid="30274">274<\/span>/g
+s/&m-2768;/<span class="witnessSiglum" data-docid="32768">2768<\/span>/g
+s/&m-2818;/<span class="witnessSiglum" data-docid="32818">2818<\/span>/g
+s/&m-288;/<span class="witnessSiglum" data-docid="30288">288<\/span>/g
+s/&m-28;/<span class="witnessSiglum" data-docid="30028">28<\/span>/g
+s/&m-304;/<span class="witnessSiglum" data-docid="30304">304<\/span>/g
+s/&m-307;/<span class="witnessSiglum" data-docid="30307">307<\/span>/g
+s/&m-30;/<span class="witnessSiglum" data-docid="30030">30<\/span>/g
+s/&m-323;/<span class="witnessSiglum" data-docid="30323">323<\/span>/g
+s/&m-326;/<span class="witnessSiglum" data-docid="30326">326<\/span>/g
+s/&m-33;/<span class="witnessSiglum" data-docid="30033">33<\/span>/g
+s/&m-346;/<span class="witnessSiglum" data-docid="30346">346<\/span>/g
+s/&m-365;/<span class="witnessSiglum" data-docid="30365">365<\/span>/g
+s/&m-424;/<span class="witnessSiglum" data-docid="30424">424<\/span>/g
+s/&m-429;/<span class="witnessSiglum" data-docid="30429">429<\/span>/g
+s/&m-42;/<span class="witnessSiglum" data-docid="30042">42<\/span>/g
+s/&m-436;/<span class="witnessSiglum" data-docid="30436">436<\/span>/g
+s/&m-440;/<span class="witnessSiglum" data-docid="30440">440<\/span>/g
+s/&m-442;/<span class="witnessSiglum" data-docid="30442">442<\/span>/g
+s/&m-453;/<span class="witnessSiglum" data-docid="30453">453<\/span>/g
+s/&m-460;/<span class="witnessSiglum" data-docid="30460">460<\/span>/g
+s/&m-467;/<span class="witnessSiglum" data-docid="30467">467<\/span>/g
+s/&m-565;/<span class="witnessSiglum" data-docid="30565">565<\/span>/g
+s/&m-579;/<span class="witnessSiglum" data-docid="30579">579<\/span>/g
+s/&m-5;/<span class="witnessSiglum" data-docid="30005">5<\/span>/g
+s/&m-606;/<span class="witnessSiglum" data-docid="30606">606<\/span>/g
+s/&m-614;/<span class="witnessSiglum" data-docid="30614">614<\/span>/g
+s/&m-61;/<span class="witnessSiglum" data-docid="30061">61<\/span>/g
+s/&m-623;/<span class="witnessSiglum" data-docid="30623">623<\/span>/g
+s/&m-629;/<span class="witnessSiglum" data-docid="30629">629<\/span>/g
+s/&m-630;/<span class="witnessSiglum" data-docid="30630">630<\/span>/g
+s/&m-636;/<span class="witnessSiglum" data-docid="30636">636<\/span>/g
+s/&m-642;/<span class="witnessSiglum" data-docid="30642">642<\/span>/g
+s/&m-64;/<span class="witnessSiglum" data-docid="30064">64<\/span>/g
+s/&m-69;/<span class="witnessSiglum" data-docid="30069">69<\/span>/g
+s/&m-6;/<span class="witnessSiglum" data-docid="30006">6<\/span>/g
+s/&m-700;/<span class="witnessSiglum" data-docid="30700">700<\/span>/g
+s/&m-81;/<span class="witnessSiglum" data-docid="30081">81<\/span>/g
+s/&m-828;/<span class="witnessSiglum" data-docid="30828">828<\/span>/g
+s/&m-88;/<span class="witnessSiglum" data-docid="30088">88<\/span>/g
+s/&m-892;/<span class="witnessSiglum" data-docid="30892">892<\/span>/g
+s/&m-918;/<span class="witnessSiglum" data-docid="30918">918<\/span>/g
+s/&m-945;/<span class="witnessSiglum" data-docid="30945">945<\/span>/g
+s/&m-97;/<span class="witnessSiglum" data-docid="30097">97<\/span>/g
+s/&m-998;/<span class="witnessSiglum" data-docid="30998">998<\/span>/g
+s/&m-f;/<span class="italic">f<\/span>/g
+s/−/—/g
+s/&m-pm;/<span class="italic">pm<\/span>/g
+s/&novies;/novies/g
+s/&obelus;/obel./g
+s/&octies;/octies/g
+s/&omittit;/om./g
+s/&ordinvers;/ord. invers./g
+s/¶ph;/¶/g
+s/&partim;/partim/g
+s/+/+/g
+s/&pon;/pon./g
+s/&post;/p./g
+s/&P;/𝔓/g
+s/&pro;/pro/g
+s/&sed;/sed/g
+s/&sequens;/s/g
+s/&sic;/!/g
+s/&sine;/sine/g
+s/&sinetest;/sine test./g
+s/&stigmagr;/ϛ/g
+s/&terminat;/terminat/g
+s/&ter;/ter/g
+s/&txt;/<span class="italic">txt<\/span>/g
+s/&usque;/usque/g
+s/&ut;/<sup>ut<\/sup>/g
+s/&v-ac;/ac/g
+s/&v-aeth;/aeth/g
+s/&v-arm;/arm/g
+s/&v-bo;/bo/g
+s/&v-co;/co/g
+s/&v-cv;/cv/g
+s/&v-cw;/cw/g
+s/&vel;/vel/g
+s/&versusplur;/vss/g
+s/&versussing;/vs/g
+s/&v-fa;/fa/g
+s/&v-geo;/geo/g
+s/&v-got;/got/g
+s/&vide;/v./g
+s/&v-it;/it/g
+s/&v-lat-t;/lat(t)/g
+s/&v-latt;/latt/g
+s/&v-lat;/lat/g
+s/&vl;/v.l./g
+s/&v-ly;/ly/g
+s/&v-mae;/mae/g
+s/&v-pbo;/pbo/g
+s/&v-sa;/sa/g
+s/&v-sy;/sy/g
+s/&v-vg;/vg/g

Added: trunk/modules/na28/entities.sed
===================================================================
--- trunk/modules/na28/entities.sed	                        (rev 0)
+++ trunk/modules/na28/entities.sed	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,224 @@
+s/^\xEF\xBB\xBF//g
+# problem in B1K4V4-22
+s/\/w><w /\/w>\n<w /g
+# problem with punctuation sometimes inside <w> tags
+s/\([.,]\)<\/w>/<\/w>\1/g
+s/&add1;/⸆¹/g
+s/&add2;/⸆²/g
+s/&add;/⸆/g
+s/&adddot;/⸇/g
+s/&agr-Ac;/ά/g
+s/&agr-AcIo;/ᾴ/g
+s/&agr;/α/g
+s/&Agr;/Α/g
+s/&agr-Ci;/ᾶ/g
+s/&agr-CiIo;/ᾷ/g
+s/&agr-Gr;/ὰ/g
+s/&agr-Io;/ᾳ/g
+s/&agr-RoAc;/ἅ/g
+s/&Agr-RoAc;/Ἄ/g
+s/&agr-RoAcIo;/ᾅ/g
+s/&agr-Ro;/ἁ/g
+s/&Agr-Ro;/Ἁ/g
+s/&agr-RoGr;/ἃ/g
+s/&agr-SmAc;/ἄ/g
+s/&Agr-SmAc;/Ἄ/g
+s/&agr-SmAcIo;/ᾄ/g
+s/&agr-Sm;/ἀ/g
+s/&Agr-Sm;/Ἀ/g
+s/&agr-SmCi;/ἆ/g
+s/&Agr-SmCi;/Ἆ/g
+s/&agr-SmGr;/ἂ/g
+s/&apocurl;/ ᾿/g
+s/&bgr;/β/g
+s/&Bgr;/Β/g
+s/&colon1;/˸¹/g
+s/&colon2;/˸²/g
+s/&colon3;/˸³/g
+s/:/˸/g
+s/&colongr;/·/g
+s/&dgr;/δ/g
+s/&Dgr;/Δ/g
+s/&eegr-Ac;/ή/g
+s/&eegr-AcIo;/ῄ/g
+s/&eegr-Ci;/ῆ/g
+s/&eegr-CiIo;/ῇ/g
+s/&eegr;/η/g
+s/&EEgr;/Η/g
+s/&eegr-Gr;/ὴ/g
+s/&eegr-Io;/ῃ/g
+s/&eegr-RoAc;/ἥ/g
+s/&EEgr-RoAc;/Ἥ/g
+s/&eegr-RoCi;/ἧ/g
+s/&eegr-RoCiIo;/ᾗ/g
+s/&eegr-Ro;/ἡ/g
+s/&EEgr-Ro;/Ἡ/g
+s/&eegr-RoGr;/ἣ/g
+s/&EEgr-RoGr;/Ἣ/g
+s/&eegr-RoIo;/ᾑ/g
+s/&eegr-SmAc;/ἤ/g
+s/&EEgr-SmAc;/Ἤ/g
+s/&eegr-SmAcIo;/ᾔ/g
+s/&eegr-SmCi;/ἦ/g
+s/&EEgr-SmCi;/Ἦ/g
+s/&eegr-SmCiIo;/ᾖ/g
+s/&eegr-Sm;/ἠ/g
+s/&EEgr-Sm;/Ἠ/g
+s/&eegr-SmGr;/ἢ/g
+s/&EEgr-SmGr;/Ἢ/g
+s/&eegr-SmIo;/ᾐ/g
+s/&egr-Ac;/έ/g
+s/&egr;/ε/g
+s/&Egr;/Ε/g
+s/&egr-Gr;/ὲ/g
+s/&egr-RoAc;/ἕ/g
+s/&Egr-RoAc;/Ἕ/g
+s/&egr-Ro;/ἑ/g
+s/&Egr-Ro;/Ἑ/g
+s/&egr-RoGr;/ἓ/g
+s/&Egr-RoGr;/Ἓ/g
+s/&egr-SmAc;/ἔ/g
+s/&Egr-SmAc;/Ἔ/g
+s/&egr-Sm;/ἐ/g
+s/&Egr-Sm;/Ἐ/g
+s/&exp-nonWit1;/¹/g
+s/&exp-nonWit2;/²/g
+s/&ggr;/γ/g
+s/&Ggr;/Γ/g
+s/&igr-Ac;/ί/g
+s/&igr-Ci;/ῖ/g
+s/&igr-DiAc;/ΐ/g
+s/&igr-DiGr;/ῒ/g
+s/&igr-Di;/ϊ/g
+s/&igr-Gr;/ὶ/g
+s/&igr;/ι/g
+s/&Igr;/Ι/g
+s/&igr-RoAc;/ἵ/g
+s/&Igr-RoAc;/Ἵ/g
+s/&igr-RoCi;/ἷ/g
+s/&igr-RoGr;/ἳ/g
+s/&igr-Ro;/ἱ/g
+s/&Igr-Ro;/Ἱ/g
+s/&igr-SmAc;/ἴ/g
+s/&Igr-SmAc;/Ἴ/g
+s/&igr-SmCi;/ἶ/g
+s/&igr-Sm;/ἰ/g
+s/&Igr-Sm;/Ἰ/g
+s/&kgr;/κ/g
+s/&Kgr;/Κ/g
+s/&khgr;/χ/g
+s/&KHgr;/Χ/g
+s/&lgr;/λ/g
+s/&Lgr;/Λ/g
+s/&lwhsqb;/⟦/g
+s/&mgr;/μ/g
+s/&Mgr;/Μ/g
+s/–/–/g
+s/&ngr;/ν/g
+s/&Ngr;/Ν/g
+s/&numsigngr;/ʹ/g
+s/&ogr-Ac;/ό/g
+s/&ogr-Gr;/ὸ/g
+s/&ogr;/ο/g
+s/&Ogr;/Ο/g
+s/&ogr-RoAc;/ὅ/g
+s/&Ogr-RoAc;/Ὅ/g
+s/&ogr-RoGr;/ὃ/g
+s/&Ogr-RoGr;/Ὃ/g
+s/&ogr-Ro;/ὁ/g
+s/&Ogr-Ro;/Ὁ/g
+s/&ogr-SmAc;/ὄ/g
+s/&Ogr-SmAc;/Ὄ/g
+s/&ogr-SmGr;/ὂ/g
+s/&ogr-Sm;/ὀ/g
+s/&Ogr-Sm;/Ὀ/g
+s/&ohgr-AcIo;/ῴ/g
+s/&ohgr-Ac;/ώ/g
+s/&ohgr-CiIo;/ῷ/g
+s/&ohgr-Ci;/ῶ/g
+s/&ohgr-Gr;/ὼ/g
+s/&ohgr-Io;/ῳ/g
+s/&ohgr;/ω/g
+s/&OHgr;/Ω/g
+s/&ohgr-RoAc;/ὥ/g
+s/&OHgr-RoAc;/Ὥ/g
+s/&ohgr-RoCiIo;/ᾧ/g
+s/&ohgr-RoCi;/ὧ/g
+s/&OHgr-RoCi;/Ὧ/g
+s/&ohgr-Ro;/ὡ/g
+s/&OHgr-Ro;/Ὡ/g
+s/&ohgr-SmAc;/ὤ/g
+s/&ohgr-SmCi;/ὦ/g
+s/&OHgr-SmCi;/Ὦ/g
+s/&ohgr-SmGr;/ὢ/g
+s/&ohgr-SmIo;/ᾠ/g
+s/&ohgr-Sm;/ὠ/g
+s/&omit1;/°¹/g
+s/&omit2;/°²/g
+s/&omitbeg1;/⸋¹/g
+s/&omitbeg2;/⸋²/g
+s/&omitbeg;/⸋/g
+s/&omitend1;/⸌¹/g
+s/&omitend;/⸌/g
+s/&omit;/°/g
+s/&ot-ast;/*/g
+s/&ot-lsqb;/[/g
+s/&ot-rsqb;/]/g
+s/&pgr;/π/g
+s/&Pgr;/Π/g
+s/&phgr;/φ/g
+s/&PHgr;/Φ/g
+s/&psgr;/ψ/g
+s/&PSgr;/Ψ/g
+s/&questgr;/;/g
+s/&ran1;/⸀¹/g
+s/&ran2;/⸀²/g
+s/&ran3;/⸀³/g
+s/&randot;/⸁/g
+s/&ran;/⸀/g
+s/&rgr;/ρ/g
+s/&Rgr;/Ρ/g
+s/&rgr-Ro;/ῥ/g
+s/&Rgr-Ro;/Ῥ/g
+s/&rhombus;/◆/g
+s/&rwhsqb;/⟧/g
+s/&sfgr;/ς/g
+s/&sgr;/σ/g
+s/&Sgr;/Σ/g
+s/&subpar;/ /g
+s/&swl1;/⸂¹/g
+s/&swl2;/⸂²/g
+s/&swldot;/⸄/g
+s/&swl;/⸂/g
+s/&swrdot;/⸅/g
+s/&swr;/⸃/g
+s/&tgr;/τ/g
+s/&Tgr;/Τ/g
+s/&thgr;/θ/g
+s/&THgr;/Θ/g
+s/&transl1;/⸉¹/g
+s/&transldot;/⸈/g
+s/&transl;/⸉/g
+s/&transr;/⸊/g
+s/&ugr-Ac;/ύ/g
+s/&ugr-Ci;/ῦ/g
+s/&ugr-DiAc;/ΰ/g
+s/&ugr-DiGr;/ῢ/g
+s/&ugr-Di;/ϋ/g
+s/&ugr-Gr;/ὺ/g
+s/&ugr-RoAc;/ὕ/g
+s/&Ugr-RoAc;/Ὕ/g
+s/&ugr-RoCi;/ὗ/g
+s/&ugr-RoGr;/ὓ/g
+s/&ugr-Ro;/ὑ/g
+s/&Ugr-Ro;/Ὑ/g
+s/&ugr-SmAc;/ὔ/g
+s/&ugr-SmCi;/ὖ/g
+s/&ugr-SmGr;/ὒ/g
+s/&ugr-Sm;/ὐ/g
+s/&ugr;/υ/g
+s/&Ugr;/Υ/g
+s/&xgr;/ξ/g
+s/&Xgr;/Ξ/g
+s/&zgr;/ζ/g
+s/&Zgr;/Ζ/g

Added: trunk/modules/na28/migratetags/Makefile
===================================================================
--- trunk/modules/na28/migratetags/Makefile	                        (rev 0)
+++ trunk/modules/na28/migratetags/Makefile	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,11 @@
+TARGETS= migratetags
+
+all: $(TARGETS)
+
+clean:
+	rm -f $(TARGETS)
+
+.cpp:
+	g++ -g `pkg-config --cflags sword` $< -o $@ `pkg-config --libs sword`
+
+

Added: trunk/modules/na28/migratetags/matchers/defaultmatcher.h
===================================================================
--- trunk/modules/na28/migratetags/matchers/defaultmatcher.h	                        (rev 0)
+++ trunk/modules/na28/migratetags/matchers/defaultmatcher.h	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,82 @@
+#include "matcher.h"
+#include <utf8greekaccents.h>
+
+#ifndef defaultmatcher_h
+#define defaultmatcher_h
+
+class DefaultMatcher : public Matcher {
+	UTF8GreekAccents sanitizeGreekAccentFilter;
+public:
+
+	DefaultMatcher() : sanitizeGreekAccentFilter() {
+		sanitizeGreekAccentFilter.setOptionValue("off");
+	}
+
+// Compares 2 words and tries to give a percentage assurance of a match
+// TODO: could use more smarts here
+//
+virtual int compare(const SWBuf &s1, const SWBuf &s2) {
+	SWBuf t1 = sanitizeWord(s1);
+	SWBuf t2 = sanitizeWord(s2);
+
+	int retVal = 0;
+	SWBuf largest  = (t1.length() > t2.length()) ? t1 : t2;
+	SWBuf smallest = (t1.length() > t2.length()) ? t2 : t1;
+	int matches = 0;
+	int j = 0;
+	for (int i = 0; i < smallest.length() && j < largest.length(); i++) {
+		while (j < largest.length()) {
+			if (smallest[i] == largest[j++]) {
+				matches++;
+				break;
+			}
+		}
+	}
+	return (((float)matches) / largest.length()) * 100;
+}
+
+// 
+// This is where the magic happens
+//
+// we must point each targetMod word to an XMLTag
+//
+// when the magic is done, and your guess is made
+// populate targetWordTags with the integer offset
+// into wordTags for which XMLTag you think it should
+// be.
+//
+
+virtual void matchWords(vector<int> &targetWordTags, const vector<SWBuf> &targetWords, const vector<SWBuf> &fromWords, vector<int> fromWordTags) {
+
+	// initialize our results to all -1 so we can pop around and set
+	// words as we find them, and know which ones we haven't yet set
+	for (int i = 0; i < targetWords.size(); i++) targetWordTags.push_back(-1);
+
+
+	// poor effort attempt
+	int j = 0;
+	for (int i = 0; i < targetWords.size(); ++i) {
+		for (int j = 0; j < fromWords.size(); ++j) {
+			if (fromWordTags[j] == -1) continue;
+			int match = compare(targetWords[i], fromWords[j]);
+			// if we have a better than XX% match of sequencial characters
+			// then we'll say we have a match
+			if (match > 49) {
+				targetWordTags[i] = fromWordTags[j];
+				fromWordTags[j] = -1;
+				break;
+			}
+			// TOTRY: maybe check one word before and after?
+			//
+			// be creative!
+			//
+		}
+	}
+}
+virtual SWBuf sanitizeWord(const SWBuf &word) {
+	SWBuf t1 = word;
+	t1.toUpper();
+	return t1;
+}
+};
+#endif

Added: trunk/modules/na28/migratetags/matchers/gntmatcher.h
===================================================================
--- trunk/modules/na28/migratetags/matchers/gntmatcher.h	                        (rev 0)
+++ trunk/modules/na28/migratetags/matchers/gntmatcher.h	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,114 @@
+#include "matcher.h"
+#include <utf8greekaccents.h>
+
+#ifndef gntmatcher_h
+#define gntmatcher_h
+
+class GNTMatcher : public Matcher {
+	UTF8GreekAccents sanitizeGreekAccentFilter;
+public:
+
+	GNTMatcher() : sanitizeGreekAccentFilter() {
+		sanitizeGreekAccentFilter.setOptionValue("off");
+	}
+
+// Compares 2 words and tries to give a percentage assurance of a match
+// TODO: could use more smarts here
+//
+virtual int compare(const SWBuf &s1, const SWBuf &s2) {
+	SWBuf t1 = sanitizeWord(s1);
+	SWBuf t2 = sanitizeWord(s2);
+
+	int retVal = 0;
+	SWBuf largest  = (t1.length() > t2.length()) ? t1 : t2;
+	SWBuf smallest = (t1.length() > t2.length()) ? t2 : t1;
+	int matches = 0;
+	int j = 0;
+	for (int i = 0; i < smallest.length() && j < largest.length(); i++) {
+		while (j < largest.length()) {
+			if (smallest[i] == largest[j++]) {
+				matches++;
+				break;
+			}
+		}
+	}
+	return (((float)matches) / largest.length()) * 100;
+}
+
+// 
+// This is where the magic happens
+//
+// we must point each targetMod word to an XMLTag
+//
+// when the magic is done, and your guess is made
+// populate targetWordTags with the integer offset
+// into wordTags for which XMLTag you think it should
+// be.
+//
+
+virtual void matchWords(vector<int> &targetWordTags, const vector<SWBuf> &targetWords, const vector<SWBuf> &fromWords, vector<int> fromWordTags) {
+
+	// initialize our results to all -1 so we can pop around and set
+	// words as we find them, and know which ones we haven't yet set
+	for (int i = 0; i < targetWords.size(); i++) targetWordTags.push_back(-1);
+
+
+	// poor effort attempt
+	int j = 0;
+	for (int i = 0; i < targetWords.size(); ++i) {
+		SWBuf w1 = targetWords[i];
+		int j = 0;
+		for (; j < fromWords.size(); ++j) {
+			if (fromWordTags[j] == -1) continue;
+
+			SWBuf w2 = fromWords[j];
+			int match = compare(w1, w2);
+			// if we have a better than 75% match of sequencial characters
+			// then we'll say we have a match
+			if (match > 99) {
+				targetWordTags[i] = fromWordTags[j];
+				fromWordTags[j] = -1;
+				break;
+			}
+		}
+		// didn't match
+		if (j == fromWords.size()) {
+			// TOTRY: maybe check one word before and after?
+			//
+			// be creative!
+			//
+			
+			// let's see if we have common misses, regularize and recheck
+			SWBuf w1Orig = w1;
+			if (w1 == "ἀλλ" || w1 == "Ἀλλ") w1 = "αλλα";
+
+			if (w1 != w1Orig) {
+				for (int j = 0; j < fromWords.size(); ++j) {
+					if (fromWordTags[j] == -1) continue;
+
+					SWBuf w2 = fromWords[j];
+					int match = compare(w1, w2);
+					// if we have a better than 75% match of sequencial characters
+					// then we'll say we have a match
+					if (match > 99) {
+						targetWordTags[i] = fromWordTags[j];
+						fromWordTags[j] = -1;
+						break;
+					}
+				}
+			}
+		}
+	}
+}
+ 
+virtual SWBuf sanitizeWord(const SWBuf &word) {
+	SWBuf t1 = word;
+	// remove greek accents
+	sanitizeGreekAccentFilter.processText(t1);
+	t1.toUpper();
+	t1.replaceBytes("[]", 0);
+	return t1;
+}
+
+};
+#endif

Added: trunk/modules/na28/migratetags/matchers/matcher.h
===================================================================
--- trunk/modules/na28/migratetags/matchers/matcher.h	                        (rev 0)
+++ trunk/modules/na28/migratetags/matchers/matcher.h	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,27 @@
+#ifndef matcher_h
+#define matcher_h
+
+class Matcher {
+public:
+
+// Compares 2 words and tries to give a percentage assurance of a match
+// TODO: could use more smarts here
+//
+virtual int compare(const SWBuf &s1, const SWBuf &s2) = 0;
+
+// This is where the magic happens
+//
+// we must point each targetMod word to an XMLTag
+//
+// when the magic is done, and your guess is made
+// populate targetWordTags with the integer offset
+// into wordTags for which XMLTag you think it should
+// be.
+//
+virtual void matchWords(vector<int> &targetWordTags, const vector<SWBuf> &targetWords, const vector<SWBuf> &fromWords, vector<int> fromWordTags) = 0;
+
+// sanitize word for comparing (e.g., toUpper, strip accents, etc)
+virtual SWBuf sanitizeWord(const SWBuf &word) = 0;
+
+};
+#endif

Added: trunk/modules/na28/migratetags/migratetags.cpp
===================================================================
--- trunk/modules/na28/migratetags/migratetags.cpp	                        (rev 0)
+++ trunk/modules/na28/migratetags/migratetags.cpp	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,556 @@
+#include <versekey.h>
+#include <utf8greekaccents.h>
+#include <swmgr.h>
+#include <utilxml.h>
+#include <swbuf.h>
+#include <swconfig.h>
+#include <swmodule.h>
+#include <stringmgr.h>
+#include <iostream>
+#include <vector>
+
+using namespace sword;
+using namespace std;
+
+#include "matchers/matcher.h"
+
+// select your matcher here
+#include "matchers/gntmatcher.h"
+Matcher *matcher = new GNTMatcher();
+
+const char *targetModuleName="NA28raw";
+SWBuf strongsSourceModuleName = "WHNU";
+
+
+const char *ignoreSeries = "⸆¹⸆²⸆⸇᾿˸¹˸²˸³˸·¹²⟦–ʹ°¹°²⸋¹⸋²⸋⸌¹⸌°*[];⸀¹⸀²⸀³⸁⸀◆⟧ ⸂¹⸂²⸄⸂⸅⸃⸉¹⸈⸉⸊  ";
+
+typedef vector<unsigned long> BibMap;
+
+void insert(SWBuf addText, SWBuf &out, int bibPos, BibMap &bibMap, BibMap &wTags, bool after = false);
+
+SWBuf findCanonicalBibleText(SWBuf orig, BibMap &bibMap, BibMap &tTags);
+SWBuf buildWordMaps(const SWBuf &markupBuf, const BibMap &bibMap, vector<SWBuf> &targetWords, vector<int> &targetWordStarts, vector<int> &targetWordEnds);
+void pullFromModData(SWModule &fromMod, vector<XMLTag>&wordTags, vector<SWBuf> &fromWords, vector<int> &fromWordTags);
+void insertWordTags(VerseKey *vk, SWBuf &markupBuf, BibMap &bibMap, BibMap &wTags, vector<int> &targetWordTags, const vector<XMLTag> &wordTags, const vector<int> &targetWordStarts, const vector<int> &targetWordEnds);
+
+// app options
+bool optionFilterAccents = false;
+bool optionFilterAppCrit = false;
+bool optionDebug         = false;
+vector<SWBuf> optionExceptionFile;
+SWConfig *exceptionFile = 0;
+
+void usage(const char *progName, const char *error = 0) {
+	if (error) fprintf(stderr, "\n%s: %s\n", progName, error);
+	fprintf(stderr, "\n=== migratetags (Revision $Rev$) Migrate word morphology from one module to another.\n");
+	fprintf(stderr, "\nusage: %s [options]\n", progName);
+	fprintf(stderr, "  -v\t\t\t verbose: print lots of information while processing\n");
+	fprintf(stderr, "  -fa\t\t\t filter accents: remove Greek accents from final text\n");
+	fprintf(stderr, "  -fc\t\t\t filter critical apparatus markers from final text\n");
+	fprintf(stderr, "  -e <exception file>\t provide an ini-style .conf file with overriding tag exceptions.\n");
+	fprintf(stderr, "\n\n");
+	exit(-1);
+}
+
+
+
+int main(int argc, char **argv) {
+	const char *progName   = argv[0];
+	for (int i = 1; i < argc; ++i) {
+		if (!strcmp(argv[i], "-v")) {
+			optionDebug = true;
+		}
+		else if (!strcmp(argv[i], "-fa")) {
+			optionFilterAccents = true;
+		}
+		else if (!strcmp(argv[i], "-fc")) {
+			optionFilterAppCrit = true;
+		}
+		else if (!strcmp(argv[i], "-ss")) {
+			if ((i + 1) < argc) {
+				strongsSourceModuleName = argv[++i];
+			}
+			else usage(progName, "-ss argument requires a module name.");
+		}
+		else if (!strcmp(argv[i], "-e")) {
+			if (i+1 < argc) {
+				optionExceptionFile.push_back(argv[++i]);
+			}
+			else usage(progName, "-e argument requires a file name.");
+		}
+		else usage(progName, (((SWBuf)"Unknown argument: ")+ argv[i]).c_str());
+	}
+
+	SWMgr lib;
+	lib.setGlobalOption("Textual Variants", "Secondary Reading");
+	SWModule *m = lib.getModule(targetModuleName);
+	if (!m) {
+		cerr << "couldn't find target module: " << targetModuleName << ".\n";
+		exit(1);
+	}
+	SWModule &targetMod = *m;
+	m = lib.getModule(strongsSourceModuleName.c_str());
+	if (!m) {
+		cerr << "couldn't find source module: " << strongsSourceModuleName.c_str() << ".\n";
+		exit(1);
+	}
+	SWModule &fromMod = *m;
+
+	for (int i = 0; i < optionExceptionFile.size(); ++i) {
+		SWBuf fileName = optionExceptionFile[i];
+		if (!i) exceptionFile = new SWConfig(fileName);
+		else (*exceptionFile) += SWConfig(fileName);
+	}
+
+	// we'll do the whole Bible eventually, but let's just get one verse
+	// working well.
+	((VerseKey *)targetMod.getKey())->setIntros(true);
+	targetMod.getKey()->setText("mat0.0");		// let's try this verse
+	int z = 0;
+	for (;
+//!z &&
+!targetMod.popError(); targetMod++) {
+	z++;
+
+		// XML word tags which should be placed in this verse (start tag)
+		// eg., <w lemma=...>
+		// pulled from FromMod
+		vector<XMLTag> wordTags;
+
+		// Just the raw canonical Bible text of this verse with no tags
+		// eg., "In the beginning God created the heavens and the earth."
+		SWBuf justTargetModBibleText = "";
+
+		// a mapping for each character in justTargetModBibleText to the real location
+		// in our out buffer.  This allows us to insert our <w> and </w>
+		// tags in the correct place amongst the fully marked up
+		// TargetMod out buffer.  This work is all done in the insert() method
+		// above
+		BibMap bibMap;
+		BibMap wTags;
+
+		// justTargetModBibleText (above) broken down into separate words
+		// ie. all words in the TargetMod from this verse
+		// eg. [0] = "In"; [1] = "the"; [2] = "beginning"; ...
+		vector<SWBuf> targetWords;
+
+		// where each corresponding targetWords[x] starts in justTargetModBibleText
+		// eg. for "In the beginning..."
+		//         [0] = 0; [1] = 3; [2] = 7; ...
+		// Needed to pass to insert method so we know where
+		// to insert the <w> start tag
+		vector<int> targetWordStarts;
+
+		// same as targetWordStarts, but the end of each word
+		// eg. [0] = 1; [1] = 5; [2] = 15
+		// Needed to pass to insert method so we know where
+		// to insert the </w> end tag
+		vector<int> targetWordEnds;
+
+		// This is the doozy.  This maps each TargetMod word to the correct
+		// wordTags entry.
+		vector<int> targetWordTags;
+
+		// Equivalent to targetWords above, but for the FromMod.
+		// Useful for helping determine matches to TargetMod words
+		vector<SWBuf> fromWords;
+
+		// Equivalent to targetWordTag which we need to produce,
+		// but this one is produced for us from the FromMod data
+		// If we can match a fromWords[x] entry, then we can assign
+		// targetWorkTags[ourMatch] = fromWordTags[x]
+		vector<int> fromWordTags;
+
+		bibMap.clear();
+		wTags.clear();
+
+		fromMod.setKey(targetMod.getKey());
+		cout << "$$$ " << targetMod.getKeyText() << endl;
+
+if (optionDebug) {
+		cout << "\nProcessing Verse: " << targetMod.getKeyText() << endl;
+		cout << "---------------------" << endl;
+
+		cout << "\nOur FromMod Verse Markup" << endl;
+		cout << "---------------------" << endl;
+		cout << fromMod.getRawEntry() << endl;
+		cout << "---------------------" << endl;
+}
+
+
+		// grab our raw, fully marked up TargetMod text for this verse
+		SWBuf orig = targetMod.getRawEntryBuf();
+
+
+if (optionDebug) {
+		cout << "\nOur Original TargetMod Markup" << endl;
+		cout << "---------------------" << endl;
+		cout << orig << endl;
+		cout << "---------------------" << endl;
+}
+
+		if (optionFilterAppCrit) {
+			SWBuf o = orig;
+			const unsigned char* from = (unsigned char*)o.c_str();
+			orig = "";
+			while (*from) {		
+				SW_u32 ch = getUniCharFromUTF8(&from, true);
+				// if ch is bad, then convert to replacement char
+				if (!ch) ch = 0xFFFD;
+				SWBuf checkChar;
+				getUTF8FromUniChar(ch, &checkChar);
+				if (checkChar != " " && strstr(ignoreSeries, checkChar.c_str())) continue;
+				orig.append(checkChar);
+			}
+		}
+
+		// let's find where just the canonical text is amongst
+		// all our markup
+		// newTargetModMarkup will eventually hold our updated markup with
+		// the new <w> tags, but we'll start here by setting it to
+		// the processed original markup.
+		// on return, bibMap will be populated with each character
+		// and the corresponding location into newTargetModMarkup where
+		// the character resides.
+		SWBuf newTargetModMarkup = findCanonicalBibleText(orig, bibMap, wTags);
+
+if (optionDebug) {
+		cout << "\nOur Original TargetMod Markup After XMLTag-ifying" << endl;
+		cout << "---------------------" << endl;
+		cout << newTargetModMarkup << endl;
+		cout << "---------------------" << endl;
+
+		cout << "\nOur bibMap" << endl;
+		cout << "---------------------" << endl;
+		for (BibMap::iterator it = bibMap.begin(); it != bibMap.end(); ++it) {
+			cout << *it << " ";
+		}
+		cout << "\n---------------------" << endl;
+}
+
+		// let's populate our TargetMod word data and fill in our
+		// justTargetModBibleText buffer
+		justTargetModBibleText = buildWordMaps(newTargetModMarkup, bibMap, targetWords, targetWordStarts, targetWordEnds);
+
+if (optionDebug) {
+		cout << "\nJust TargetMod Bible Text" << endl;
+		cout << "---------------------" << endl;
+		cout << justTargetModBibleText << endl;
+		cout << "---------------------" << endl;
+}
+
+ 
+		// ok, now lets grab out the groovy data from the FromMod module
+		pullFromModData(fromMod, wordTags, fromWords, fromWordTags);
+
+
+		// 
+		// ok, here's the real work.
+		//
+		// This method needs to guess which TargetMod words match which FromMod
+		// words and then point them to their same original language
+		// word tag by populating targetWordTags
+		//
+		matcher->matchWords(targetWordTags, targetWords, fromWords, fromWordTags);
+
+		// ok, now that we have our targetWordTags magically populated
+		// let's do the grunt work of inserting the <w> and </w> tags
+		insertWordTags((VerseKey *)targetMod.getKey(), newTargetModMarkup, bibMap, wTags, targetWordTags, wordTags, targetWordStarts, targetWordEnds);
+
+
+if (optionDebug) {
+		cout << "\nHere's how you mapped things..." << endl;
+		cout << "---------------------" << endl;
+		cout << "Total wordTags: " << wordTags.size() << endl;
+		cout << "\nTargetMod Words: " << endl;
+}
+		bool warned = false;
+		for (int i = 0; i < targetWords.size(); ++i) {
+			if (targetWordTags[i] == -1 && !strstr(ignoreSeries, targetWords[i])) {
+				if (!warned) {
+					cerr << "*** Error: didn't match all words: " << targetMod.getKeyText() << endl;
+					cerr << strongsSourceModuleName.c_str() << ":";
+					for (int j = 0; j < fromWords.size(); ++j) {
+						cerr << " " << fromWords[j];
+					}
+					cerr << endl;
+					cerr << targetModuleName << ":";
+					for (int j = 0; j < targetWords.size(); ++j) {
+						cerr << " " << targetWords[j];
+					}
+					cerr << endl;
+					cerr << endl;
+					cerr << "Unmatched Words:" << endl;
+					warned = true;
+				}
+				cerr << "  " << i << ": " <<  targetWords[i] << " (" << matcher->sanitizeWord(targetWords[i]) << ")" << endl;
+			}
+if (optionDebug) {
+			cout << targetWords[i] << " : " << targetWordTags[i] << " => " << (targetWordTags[i] > -1 ? wordTags[targetWordTags[i]] : "") << endl;
+}
+		}
+		if (warned) {
+			cerr << "\n" << targetModuleName << " Tags:\n";
+			VerseKey *vk = (VerseKey *)targetMod.getKey();
+			for (int j = 0; j < targetWords.size(); ++j) {
+				if (!strstr(ignoreSeries, targetWords[j])) {
+					cerr << targetWords[j] << "\t\t " << vk->getOSISRef() << "." << j << "=" << (targetWordTags[j] > -1 ? (const char *)wordTags[targetWordTags[j]] : (targetWordTags[j] == -2 ? "{Using Exception}" : "")) << endl;
+				}
+			}
+			cerr << "---------------------" << endl;
+		}
+
+		if (optionFilterAccents) {
+			UTF8GreekAccents filter;
+			filter.setOptionValue("off");
+			filter.processText(newTargetModMarkup);
+		}
+
+if (optionDebug) {
+		cout << "---------------------" << endl;
+		
+		cout << "\nAND... Here's your final output" << endl;
+		cout << "---------------------" << endl;
+}
+		cout << newTargetModMarkup << endl;
+if (optionDebug) {
+		cout << endl;
+}
+	}
+
+	delete exceptionFile;
+
+	return 0;
+}
+
+
+// builds up bibMap to contain only characters of Biblical text
+// and each character's corresponding real location in our output
+// buffer (returned value)
+SWBuf findCanonicalBibleText(SWBuf orig, BibMap &bibMap, BibMap &wTags) {
+	SWBuf out = "";
+	SWBuf tag = "";
+	int tagLevel = 0;
+	int wTag = -1;
+	int inTag = 0;
+	SWBuf lastElementText = "";
+	for (int i = 0; i < orig.length(); ++i) {
+		if (orig[i] == '<') {
+			inTag = true;
+		}
+		else if (orig[i] == '>') {
+			inTag = false;
+			XMLTag t = tag.c_str();
+			bool skipTag = false;
+			if (!t.isEmpty()) {
+				if (t.isEndTag()) {
+					// clear out empty w tags
+					if (t.getName() && !strcmp("w", t.getName())) {
+						if (!lastElementText.size()) {
+							out.setSize(wTag);
+							if (out.endsWith(' ')) { // && i < (orig.length() - 1) && orig[i+1] == ' ') {
+								out.setSize(out.size() - 1);
+								bibMap.pop_back();
+								wTags.pop_back();
+							}
+							skipTag = true;
+						}
+					}
+					tagLevel--;
+					wTag = -1;
+				}
+				else {
+					lastElementText = "";
+					tagLevel++;
+					wTag = (t.getName() && !strcmp("w", t.getName())) ? out.size() : -1;
+				}
+			}
+			if (!skipTag) out += t;
+			tag = "";
+		}
+		else if (inTag) {
+			tag += orig[i];
+		}
+		else {
+// for texts without <w> tags
+//			if (!tagLevel || wTag != -1) {
+			if (wTag != -1 || orig[i] == ' ') {
+				bibMap.push_back(out.size());
+				wTags.push_back(wTag);
+			}
+			out += orig[i];
+			lastElementText += orig[i];
+		}
+	}
+	return out;
+}
+
+
+// Inserts addText into out buffer and adjusts Bible character pointers accordingly
+//
+void insert(SWBuf addText, SWBuf &out, int bibPos, BibMap &bibMap, BibMap &wTags, bool after) {
+	int to = 0;
+	if (!after && wTags[bibPos] != -1) {
+		to = wTags[bibPos] + 2;
+		addText--; // discard the '>'
+		addText << 2; // discard the '<w'
+	}
+	else {
+		to = bibMap[bibPos]+((after)?1:0);
+	}
+	if (!after || wTags[bibPos] == -1) {
+		out.insert(to, addText);
+		for (int i = bibPos+((after)?1:0); i < bibMap.size(); ++i) {
+			bibMap[i] += addText.length();
+			if (wTags[i] != -1) wTags[i] += addText.length();
+		}
+	}
+}
+
+
+SWBuf buildWordMaps(const SWBuf &markupBuf, const BibMap &bibMap, vector<SWBuf> &targetWords, vector<int> &targetWordStarts, vector<int> &targetWordEnds) {
+	SWBuf bibWord = "";
+	SWBuf fromWord = "";
+	SWBuf bibText = "";
+	for (BibMap::const_iterator it = bibMap.begin(); it != bibMap.end(); it++) {
+/*
+		char *b1 = markupBuf.getRawData()+*it;
+		char *b2 = b1;
+		__u32 uc = getUniCharFromUTF8(&b2);
+		bool wordBreak = false;
+		if (uc) {
+			SWBuf u8c;
+			u8c.append(b1, b2-b1);
+			if (strstr(ignoreSeries, u8c.getRawData()))
+		}
+*/
+		char c = markupBuf[*it];
+		if (c != ' ' && c != '.' && c != ';' && c != ',') {
+			if (!bibWord.length()) targetWordStarts.push_back(bibText.length());
+			bibWord += c;
+		}
+		else {
+			if (bibWord.length()) {
+				targetWordEnds.push_back(bibText.length()-1);
+				targetWords.push_back(bibWord);
+				bibWord = "";
+			}
+		}
+		bibText += c;
+	}
+	if (bibWord.length()) {
+		targetWordEnds.push_back(bibText.length()-1);
+		targetWords.push_back(bibWord);
+	}
+	return bibText;
+}
+
+
+void pullFromModData(SWModule &fromMod, vector<XMLTag>&wordTags, vector<SWBuf> &fromWords, vector<int> &fromWordTags) {
+	fromMod.renderText();	// be sure FromMod has processed entry attributes
+	AttributeList &words = fromMod.getEntryAttributes()["Word"];
+	SWBuf fromWord = "";
+	SWBuf bibWord = "";
+	for (AttributeList::iterator it = words.begin(); it != words.end(); it++) {
+		// this is our new <w> XMLTag.
+		// attributes will be added below
+		XMLTag w("w");
+		// this only gives us word count, not if we have multiple entries per word
+		// don't use as loop
+		int parts = atoi(it->second["PartCount"]);
+		SWBuf lemma = "";
+		SWBuf morph = "";
+		bool found = true;
+		for (int i = 1; found; ++i) {
+			found = false;
+			SWBuf key = "";
+			key = SWBuf().setFormatted("Lemma.%d", i);
+			AttributeValue::iterator li = it->second.find(key);
+			if (i == 1 && li == it->second.end()) li = it->second.find("Lemma");
+			if (li != it->second.end()) {
+				found = true;
+				if (i > 1) lemma += " ";
+				key = SWBuf().setFormatted("LemmaClass.%d", i);
+				AttributeValue::iterator lci = it->second.find(key);
+				if (i == 1 && lci == it->second.end()) lci = it->second.find("LemmaClass");
+				if (lci != it->second.end()) {
+					lemma += lci->second + ":";
+				}
+				lemma += li->second;
+			}
+			key = SWBuf().setFormatted("Morph.%d", i);
+			li = it->second.find(key);
+			if (i == 1 && li == it->second.end()) li = it->second.find("Morph");
+			if (li != it->second.end()) {
+				found = true;
+				if (i > 1) morph += " ";
+				key = SWBuf().setFormatted("MorphClass.%d", i);
+				AttributeValue::iterator lci = it->second.find(key);
+				if (i == 1 && lci == it->second.end()) lci = it->second.find("MorphClass");
+				if (lci != it->second.end()) {
+					morph += lci->second + ":";
+				}
+				morph += li->second;
+			}
+			// TODO: add src tags and maybe other attributes
+		}
+
+		if (lemma.length()) w.setAttribute("lemma", lemma);
+		if (morph.length()) w.setAttribute("morph", morph);
+
+
+		fromWord = it->second["Text"];
+		bibWord = "";
+		for (int j = 0; j < fromWord.length(); ++j) {
+			char c = fromWord[j];
+			if (c != ' ' && c != '.' && c != ';' && c != ',') {
+				bibWord += c;
+			}
+			else {
+				if (bibWord.length()) {
+					fromWords.push_back(bibWord);
+					fromWordTags.push_back(wordTags.size());
+					bibWord = "";
+				}
+			}
+		}
+		if (bibWord.length()) {
+			fromWords.push_back(bibWord);
+			fromWordTags.push_back(wordTags.size());
+		}
+
+		wordTags.push_back(w);
+	}
+}
+
+
+void insertWordTags(VerseKey *vk, SWBuf &markupBuf, BibMap &bibMap, BibMap &wTags, vector<int> &targetWordTags, const vector<XMLTag> &wordTags, const vector<int> &targetWordStarts, const vector<int> &targetWordEnds) {
+	// TODO: this method needs some work,
+	// like putting multiple consecutive words
+	// together in one tag
+
+	ConfigEntMap exceptions;
+
+	if (exceptionFile) {
+		exceptions = exceptionFile->getSection("exceptions");
+	}
+
+	for (int i = 0; i < targetWordTags.size(); ++i) {
+		SWBuf wordTag = "";
+		if (targetWordTags[i] > -1) {
+			wordTag = wordTags[targetWordTags[i]];
+		}
+		if (exceptionFile) {
+			SWBuf key; key.setFormatted("%s.%d", vk->getOSISRef(), i);
+			ConfigEntMap::const_iterator it = exceptions.find(key);
+			if (it != exceptions.end()) {
+				targetWordTags[i] = -2;	// note that we are using an exception, not a mapping, not unset (-1)
+				wordTag = it->second;
+			}
+		}
+		if (wordTag.length()) {
+			insert((const char *)wordTag, markupBuf, targetWordStarts[i], bibMap, wTags);
+			insert("</w>", markupBuf, targetWordEnds[i], bibMap, wTags, true);
+		}
+	}
+}

Added: trunk/modules/na28/na28.conf
===================================================================
--- trunk/modules/na28/na28.conf	                        (rev 0)
+++ trunk/modules/na28/na28.conf	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,33 @@
+[NA28]
+DataPath=./modules/texts/ztext/na28/
+ModDrv=zText
+Encoding=UTF-8
+BlockType=BOOK
+CompressType=ZIP
+SourceType=OSIS
+Lang=grc
+GlobalOptionFilter=OSISStrongs
+GlobalOptionFilter=OSISMorph
+GlobalOptionFilter=OSISFootnotes
+GlobalOptionFilter=OSISHeadings
+GlobalOptionFilter=OSISRedLetterWords
+GlobalOptionFilter=UTF8GreekAccents
+OSISqToTick=false
+EmbeddedFootnoteMarkers=true
+Feature=StrongsNumbers
+MinimumVersion=1.5.9
+SwordVersionDate=2021-09-12
+Version=1.3
+History_1.3=Punctuation which was placed at the end but inside of a w tag has been moved outside the w tags. Removed some empty w tags which has improved the display for the user.
+History_1.2=More INTF corrections to parsing.
+History_1.1=Lemma and morphology checked and corrected by INTF. Fixed inscriptio and subscriptio.
+Description=Nestle-Aland, Novum Testamentum Graece, 28th Revised Edition
+About=Following intensive preparatory work, the new edition of the Novum Testamentum Graece (»Nestle-Aland« or »NA28«) is now being published. Thus this standard and globally preeminent reference among Greek New Testament editions is available in a fundamentally revised and improved edition. One focus of the revision was on the critical apparatus whose structure was simplified. For instance, the combination of variants using »sed« or »et« and the distinction between consistently cited witnesses of the first and second order have now been removed. In addition, the readings of the newly discovered Papyri 117–127 are listed for the first time, opening up interesting perspectives particularly for the Acts of the Apostles. In the Catholic Epistles, this edition has been made consistent with the »Editio Critica Maior«. This led to more than 30 modifications in the main text and resulted in a critical apparatus which is newly compiled in its entirety for this section and includes a new selection of witnesses and variants. The cross-references in the margin were also systematically revised and supplemented mainly with references to early Jewish literature.\par\par The Novum Testamtenum Graece has been edited by the Institute for New Testament Textual Research (INTF), a university institute in Münster (Germany). Its general task is research on the textual history of the Greek New Testament and the reconstruction of its initial text. Apart from the Novum Testamentum Graece the INTF also publishes the UBS Greek New Testament and the Editio Critica Maior for the German Bible Society.
+TextSource=DBG
+LCSH=Bible. Greek, Koine.
+DistributionLicense=Copyright DBG
+ShortCopyright=Nestle-Aland, Novum Testamentum Graece, 28th Revised Edition, edited by Barbara and Kurt Aland, Johannes Karavidopoulos, Carlo M. Martini, and Bruce M. Metzger in cooperation with the Institute for New Testament Textual Research, Münster/Westphalia, © 2012 Deutsche Bibelgesellschaft, Stuttgart. Used by permission.
+ShortPromo=<a target="_blank" href="http://www.nestle-aland.com/">Learn more about the Nestle-Aland.</a>
+UnlockInfo=Please visit the online store of the German Bible Society to purchase an unlock key: <a href="https://www.die-bibel.de/shop/bibeln/digitale-bibelausgaben/dvds-und-videos/na28-app-lizenzschluessel-0106">NA28 - SWORD Module</a>
+CipherKey=
+

Added: trunk/modules/na28/na28raw.conf
===================================================================
--- trunk/modules/na28/na28raw.conf	                        (rev 0)
+++ trunk/modules/na28/na28raw.conf	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,25 @@
+[NA28raw]
+DataPath=./modules/texts/rawtext/na28/
+ModDrv=RawText
+Encoding=UTF-8
+BlockType=BOOK
+CompressType=ZIP
+SourceType=OSIS
+Lang=grc
+GlobalOptionFilter=OSISStrongs
+GlobalOptionFilter=OSISMorph
+GlobalOptionFilter=OSISFootnotes
+GlobalOptionFilter=OSISHeadings
+GlobalOptionFilter=OSISRedLetterWords
+OSISqToTick=false
+Feature=StrongsNumbers
+MinimumVersion=1.5.9
+SwordVersionDate=2011-10-25
+Version=1.0
+Description=Novum Testamentum Graece (Nestle-Aland 28th ed.)
+About=Novum Testamentum Graece (Nestle-Aland 28th ed.)
+TextSource=DBG
+LCSH=Bible. Greek, Koine.
+DistributionLicense=Copyright DBG
+ShortCopyright=Novum Testamentum Graece, Copyright (C) 2012 Deutsche Bibelgesellschaft, Stuttgart.  All rights reserved.
+ShortPromo=<a target="_blank" href="http://www.nestle-aland.com/">Learn more about the NA28.</a>

Added: trunk/modules/na28/osis2imp.sed
===================================================================
--- trunk/modules/na28/osis2imp.sed	                        (rev 0)
+++ trunk/modules/na28/osis2imp.sed	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,5 @@
+s/<verse.*osisID="\([^"]*\)".*>/\$\$\$\1\n/g
+s/<div[^>]*type="book".*osisID="\([^"]*\)".*>/\$\$\$\1\n/g
+s/<div[^>]*type="chapter".*osisID="\([^"]*\)".*>/\$\$\$\1\n/g
+s/<\/verse>//g
+s/<\/div>//g

Added: trunk/modules/na28/osis2impfn.sed
===================================================================
--- trunk/modules/na28/osis2impfn.sed	                        (rev 0)
+++ trunk/modules/na28/osis2impfn.sed	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,4 @@
+s/<verse.*osisID="\([^"]*\)".*>/\$\$\$\1\n<note type="variant">/g
+s/<div.*osisID="\([^"]*\)".*>/\$\$\$\1\n<note type="variant">/g
+s/<\/verse>/<\/note>/g
+s/<\/div>//g

Added: trunk/modules/na28/tag-exceptions-ecm.conf
===================================================================
--- trunk/modules/na28/tag-exceptions-ecm.conf	                        (rev 0)
+++ trunk/modules/na28/tag-exceptions-ecm.conf	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,149 @@
+[exceptions]
+Matt.1.1.3=<w lemma="strong:G9999" morph="robinson:V-AAN strongsMorph:G5658">
+
+Matt.12.47.16=<w lemma="strong:G2980" morph="robinson:V-AAN strongsMorph:G5658">
+Luke.17.23.5=<w lemma="strong:G2228" morph="robinson:PRT">
+
+Acts.1.10.16=<w lemma="strong:G2066" morph="robinson:N-DSF">
+Acts.1.10.17=<w lemma="strong:G3022" morph="robinson:A-DSF">
+
+Acts.1.15.19=<w lemma="strong:G5613" morph="robinson:ADV">
+Acts.1.26.3=<w lemma="strong:G846" morph="robinson:P-GPM">
+Acts.2.3.8=<w lemma="strong:G5037" morph="robinson:PRT">
+Acts.2.5.2=<w lemma="strong:G1722" morph="robinson:PREP">
+Acts.2.20.11=<w lemma="strong:G2228" morph="robinson:PRT">
+Acts.2.20.16=<w lemma="strong:G3588" morph="robinson:T-ASF">
+Acts.4.4.13=<w lemma="strong:G5616" morph="robinson:ADV">
+Acts.5.26.7=<w lemma="strong:G71" morph="robinson:V-2AAI-3S strongsMorph:G5627">
+Acts.5.33.5=<w lemma="strong:G1011" morph="robinson:V-INI-3P strongsMorph:G5711">
+
+#corrected from na28 corrections (C28)
+Acts.5.39.13=<w lemma="strong:G3982" morph="robinson:V-API-3P strongsMorph:G5681">
+Acts.5.39.14=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.5.39.15=<w lemma="strong:G846" morph="robinson:P-DSM">
+
+Acts.7.7.5=<w lemma="strong:G1398" morph="robinson:V-AAS-3P">
+
+# C28
+Acts.7.26.16=<w lemma="strong:G2444" morph="robinson:CONJ">
+Acts.7.26.17=<w lemma="strong:G91" morph="robinson:V-PAI-2P strongsMorph:G5719">
+
+Acts.8.31.10=<w lemma="strong:G3594" morph="robinson:V-AAS-3S">
+Acts.8.32.8=<w lemma="strong:G3778" morph="robinson:D-NSF">
+Acts.8.37.0=<w lemma="strong:G3004" morph="robinson:V-2AAI-3S strongsMorph:G5627">
+Acts.8.37.1=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.8.37.2=<w lemma="strong:G846" morph="robinson:P-DSM">
+Acts.8.37.3=<w lemma="strong:G1487" morph="robinson:COND">
+Acts.8.37.4=<w lemma="strong:G4100" morph="robinson:V-PAI-2S strongsMorph:G5719">
+Acts.8.37.5=<w lemma="strong:G1537" morph="robinson:PREP">
+Acts.8.37.6=<w lemma="strong:G3650" morph="robinson:A-GSF">
+Acts.8.37.7=<w lemma="strong:G3588" morph="robinson:T-GSF">
+Acts.8.37.8=<w lemma="strong:G2588" morph="robinson:N-GSF">
+Acts.8.37.9=<w lemma="strong:G4771" morph="robinson:P-2GS">
+Acts.8.37.10=<w lemma="strong:G1832" morph="robinson:V-PAI-3S strongsMorph:G5719">
+Acts.8.37.11=<w lemma="strong:G611" morph="robinson:V-AOP-NSM strongsMorph:G5679">
+Acts.8.37.12=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.8.37.13=<w lemma="strong:G3004" morph="robinson:V-2AAI-3S strongsMorph:G5627">
+Acts.8.37.14=<w lemma="strong:G4100" morph="robinson:V-PAI-1S strongsMorph:G5719">
+Acts.8.37.15=<w lemma="strong:G3588" morph="robinson:T-ASM">
+Acts.8.37.16=<w lemma="strong:G5207" morph="robinson:N-ASM">
+Acts.8.37.17=<w lemma="strong:G3588" morph="robinson:T-GSM">
+Acts.8.37.18=<w lemma="strong:G2316" morph="robinson:N-GSM">
+Acts.8.37.19=<w lemma="strong:G1510" morph="robinson:V-PAN strongsMorph:G5721">
+Acts.8.37.20=<w lemma="strong:G2424" morph="robinson:N-ASM">
+Acts.8.37.21=<w lemma="strong:G5547" morph="robinson:N-ASM">
+
+Acts.9.6.10=<w lemma="strong:G3754" morph="robinson:CONJ">
+Acts.9.8.11=<w lemma="strong:G3762" morph="robinson:A-ASM-N">
+Acts.9.21.12=<w lemma="strong:G1722" morph="robinson:PREP">
+Acts.10.9.4=<w lemma="strong:G846" morph="robinson:P-GPM">
+
+Acts.13.11.18=<w lemma="strong:G1968" morph="robinson:V-2AAI-3S strongsMorph:G5627">
+
+#C28
+Acts.13.33.7=<w lemma="strong:G1473" morph="robinson:P-1DP">
+Acts.13.33.8=<w lemma="strong:G450" morph="robinson:V-AAP-NSM strongsMorph:G5660">
+Acts.13.33.9=<w lemma="strong:G2424" morph="robinson:N-ASM">
+Acts.13.33.10=<w lemma="strong:G5613" morph="robinson:ADV">
+
+#C28
+Acts.13.38.13=<w lemma="strong:G2532" morph="robinson:CONJ">
+Acts.13.38.14=<w lemma="strong:G575" morph="robinson:PREP">
+Acts.13.38.15=<w lemma="strong:G3956" morph="robinson:A-GPN">
+Acts.13.38.16=<w lemma="strong:G3739" morph="robinson:R-GPN">
+Acts.13.38.17=<w lemma="strong:G3756" morph="robinson:PRT-N">
+Acts.13.38.18=<w lemma="strong:G1410" morph="robinson:V-AOI-2P-ATT strongsMorph:G5675">
+Acts.13.38.19=<w lemma="strong:G1722" morph="robinson:PREP">
+Acts.13.38.20=<w lemma="strong:G3551" morph="robinson:N-DSM">
+Acts.13.38.21=<w lemma="strong:G3475" morph="robinson:N-GSM">
+Acts.13.38.22=<w lemma="strong:G1344" morph="robinson:V-APN strongsMorph:G5683">
+
+
+
+Acts.14.10.2=<w lemma="strong:G3588" morph="robinson:T-DSF">
+Acts.15.4.5=<w lemma="strong:G5259" morph="robinson:PREP">
+Acts.15.17.23=<w lemma="strong:G3588" morph="robinson:T-NSM">
+
+#check this verse
+#NA28 NEEDS FOOTNOTE ADDED
+Acts.15.34.0=<w lemma="strong:G1380" morph="robinson:V-AAI-3S strongsMorph:G5656">
+Acts.15.34.1=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.15.34.2=<w lemma="strong:G3588" morph="robinson:T-DSN">
+Acts.15.34.3=<w lemma="strong:G4609" morph="robinson:N-DSM">
+Acts.15.34.4=<w lemma="strong:G1961" morph="robinson:V-AAN strongsMorph:G5658">
+Acts.15.34.5=<w lemma="strong:G846" morph="robinson:P-GSM">
+
+
+Acts.16.11.1=<w lemma="strong:G3767" morph="robinson:CONJ">
+Acts.16.12.5=<w lemma="strong:G4413" morph="robinson:A-NSF-S">
+Acts.16.13.12=<w lemma="strong:G3543" morph="robinson:V-IPI-3S strongsMorph:G5712">
+Acts.16.13.13=<w lemma="strong:G4335" morph="robinson:N-NSF">
+Acts.16.17.1=<w lemma="strong:G2628" morph="robinson:V-AAP-NSF">
+Acts.18.7.8=<w lemma="strong:G5103" morph="robinson:N-GSM">
+Acts.19.14.2=<w lemma="strong:G5100" morph="robinson:X-NPM">
+Acts.20.5.2=<w lemma="strong:G4334" morph="robinson:V-2AAP-NPM strongsMorph:G5631">
+Acts.20.6.20=<w lemma="strong:G3756" morph="robinson:PRT">
+Acts.20.21.16=<w lemma="strong:G5547" morph="robinson:N-ASM">
+Acts.23.10.2=<w lemma="strong:G1096" morph="robinson:V-2ADP-GSF strongsMorph:G5637">
+Acts.24.6.9=<w lemma="strong:G2532" morph="robinson:CONJ">
+Acts.24.6.10=<w lemma="strong:G2596" morph="robinson:PREP">
+Acts.24.6.11=<w lemma="strong:G3588" morph="robinson:T-ASM">
+Acts.24.6.12=<w lemma="strong:G2251" morph="robinson:S-1PASM">
+Acts.24.6.13=<w lemma="strong:G3551" morph="robinson:N-ASM">
+Acts.24.6.14=<w lemma="strong:G2309" morph="robinson:V-AAI-1P strongsMorph:G5656">
+Acts.24.6.15=<w lemma="strong:G2919" morph="robinson:V-AAN">
+Acts.24.7.0=<w lemma="strong:G3928" morph="robinson:V-2AAP-NSM strongsMorph:G5631">
+Acts.24.7.1=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.24.7.2=<w lemma="strong:G3079" morph="robinson:N-NSM">
+Acts.24.7.3=<w lemma="strong:G3588" morph="robinson:T-NSM">
+Acts.24.7.4=<w lemma="strong:G5506" morph="robinson:N-NSM">
+Acts.24.7.5=<w lemma="strong:G3326" morph="robinson:PREP">
+Acts.24.7.6=<w lemma="strong:G4183" morph="robinson:A-GSF">
+Acts.24.7.7=<w lemma="strong:G970" morph="robinson:N-GSF">
+Acts.24.7.8=<w lemma="strong:G1537" morph="robinson:PREP">
+Acts.24.7.9=<w lemma="strong:G3588" morph="robinson:T-GPN">
+Acts.24.7.10=<w lemma="strong:G5495" morph="robinson:N-GPF">
+Acts.24.7.11=<w lemma="strong:G1473" morph="robinson:P-1GP">
+Acts.24.7.12=<w lemma="strong:G520" morph="robinson:V-2AAI-3S strongsMorph:G5627">
+Acts.24.8.0=<w lemma="strong:G2753" morph="robinson:V-AAP-NSM strongsMorph:G5660">
+Acts.24.8.1=<w lemma="strong:G3588" morph="robinson:T-APM">
+Acts.24.8.2=<w lemma="strong:G2725" morph="robinson:N-APM">
+Acts.24.8.3=<w lemma="strong:G846" morph="robinson:P-GSM">
+Acts.24.8.4=<w lemma="strong:G2064" morph="robinson:V-PNN strongsMorph:G5738">
+Acts.24.8.5=<w lemma="strong:G1909" morph="robinson:PREP">
+Acts.24.8.6=<w lemma="strong:G4771" morph="robinson:P-2AS">
+Acts.24.8.19=<w lemma="strong:G846" morph="robinson:P-GSM">
+Acts.25.18.11=<w lemma="strong:G4190" morph="robinson:A-ASN">
+Acts.28.5.3=<w lemma="strong:G660" morph="robinson:V-AMP-NSM">
+Acts.28.29.0=<w lemma="strong:G2532" morph="robinson:CONJ">
+Acts.28.29.1=<w lemma="strong:G3778" morph="robinson:D-APN">
+Acts.28.29.2=<w lemma="strong:G846" morph="robinson:P-GSM">
+Acts.28.29.3=<w lemma="strong:G3004" morph="robinson:V-2AAP-GSM strongsMorph:G5631">
+Acts.28.29.4=<w lemma="strong:G565" morph="robinson:V-2AAI-3P strongsMorph:G5627">
+Acts.28.29.5=<w lemma="strong:G3588" morph="robinson:T-NPM">
+Acts.28.29.6=<w lemma="strong:G2453" morph="robinson:A-NPM">
+Acts.28.29.7=<w lemma="strong:G4183" morph="robinson:A-ASF">
+Acts.28.29.8=<w lemma="strong:G2192" morph="robinson:V-PAP-NPM strongsMorph:G5723">
+Acts.28.29.9=<w lemma="strong:G1722" morph="robinson:PREP">
+Acts.28.29.10=<w lemma="strong:G1438" morph="robinson:F-3DPM">
+Acts.28.29.11=<w lemma="strong:G5495" morph="robinson:N-ASF">

Added: trunk/modules/na28/tag-exceptions-na28.conf
===================================================================
--- trunk/modules/na28/tag-exceptions-na28.conf	                        (rev 0)
+++ trunk/modules/na28/tag-exceptions-na28.conf	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,365 @@
+[exceptions]
+Matt.0=<w lemma="strong:G2596" morph="robinson:PREP">
+Matt.1=<w lemma="strong:G3156" morph="robinson:N-ASM">
+Matt.6.24.3=<w lemma="strong:G1417" morph="robinson:A-DPF">
+Matt.9.4.9=<w lemma="strong:G2444" morph="robinson:CONJ">
+Matt.12.47.16=<w lemma="strong:G2980" morph="robinson:V-AAN strongsMorph:G5658">
+Matt.15.6.1=<w lemma="strong:G3756" morph="robinson:PRT-N">
+Matt.15.6.2=<w lemma="strong:G3361" morph="robinson:PRT-N">
+Matt.15.6.3=<w lemma="strong:G5091" morph="robinson:V-FAI-3S strongsMorph:G5692">
+Matt.15.6.5=<w lemma="strong:G3962" morph="robinson:N-ASM">
+Matt.15.6.6=<w lemma="strong:G846" morph="robinson:P-GSM">
+Matt.15.6.10=<w lemma="strong:G3588" morph="robinson:T-ASM">
+Matt.26.60.8=<w lemma="strong:G5305" morph="robinson:ADV">
+Matt.26.60.9=<w lemma="strong:G1161" morph="robinson:CONJ">
+Matt.26.60.10=<w lemma="strong:G4334" morph="robinson:V-2AAP-NPM strongsMorph:G5631">
+Matt.26.60.11=<w lemma="strong:G1417" morph="robinson:A-NUI">
+Matt.27.46.22=<w lemma="strong:G2444" morph="robinson:CONJ">
+Mark.0=<w lemma="strong:G2596" morph="robinson:PREP">
+Mark.1=<w lemma="strong:G3138" morph="robinson:N-ASM">
+Mark.3.20.1=<w lemma="strong:G2064" morph="robinson:V-PNI-3S strongsMorph:G5736">
+Mark.3.20.2=<w lemma="strong:G1519" morph="robinson:PREP">
+Mark.3.20.3=<w lemma="strong:G3624" morph="robinson:N-ASM">
+Mark.3.20.4=<w lemma="strong:G2532" morph="robinson:CONJ">
+Mark.6.27.11=<w lemma="strong:G2532" morph="robinson:CONJ">
+Mark.6.27.12=<w lemma="strong:G565" morph="robinson:V-2AAP-NSM strongsMorph:G5631">
+Mark.6.27.13=<w lemma="strong:G607" morph="robinson:V-AAI-3S strongsMorph:G5656">
+Mark.6.27.14=<w lemma="strong:G846" morph="robinson:P-ASM">
+Mark.6.27.15=<w lemma="strong:G1722" morph="robinson:PREP">
+Mark.6.27.16=<w lemma="strong:G3588" morph="robinson:T-DSF">
+Mark.6.27.17=<w lemma="strong:G5438" morph="robinson:N-DSF">
+Mark.12.14.37=<w lemma="strong:G1325" morph="robinson:V-2AAS-1P strongsMorph:G5632">
+Mark.12.14.38=<w lemma="strong:G2228" morph="robinson:PRT">
+Mark.12.14.39=<w lemma="strong:G3361" morph="robinson:PRT-N">
+Mark.12.14.40=<w lemma="strong:G1325" morph="robinson:V-2AAS-1P strongsMorph:G5632">
+Mark.13.30.10=<w lemma="strong:G3360" morph="robinson:ADV">
+Mark.16.8.20=<w lemma="strong:G3956" morph="robinson:A-APN">
+Mark.16.8.21=<w lemma="strong:G1161" morph="robinson:CONJ">
+Mark.16.8.22=<w lemma="strong:G3588" morph="robinson:T-APN">
+Mark.16.8.23=<w lemma="strong:G3853" morph="robinson:V-RPP-APN strongsMorph:G5772">
+Mark.16.8.24=<w lemma="strong:G3588" morph="robinson:T-DPM">
+Mark.16.8.25=<w lemma="strong:G4012" morph="robinson:PREP">
+Mark.16.8.26=<w lemma="strong:G3588" morph="robinson:T-ASM">
+Mark.16.8.27=<w lemma="strong:G4074" morph="robinson:N-ASM">
+Mark.16.8.28=<w lemma="strong:G4935" morph="robinson:ADV">
+Mark.16.8.29=<w lemma="strong:G1804" morph="robinson:V-AAI-3P strongsMorph:G5656">
+Mark.16.8.30=<w lemma="strong:G3326" morph="robinson:PREP">
+Mark.16.8.31=<w lemma="strong:G1161" morph="robinson:CONJ">
+Mark.16.8.32=<w lemma="strong:G3778" morph="robinson:D-APN">
+Mark.16.8.33=<w lemma="strong:G2532" morph="robinson:CONJ">
+Mark.16.8.34=<w lemma="strong:G846" morph="robinson:P-NSM">
+Mark.16.8.35=<w lemma="strong:G3588" morph="robinson:T-NSM">
+Mark.16.8.36=<w lemma="strong:G2424" morph="robinson:N-NSM">
+Mark.16.8.38=<w lemma="strong:G575" morph="robinson:PREP">
+Mark.16.8.39=<w lemma="strong:G395" morph="robinson:N-GSF">
+Mark.16.8.40=<w lemma="strong:G2532" morph="robinson:CONJ">
+Mark.16.8.41=<w lemma="strong:G891" morph="robinson:ADV">
+Mark.16.8.42=<w lemma="strong:G1424" morph="robinson:N-GSF">
+Mark.16.8.43=<w lemma="strong:G1821" morph="robinson:V-AAI-3S strongsMorph:G5656">
+Mark.16.8.44=<w lemma="strong:G1223" morph="robinson:PREP">
+Mark.16.8.46=<w lemma="strong:G846" morph="robinson:P-GPM">
+Mark.16.8.47=<w lemma="strong:G3588" morph="robinson:T-ASN">
+Mark.16.8.48=<w lemma="strong:G2411" morph="robinson:N-ASN">
+Mark.16.8.49=<w lemma="strong:G2532" morph="robinson:CONJ">
+Mark.16.8.50=<w lemma="strong:G862" morph="robinson:A-ASM">
+Mark.16.8.51=<w lemma="strong:G2782" morph="robinson:N-NSN">
+Mark.16.8.52=<w lemma="strong:G3588" morph="robinson:T-GSF">
+Mark.16.8.53=<w lemma="strong:G166" morph="robinson:A-GSF">
+Mark.16.8.54=<w lemma="strong:G4991" morph="robinson:N-GSF">
+Mark.16.8.55=<w lemma="strong:G281" morph="robinson:HEB">
+Luke.0=<w lemma="strong:G2596" morph="robinson:PREP">
+Luke.1=<w lemma="strong:G3065" morph="robinson:N-ASM">
+Luke.6.18.1=<w lemma="strong:G2064" morph="robinson:V-2AAI-3P strongsMorph:G5627">
+Luke.6.18.2=<w lemma="strong:G191" morph="robinson:V-AAN strongsMorph:G5658">
+Luke.6.18.3=<w lemma="strong:G846" morph="robinson:P-GSM">
+Luke.6.18.5=<w lemma="strong:G2390" morph="robinson:V-APN strongsMorph:G5683">
+Luke.6.18.7=<w lemma="strong:G3588" morph="robinson:T-GPF">
+Luke.6.18.8=<w lemma="strong:G3554" morph="robinson:N-GPF">
+Luke.6.18.9=<w lemma="strong:G846" morph="robinson:P-GPM">
+Luke.6.18.10=<w lemma="strong:G2532" morph="robinson:CONJ">
+Luke.6.18.11=<w lemma="strong:G3588" morph="robinson:T-NPM">
+Luke.6.18.13=<w lemma="strong:G575" morph="robinson:PREP">
+Luke.7.18.9=<w lemma="strong:G2532" morph="robinson:CONJ">
+Luke.7.18.10=<w lemma="strong:G4341" morph="robinson:V-ADP-NSM strongsMorph:G5666">
+Luke.7.18.11=<w lemma="strong:G1417" morph="robinson:A-NUI">
+Luke.7.18.12=<w lemma="strong:G5100" morph="robinson:X-APM">
+Luke.7.18.13=<w lemma="strong:G3588" morph="robinson:T-GPM">
+Luke.7.18.14=<w lemma="strong:G3101" morph="robinson:N-GPM">
+Luke.7.18.15=<w lemma="strong:G846" morph="robinson:P-GSM">
+Luke.7.18.16=<w lemma="strong:G3588" morph="robinson:T-NSM">
+Luke.7.18.17=<w lemma="strong:G2491" morph="robinson:N-NSM">
+Luke.13.7.25=<w lemma="strong:G2444" morph="robinson:CONJ">
+Luke.17.23.5=<w lemma="strong:G2228" morph="robinson:PRT">
+Luke.22.67.0=<w lemma="strong:G3004" morph="robinson:V-PAP-NPM strongsMorph:G5723">
+John.0=<w lemma="strong:G2596" morph="robinson:PREP">
+John.1=<w lemma="strong:G2491" morph="robinson:N-ASM">
+John.18.2.0=<w lemma="strong:G1492" morph="robinson:V-2LAI-3S strongsMorph:G5714">
+Acts.0=<w lemma="strong:G4234" morph="robinson:N-NPF">
+Acts.1=<w lemma="strong:G652" morph="robinson:N-GPM">
+Acts.2.11.0=<w lemma="strong:G2453" morph="robinson:A-NPM">
+Acts.2.11.1=<w lemma="strong:G5037" morph="robinson:PRT">
+Acts.2.11.3=<w lemma="strong:G4339" morph="robinson:N-NPM">
+Acts.2.11.5=<w lemma="strong:G2532" morph="robinson:CONJ">
+Acts.3.20.0=<w lemma="strong:G3704" morph="robinson:ADV">
+Acts.3.20.1=<w lemma="strong:G302" morph="robinson:PRT">
+Acts.3.20.2=<w lemma="strong:G2064" morph="robinson:V-2AAS-3P strongsMorph:G5632">
+Acts.3.20.3=<w lemma="strong:G2540" morph="robinson:N-NPM">
+Acts.3.20.4=<w lemma="strong:G403" morph="robinson:N-GSF">
+Acts.3.20.5=<w lemma="strong:G575" morph="robinson:PREP">
+Acts.3.20.6=<w lemma="strong:G4383" morph="robinson:N-GSN">
+Acts.3.20.7=<w lemma="strong:G3588" morph="robinson:T-GSM">
+Acts.3.20.8=<w lemma="strong:G2962" morph="robinson:N-GSM">
+Acts.4.25.12=<w lemma="strong:G2444" morph="robinson:CONJ">
+Acts.5.39.14=<w lemma="strong:G3982" morph="robinson:V-API-3P strongsMorph:G5681">
+Acts.5.39.15=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.5.39.16=<w lemma="strong:G846" morph="robinson:P-DSM">
+Acts.7.26.17=<w lemma="strong:G2444" morph="robinson:CONJ">
+Acts.13.33.0=<w lemma="strong:G3754" morph="robinson:CONJ">
+Acts.13.33.1=<w lemma="strong:G3778" morph="robinson:D-ASF">
+Acts.13.33.2=<w lemma="strong:G3588" morph="robinson:T-NSM">
+Acts.13.33.3=<w lemma="strong:G2316" morph="robinson:N-NSM">
+Acts.13.33.4=<w lemma="strong:G1603" morph="robinson:V-RAI-3S strongsMorph:G5758">
+Acts.13.33.5=<w lemma="strong:G3588" morph="robinson:T-DPN">
+Acts.13.33.6=<w lemma="strong:G5043" morph="robinson:N-DPN">
+Acts.13.33.7=<w lemma="strong:G846" morph="robinson:P-GPM">
+Acts.13.33.8=<w lemma="strong:G1473" morph="robinson:P-1DP">
+Acts.13.33.9=<w lemma="strong:G450" morph="robinson:V-AAP-NSM strongsMorph:G5660">
+Acts.13.33.10=<w lemma="strong:G2424" morph="robinson:N-ASM">
+Acts.13.38.14=<w lemma="strong:G2532" morph="robinson:CONJ">
+Acts.13.38.15=<w lemma="strong:G575" morph="robinson:PREP">
+Acts.13.38.16=<w lemma="strong:G3956" morph="robinson:A-GPN">
+Acts.13.38.17=<w lemma="strong:G3739" morph="robinson:R-GPN">
+Acts.13.38.18=<w lemma="strong:G3756" morph="robinson:PRT-N">
+Acts.13.38.19=<w lemma="strong:G1410" morph="robinson:V-AOI-2P-ATT strongsMorph:G5675">
+Acts.13.38.20=<w lemma="strong:G1722" morph="robinson:PREP">
+Acts.13.38.21=<w lemma="strong:G3551" morph="robinson:N-DSM">
+Acts.13.38.22=<w lemma="strong:G3475" morph="robinson:N-GSM">
+Acts.13.38.23=<w lemma="strong:G1344" morph="robinson:V-APN strongsMorph:G5683">
+Acts.19.40.21=<w lemma="strong:G2532" morph="robinson:CONJ">
+Acts.19.40.22=<w lemma="strong:G3778" morph="robinson:D-APN">
+Acts.19.40.23=<w lemma="strong:G3004" morph="robinson:V-2AAP-NSM strongsMorph:G5631">
+Acts.19.40.24=<w lemma="strong:G630" morph="robinson:V-AAI-3S strongsMorph:G5656">
+Acts.19.40.25=<w lemma="strong:G3588" morph="robinson:T-ASF">
+Acts.19.40.26=<w lemma="strong:G1577" morph="robinson:N-ASF">
+Acts.24.19.0=<w lemma="strong:G5100" morph="robinson:X-NPM">
+Acts.24.19.1=<w lemma="strong:G1161" morph="robinson:CONJ">
+Acts.24.19.2=<w lemma="strong:G575" morph="robinson:PREP">
+Acts.24.19.3=<w lemma="strong:G3588" morph="robinson:T-GSF">
+Acts.24.19.4=<w lemma="strong:G773" morph="robinson:N-GSF">
+Acts.24.19.5=<w lemma="strong:G2453" morph="robinson:A-NPM">
+Rom.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Rom.1=<w lemma="strong:G4514" morph="robinson:A-APM">
+Rom.7.10.0=<w lemma="strong:G1473" morph="robinson:P-1NS">
+Rom.7.10.1=<w lemma="strong:G1161" morph="robinson:CONJ">
+Rom.7.10.2=<w lemma="strong:G599" morph="robinson:V-2AAI-3P strongsMorph:G5627">
+Rom.9.12.0=<w lemma="strong:G3756" morph="robinson:PRT-N">
+Rom.9.12.1=<w lemma="strong:G1537" morph="robinson:PREP">
+Rom.9.12.2=<w lemma="strong:G2041" morph="robinson:N-GPN">
+Rom.9.12.3=<w lemma="strong:G235" morph="robinson:CONJ">
+Rom.9.12.5=<w lemma="strong:G1537" morph="robinson:PREP">
+Rom.9.12.6=<w lemma="strong:G3588" morph="robinson:T-GSM">
+Rom.9.12.7=<w lemma="strong:G2564" morph="robinson:V-PAP-GSM strongsMorph:G5723">
+1Cor.0=<w lemma="strong:G4314" morph="robinson:PREP">
+1Cor.1=<w lemma="strong:G2881" morph="robinson:A-APM">
+1Cor.2=
+1Cor.10.29.10=<w lemma="strong:G2444" morph="robinson:CONJ">
+2Cor.0=<w lemma="strong:G4314" morph="robinson:PREP">
+2Cor.1=<w lemma="strong:G2881" morph="robinson:A-APM">
+2Cor.2=
+2Cor.1.7.1=<w lemma="strong:G3588" morph="robinson:T-NSF">
+2Cor.1.7.2=<w lemma="strong:G1680" morph="robinson:N-NSF">
+2Cor.1.7.3=<w lemma="strong:G1473" morph="robinson:P-1GP">
+2Cor.1.7.4=<w lemma="strong:G949" morph="robinson:A-NSF">
+2Cor.1.7.5=<w lemma="strong:G5228" morph="robinson:PREP">
+2Cor.1.7.6=<w lemma="strong:G1473" morph="robinson:P-1GP">
+2Cor.1.7.15=<w lemma="strong:G2532" morph="robinson:CONJ">
+2Cor.8.14.0=<w lemma="strong:G1722" morph="robinson:PREP">
+2Cor.8.14.1=<w lemma="strong:G3588" morph="robinson:T-DSM">
+2Cor.8.14.2=<w lemma="strong:G3568" morph="robinson:ADV">
+2Cor.8.14.3=<w lemma="strong:G2540" morph="robinson:N-DSM">
+2Cor.8.14.13=<w lemma="strong:G3588" morph="robinson:T-ASN">
+2Cor.8.14.14=<w lemma="strong:G1565" morph="robinson:D-GPM">
+2Cor.8.14.15=<w lemma="strong:G4051" morph="robinson:N-NSN">
+2Cor.8.14.17=<w lemma="strong:G1519" morph="robinson:PREP">
+2Cor.8.14.18=<w lemma="strong:G3588" morph="robinson:T-ASN">
+2Cor.8.14.19=<w lemma="strong:G4771" morph="robinson:P-2GP">
+2Cor.8.14.20=<w lemma="strong:G5303" morph="robinson:N-ASN">
+2Cor.10.4.15=<w lemma="strong:G3053" morph="robinson:N-APM">
+2Cor.10.4.16=<w lemma="strong:G2507" morph="robinson:V-PAP-NPM strongsMorph:G5723">
+2Cor.13.12.5=<w lemma="strong:G782" morph="robinson:V-PNI-3P strongsMorph:G5736">
+2Cor.13.12.6=<w lemma="strong:G4771" morph="robinson:P-2AP">
+2Cor.13.12.7=<w lemma="strong:G3588" morph="robinson:T-NPM">
+2Cor.13.12.8=<w lemma="strong:G40" morph="robinson:A-NPM">
+2Cor.13.12.9=<w lemma="strong:G3956" morph="robinson:A-NPM">
+2Cor.13.13.0=<w lemma="strong:G3588" morph="robinson:T-NSF">
+2Cor.13.13.1=<w lemma="strong:G5485" morph="robinson:N-NSF">
+2Cor.13.13.2=<w lemma="strong:G3588" morph="robinson:T-GSM">
+2Cor.13.13.3=<w lemma="strong:G2962" morph="robinson:N-GSM">
+2Cor.13.13.4=<w lemma="strong:G2424" morph="robinson:N-GSM">
+2Cor.13.13.5=<w lemma="strong:G5547" morph="robinson:N-GSM">
+2Cor.13.13.6=<w lemma="strong:G2532" morph="robinson:CONJ">
+2Cor.13.13.7=<w lemma="strong:G3588" morph="robinson:T-NSF">
+2Cor.13.13.8=<w lemma="strong:G26" morph="robinson:N-NSF">
+2Cor.13.13.9=<w lemma="strong:G3588" morph="robinson:T-GSM">
+2Cor.13.13.10=<w lemma="strong:G2316" morph="robinson:N-GSM">
+2Cor.13.13.11=<w lemma="strong:G2532" morph="robinson:CONJ">
+2Cor.13.13.12=<w lemma="strong:G3588" morph="robinson:T-NSF">
+2Cor.13.13.13=<w lemma="strong:G2842" morph="robinson:N-NSF">
+2Cor.13.13.14=<w lemma="strong:G3588" morph="robinson:T-GSN">
+2Cor.13.13.15=<w lemma="strong:G40" morph="robinson:A-GSN">
+2Cor.13.13.16=<w lemma="strong:G4151" morph="robinson:N-GSN">
+2Cor.13.13.17=<w lemma="strong:G3326" morph="robinson:PREP">
+2Cor.13.13.18=<w lemma="strong:G3956" morph="robinson:A-GPN">
+2Cor.13.13.19=<w lemma="strong:G4771" morph="robinson:P-2GP">
+Gal.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Gal.1=<w lemma="strong:G1052" morph="robinson:A-APM">
+Gal.2.19.9=<w lemma="strong:G5547" morph="robinson:N-DSM">
+Gal.2.19.10=<w lemma="strong:G4957" morph="robinson:V-RPI-1S strongsMorph:G5769">
+Gal.3.19.8=<w lemma="strong:G891" morph="robinson:ADV">
+Gal.4.19.5=<w lemma="strong:G3360" morph="robinson:ADV">
+Eph.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Eph.1=<w lemma="strong:G2180" morph="robinson:A-APM">
+Eph.1.10.21=<w lemma="strong:G1722" morph="robinson:PREP">
+Eph.1.10.22=<w lemma="strong:G846" morph="robinson:P-DSM">
+Eph.2.14.17=<w lemma="strong:G3588" morph="robinson:T-ASF">
+Eph.2.14.18=<w lemma="strong:G2189" morph="robinson:N-ASF">
+Eph.2.14.19=<w lemma="strong:G1722" morph="robinson:PREP">
+Eph.2.14.20=<w lemma="strong:G3588" morph="robinson:T-DSF">
+Eph.2.14.21=<w lemma="strong:G4561" morph="robinson:N-DSF">
+Eph.2.14.22=<w lemma="strong:G846" morph="robinson:P-GSM">
+Eph.3.17.10=<w lemma="strong:G1722" morph="robinson:PREP">
+Eph.3.17.11=<w lemma="strong:G26" morph="robinson:N-DSF">
+Eph.3.17.12=<w lemma="strong:G4492" morph="robinson:V-RPP-NPM strongsMorph:G5772">
+Eph.3.17.13=<w lemma="strong:G2532" morph="robinson:CONJ">
+Eph.3.17.14=<w lemma="strong:G2311" morph="robinson:V-RPP-NPM strongsMorph:G5772">
+Eph.5.14.0=<w lemma="strong:G3956" morph="robinson:A-NSN">
+Eph.5.14.1=<w lemma="strong:G1063" morph="robinson:CONJ">
+Eph.5.14.2=<w lemma="strong:G3588" morph="robinson:T-ASN">
+Eph.5.14.3=<w lemma="strong:G5319" morph="robinson:V-PPP-NSN strongsMorph:G5746">
+Eph.5.14.4=<w lemma="strong:G5457" morph="robinson:N-NSN">
+Eph.5.14.5=<w lemma="strong:G1510" morph="robinson:V-PAI-3S strongsMorph:G5719">
+Phil.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Phil.1=<w lemma="strong:G5374" morph="robinson:A-APM">
+Phil.3.7.0=<w lemma="strong:G235" morph="robinson:CONJ">
+Col.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Col.1=<w lemma="strong:G2857" morph="robinson:A-APM">
+Col.1.22.0=<w lemma="strong:G3570" morph="robinson:ADV">
+Col.1.22.1=<w lemma="strong:G1161" morph="robinson:CONJ">
+Col.1.22.2=<w lemma="strong:G604" morph="robinson:V-AAI-3S strongsMorph:G5656">
+1Thess.0=<w lemma="strong:G4314" morph="robinson:PREP">
+1Thess.1=<w lemma="strong:G2332" morph="robinson:A-APM">
+1Thess.2=
+1Thess.1.2.14=<w lemma="strong:G89" morph="robinson:ADV">
+1Thess.2.7.0=<w lemma="strong:G1410" morph="robinson:V-PNP-NPM strongsMorph:G5740">
+1Thess.2.7.2=<w lemma="strong:G922" morph="robinson:N-DSN">
+1Thess.2.7.3=<w lemma="strong:G1510" morph="robinson:V-PAN strongsMorph:G5721">
+1Thess.2.7.5=<w lemma="strong:G5547" morph="robinson:N-GSM">
+1Thess.2.7.6=<w lemma="strong:G652" morph="robinson:N-NPM">
+1Thess.2.7.11=<w lemma="strong:G1722" morph="robinson:PREP">
+1Thess.2.7.14=<w lemma="strong:G5613" morph="robinson:ADV">
+1Thess.2.12.0=<w lemma="strong:G3870" morph="robinson:V-PAP-NPM strongsMorph:G5723">
+1Thess.2.12.3=<w lemma="strong:G3888" morph="robinson:V-PNP-NPM strongsMorph:G5740">
+1Thess.2.12.15=<w lemma="strong:G4771" morph="robinson:P-2AP">
+1Thess.2.12.20=<w lemma="strong:G2532" morph="robinson:CONJ">
+2Thess.0=<w lemma="strong:G4314" morph="robinson:PREP">
+2Thess.1=<w lemma="strong:G2332" morph="robinson:A-APM">
+2Thess.2=
+1Tim.0=<w lemma="strong:G4314" morph="robinson:PREP">
+1Tim.1=<w lemma="strong:G5095" morph="robinson:N-ASM">
+1Tim.2=
+2Tim.0=<w lemma="strong:G4314" morph="robinson:PREP">
+2Tim.1=<w lemma="strong:G5095" morph="robinson:N-ASM">
+2Tim.2=
+Titus.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Titus.1=<w lemma="strong:G5103" morph="robinson:N-ASM">
+Phlm.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Phlm.1=<w lemma="strong:G5371" morph="robinson:N-ASM">
+Heb.0=<w lemma="strong:G4314" morph="robinson:PREP">
+Heb.1=<w lemma="strong:G1445" morph="robinson:A-APM">
+Heb.1.2.0=<w lemma="strong:G1909" morph="robinson:PREP">
+Heb.1.2.2=<w lemma="strong:G2078" morph="robinson:A-GSM-S">
+Heb.1.2.3=<w lemma="strong:G3588" morph="robinson:T-GPF">
+Heb.1.2.4=<w lemma="strong:G2250" morph="robinson:N-GPF">
+Heb.1.2.5=<w lemma="strong:G3778" morph="robinson:D-GPF">
+Heb.1.2.6=<w lemma="strong:G2980" morph="robinson:V-AAI-3S strongsMorph:G5656">
+Heb.1.2.7=<w lemma="strong:G1473" morph="robinson:P-1DP">
+Heb.1.2.8=<w lemma="strong:G1722" morph="robinson:PREP">
+Heb.1.2.9=<w lemma="strong:G5207" morph="robinson:N-DSM">
+Heb.3.10.0=<w lemma="strong:G5062" morph="robinson:A-NUI">
+Heb.3.10.1=<w lemma="strong:G2094" morph="robinson:N-APN">
+Heb.3.13.7=<w lemma="strong:G891" morph="robinson:ADV">
+Heb.12.4.2=<w lemma="strong:G3360" morph="robinson:ADV">
+Heb.12.22.13=<w lemma="strong:G3831" morph="robinson:N-DSF">
+Jas.0=<w lemma="strong:G2385" morph="robinson:N-GSM">
+Jas.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+Jas.1.20.5=<w lemma="strong:G3756" morph="robinson:PRT-N">
+Jas.1.20.6=<w lemma="strong:G2716" morph="robinson:V-PNI-3S strongsMorph:G5736">
+Jas.2.4.5=<w lemma="strong:G2532" morph="robinson:CONJ">
+Jas.2.15.9=<w lemma="strong:G5600" morph="robinson:V-PXS-3P">
+Jas.4.10.3=<w lemma="strong:G3588" morph="robinson:T-GSM">
+Jas.5.10.4=<w lemma="strong:G2“552 morph="robinson:N-GSF">
+1Pet.0=<w lemma="strong:G4074" morph="robinson:N-GSM">
+1Pet.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+1Pet.2=<w lemma="strong:G4413" morph="robinson:A-NSF-S">
+1Pet.1.6.8=<w lemma="strong:G3076" morph="robinson:V-PAP-APF">
+1Pet.3.16.0=<w lemma="strong:G235" morph="robinson:CONJ">
+1Pet.3.16.1=<w lemma="strong:G3326" morph="robinson:PREP">
+1Pet.3.16.2=<w lemma="strong:G4240" morph="robinson:N-GSF">
+1Pet.3.16.3=<w lemma="strong:G2532" morph="robinson:CONJ">
+1Pet.3.16.4=<w lemma="strong:G5401" morph="robinson:N-GSM">
+1Pet.4.16.12=<w lemma="strong:G3313" morph="robinson:N-DSN">
+1Pet.5.1.1=<w lemma="strong:G3588" morph="robinson:T-APM">
+2Pet.0=<w lemma="strong:G4074" morph="robinson:N-GSM">
+2Pet.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+2Pet.2=<w lemma="strong:G1208" morph="robinson:A-NSF">
+2Pet.2.6.10=<w lemma="strong:G764" morph="robinson:V-PAN">
+2Pet.2.11.13=<w lemma="strong:G2962" morph="robinson:N-DSM">
+2Pet.2.15.0=<w lemma="strong:G2641" morph="robinson:V-2AAP-NPM strongsMorph:G5631">
+2Pet.2.18.10=<w lemma="strong:G3689" morph="robinson:ADV">
+2Pet.3.6.2=<w lemma="strong:G3739" morph="robinson:R-ASM">
+2Pet.3.10.25=<w lemma="strong:G3756" morph="robinson:PRT-N">
+2Pet.3.16.4=<w lemma="strong:G3588" morph="robinson:T-DPF">
+2Pet.3.16.21=<w lemma="strong:G4761" morph="robinson:V-FIA-3P">
+1John.0=<w lemma="strong:G2491" morph="robinson:N-GSM">
+1John.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+1John.2=<w lemma="strong:G4413" morph="robinson:A-NSF-S">
+1John.2.14.2=<w lemma="strong:G3813" morph="robinson:N-NPN">
+1John.2.14.6=<w lemma="strong:G3962" morph="robinson:N-ASM">
+1John.2.14.11=<w lemma="strong:G1097" morph="robinson:V-RAI-2P strongsMorph:G5758">
+1John.2.14.16=<w lemma="strong:G1125" morph="robinson:V-AAI-1S strongsMorph:G5656">
+1John.2.14.19=<w lemma="strong:G3754" morph="robinson:CONJ">
+1John.2.14.28=<w lemma="strong:G4771" morph="robinson:P-2DP">
+1John.2.14.32=<w lemma="strong:G3588" morph="robinson:T-ASM">
+1John.3.7.0=<w lemma="strong:G3813" morph="robinson:N-NPN">
+1John.5.10.12=<w lemma="strong:G846" morph="robinson:P-DSM">
+1John.5.18.18=<w lemma="strong:G1438" morph="robinson:F-3ASM">
+2John.0=<w lemma="strong:G2491" morph="robinson:N-GSM">
+2John.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+2John.2=<w lemma="strong:G1208" morph="robinson:A-NSF">
+3John.0=<w lemma="strong:G2491" morph="robinson:N-GSM">
+3John.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+3John.2=<w lemma="strong:G5154" morph="robinson:A-NSF">
+Jude.0=<w lemma="strong:G2448" morph="robinson:N-GSM">
+Jude.1=<w lemma="strong:G1992" morph="robinson:N-NSF">
+Jude.1.5.10=<w lemma="strong:G2424" morph="robinson:N-NSM">
+Rev.0=<w lemma="strong:G602" morph="robinson:N-NSF">
+Rev.1=<w lemma="strong:G2491" morph="robinson:N-GSM">
+Rev.2.25.4=<w lemma="strong:G891" morph="robinson:ADV">
+Rev.2.28.0=<w lemma="strong:G5613" morph="robinson:ADV">
+Rev.2.28.1=<w lemma="strong:G2504" morph="robinson:P-1NS-K">
+Rev.2.28.2=<w lemma="strong:G2983" morph="robinson:V-2RAI-1S strongsMorph:G5719">
+Rev.2.28.3=<w lemma="strong:G3844" morph="robinson:PREP">
+Rev.2.28.4=<w lemma="strong:G3588" morph="robinson:T-GSN">
+Rev.2.28.5=<w lemma="strong:G3962" morph="robinson:N-GSM">
+Rev.2.28.6=<w lemma="strong:G1473" morph="robinson:P-1GS">
+Rev.12.17.28=<w lemma="strong:G2532" morph="robinson:CONJ">
+Rev.12.17.29=<w lemma="strong:G2476" morph="robinson:V-API-3S strongsMorph:G5681">
+Rev.12.17.30=<w lemma="strong:G1909" morph="robinson:PREP">
+Rev.12.17.31=<w lemma="strong:G3588" morph="robinson:T-ASF">
+Rev.12.17.32=<w lemma="strong:G285" morph="robinson:N-ASF">
+Rev.12.17.33=<w lemma="strong:G3588" morph="robinson:T-GSF">
+Rev.12.17.34=<w lemma="strong:G2281" morph="robinson:N-GSF">
+Rev.17.9.19=<w lemma="strong:G2532" morph="robinson:CONJ">
+Rev.17.9.20=<w lemma="strong:G935" morph="robinson:N-APM">
+Rev.17.9.21=<w lemma="strong:G2033" morph="robinson:A-NUI">
+Rev.17.9.22=<w lemma="strong:G1510" morph="robinson:V-PAI-3P strongsMorph:G5719">

Added: trunk/modules/na28/verses.sed
===================================================================
--- trunk/modules/na28/verses.sed	                        (rev 0)
+++ trunk/modules/na28/verses.sed	2024-05-17 14:17:21 UTC (rev 565)
@@ -0,0 +1,38 @@
+s/<p\(.*\)id="V-OT-B/<verse\1osisID="B/g
+s/<p\(.*\)id="V-AP-B/<verse\1osisID="B/g
+s/<div\( type="book".*\)id="OT-B\([0-9,K]*\)"/<div\1osisID="B\2K0V0"/g
+s/<div\( type="book".*\)id="AP-B\([0-9,K]*\)"/<div\1osisID="B\2K0V0"/g
+s/<div\( type="chapter".*\)id="OT-B\([0-9,K]*\)"/<div\1osisID="B\2V0"/g
+s/<div\( type="chapter".*\)id="AP-B\([0-9,K]*\)"/<div\1osisID="B\2V0"/g
+s/<\/p>/<\/verse>/g
+s/\(osisID="B[0-9]*\)K\([0-9]*\)V/\1.\2./g
+s/\(osisID="\)B1\./\1Matt./g
+s/\(osisID="\)B2\./\1Mark./g
+s/\(osisID="\)B3\./\1Luk./g
+s/\(osisID="\)B4\./\1John./g
+s/\(osisID="\)B5\./\1Acts./g
+s/\(osisID="\)B6\./\1Rom./g
+s/\(osisID="\)B7\./\11Cor./g
+s/\(osisID="\)B8\./\12Cor./g
+s/\(osisID="\)B9\./\1Gal./g
+s/\(osisID="\)B10\./\1Eph./g
+s/\(osisID="\)B11\./\1Philip./g
+s/\(osisID="\)B12\./\1Col./g
+s/\(osisID="\)B13\./\11Thes./g
+s/\(osisID="\)B14\./\12Thes./g
+s/\(osisID="\)B15\./\11Tim./g
+s/\(osisID="\)B16\./\12Tim./g
+s/\(osisID="\)B17\./\1Tit./g
+s/\(osisID="\)B18\./\1Phile./g
+s/\(osisID="\)B19\./\1Heb./g
+s/\(osisID="\)B20\./\1Jam./g
+s/\(osisID="\)B21\./\11Pet./g
+s/\(osisID="\)B22\./\12Pet./g
+s/\(osisID="\)B23\./\11John./g
+s/\(osisID="\)B24\./\12John./g
+s/\(osisID="\)B25\./\13John./g
+s/\(osisID="\)B26\./\1Jude./g
+s/\(osisID="\)B27\./\1Rev./g
+s/\(<verse[^>]*osisID="\)Rev.12.18\("[^>]*>\)/\1Rev.12.17\2 (18) /g
+s/\(<verse[^>]*osisID="\)3John.1.15\("[^>]*>\)/\13John.1.14\2 (15) /g
+



More information about the sword-cvs mailing list