-
-
-
- Kahunapule Michael Johnson
- 2021-12-10T23:21:07.923054
- 2022-01-14T03:08:53.100483
- Added missing "to" to EXO 13:11
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/release/USX_1/1JN.usx b/samples/data/WEB-DBL/release/USX_1/1JN.usx
deleted file mode 100644
index afb572261..000000000
--- a/samples/data/WEB-DBL/release/USX_1/1JN.usx
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
- 62-1JN-web.sfm World English Bible (WEB)
- UTF-8
- 1 John
- John’s First Letter
- 1 John
- 1 John
- John’s First Letter
-
-
-
- Thatwhichwasfromthebeginning, thatwhichwehaveheard, thatwhichwehaveseenwithoureyes, thatwhichwesaw, andourhandstouched, concerningtheWordoflife(andthelifewasrevealed, andwehaveseen, andtestify, and declare toyouthelife, theeternallife, whichwaswiththeFather, andwasrevealedtous); thatwhichwehaveseenandheardwe declare toyou, thatyoualsomayhavefellowshipwithus. Yes, andourfellowshipiswiththeFatherandwithhisSon, JesusChrist.1:3 “Christ” means “Anointed One”.Andwewritethesethingstoyou, thatourjoymaybefulfilled.
-
-
- Thisisthemessagewhichwehaveheardfromhimandannouncetoyou, thatGodislight, andinhimisnodarknessatall. Ifwesaythatwehavefellowshipwithhimandwalkinthedarkness, welieanddon’ttellthetruth. Butifwewalkinthelightasheisinthelight, wehavefellowshipwithoneanother, andthebloodofJesusChristhisSon, cleansesusfromallsin. Ifwesaythatwehavenosin, wedeceiveourselves, andthetruthisnotinus. Ifweconfessoursins, heisfaithfulandrighteoustoforgiveusthesinsandtocleanseusfromallunrighteousness. Ifwesaythatwe haven’t sinned, wemakehimaliar, andhiswordisnotinus.
-
-
-
-
- Mylittlechildren, Iwritethesethingstoyousothatyoumaynotsin. Ifanyonesins, wehavea Counselor2:1 Greek παρακλητον: Counselor, Helper, Intercessor, Advocate, and Comforter.withtheFather, JesusChrist, therighteous. Andheisthe atoning sacrifice2:2 “atoning sacrifice” is from the Greek “ιλασμος”, an appeasing, propitiating, or the means of appeasement or propitiation—the sacrifice that turns away God’s wrath because of our sin. foroursins, andnotforoursonly, butalsoforthewholeworld. Thisishowweknowthatweknowhim: ifwekeephiscommandments. Onewhosays, “Iknowhim,” anddoesn’tkeephiscommandments, isaliar, andthetruthisn’tinhim. ButGod’slovehas most certainlybeenperfectedinwhoeverkeepshisword. Thisishowweknowthatweareinhim: hewhosaysheremainsinhimoughthimselfalsotowalkjustlikehewalked.
-
- Brothers, Iwritenonewcommandmenttoyou, butanoldcommandmentwhichyouhadfromthebeginning. Theoldcommandmentisthewordwhichyouheardfromthebeginning. Again, Iwriteanewcommandmenttoyou, whichistrueinhimandinyou, becausethedarknessispassingawayandthetruelightalreadyshines. Hewhosaysheisinthelightandhateshisbrotherisinthedarknessevenuntilnow. Hewholoveshisbrotherremainsinthelight, andthereisno occasion forstumblinginhim. Buthewhohateshisbrotherisinthedarkness, andwalksinthedarkness, anddoesn’tknowwhereheisgoing, becausethedarknesshasblindedhiseyes.
-
-
- Iwritetoyou, littlechildren, becauseyoursinsareforgivenyouforhisname’ssake.
-
-
- Iwritetoyou, fathers, becauseyouknowhimwhoisfromthebeginning.
-
- Iwritetoyou, youngmen, becauseyouhaveovercometheevilone.
-
- Iwritetoyou, little children, becauseyouknowtheFather.
-
-
- Ihavewrittentoyou, fathers, becauseyouknowhimwhoisfromthebeginning.
-
- Ihavewrittentoyou, youngmen, becauseyouarestrong, andthewordofGodremainsinyou, andyouhaveovercometheevilone.
-
-
- Don’tlovetheworldorthethingsthatareintheworld. Ifanyonelovestheworld, theFather’sloveisn’tinhim. Forallthatisintheworld—thelustoftheflesh, thelustoftheeyes, andtheprideoflife—isn’ttheFather’s, butistheworld’s. Theworldispassingawaywithitslusts, buthewhodoesGod’swillremainsforever.
-
- Little children, thesearetheend times, andasyouheardthattheAntichristiscoming, evennowmanyantichristshave arisen. Bythisweknowthatitisthefinalhour. Theywentoutfromus, buttheydidn’tbelongtous; foriftheyhadbelongedtous, theywouldhave continued withus. Buttheyleft, thattheymightberevealedthatnoneofthembelongtous. YouhaveananointingfromtheHolyOne, andyouallhave knowledge.2:20 Or, “know what is true”, or, “know all things”Ihavenotwrittentoyoubecauseyoudon’tknowthetruth, butbecauseyouknowit, andbecausenolieisofthetruth. WhoistheliarbuthewhodeniesthatJesusistheChrist? ThisistheAntichrist, hewhodeniestheFatherandtheSon. WhoeverdeniestheSon doesn’t havetheFather. HewhoconfessestheSonhastheFatheralso.
-
- Therefore, asforyou, letthatremaininyouwhichyouheardfromthebeginning. Ifthatwhichyouheardfromthebeginningremainsinyou, youalsowillremainintheSon, andintheFather. Thisisthepromisewhichhepromised us, theeternallife.
-
-
- ThesethingsIhavewrittentoyouconcerningthosewho would lead youastray. Asforyou, theanointingwhichyoureceivedfromhimremainsinyou, andyoudon’tneedforanyonetoteachyou. Butashisanointingteachesyouconcerningallthings, andistrue, andisnolie, andevenasittaughtyou, youwillremaininhim.
-
-
- Now, littlechildren, remaininhim, thatwhenheappears, wemayhaveboldnessandnotbeashamedbeforehimathiscoming. Ifyouknowthatheisrighteous, youknowthateveryonewhopracticesrighteousnesshasbeenbornofhim.
-
-
-
-
- SeehowgreatalovetheFatherhasgiventous, thatweshouldbecalledchildrenofGod! Forthiscausetheworlddoesn’tknowus, becauseitdidn’tknowhim. Beloved, nowwearechildrenofGod. Itisnotyetrevealedwhatwewillbe; butweknowthatwhenheisrevealed, wewillbelikehim, forwewillseehimjustasheis. Everyonewhohasthishope set onhimpurifieshimself, evenasheispure.
-
-
- Everyonewhosinsalsocommitslawlessness. Sinislawlessness. Youknowthathewasrevealedtotakeawayoursins, andnosinisinhim. Whoeverremainsinhimdoesn’tsin. Whoeversinshasn’tseenhimanddoesn’tknowhim.
-
-
- Littlechildren, letnooneleadyouastray. Hewhodoesrighteousnessisrighteous, even asheisrighteous. Hewhosinsisofthedevil, forthedevilhasbeensinningfromthebeginning. TothisendtheSonofGodwasrevealed: thathemightdestroytheworksofthedevil. WhoeverisbornofGoddoesn’tcommitsin, becausehisseedremainsinhim, andhecan’tsin, becauseheisbornofGod. InthisthechildrenofGodarerevealed, andthechildrenofthedevil. Whoeverdoesn’tdorighteousnessisnotofGod, neitherishewhodoesn’tlovehisbrother. Forthisisthemessagewhichyouheardfromthebeginning, thatweshouldloveoneanother— unlike Cain, whowasoftheeviloneand killed hisbrother. Whydidhe kill him? Becausehisdeedswereevil, andhisbrother’srighteous.
-
-
- Don’tbesurprised, mybrothers, iftheworldhatesyou. Weknowthatwehavepassedoutofdeathintolife, becausewelovethebrothers. Hewhodoesn’tlovehisbrotherremainsindeath. Whoeverhateshisbrotherisamurderer, andyouknowthatnomurdererhaseternalliferemaininginhim.
-
-
- Bythisweknowlove, becausehelaiddownhislifeforus. Andweoughttolaydownourlivesforthebrothers. Butwhoeverhastheworld’sgoodsandseeshisbrotherinneed, thencloseshisheartofcompassionagainsthim, howdoesGod’sloveremaininhim?
-
-
- Mylittlechildren, let’s notloveinwordonly, orwiththetongueonly, butindeedandtruth. Andbythisweknowthatweareofthetruthandpersuadeourheartsbeforehim, becauseifourheartcondemns us, Godisgreaterthanourheart, andknowsallthings. Beloved, ifourheartsdon’tcondemn us, wehaveboldnesstowardGod; sowhateverweask, wereceivefromhim, becausewekeephiscommandmentsanddothethingsthatarepleasinginhissight. Thisishiscommandment, thatweshouldbelieveinthenameofhisSon, JesusChrist, andloveoneanother, evenashecommanded. Hewhokeepshiscommandmentsremainsinhim, andheinhim. Bythisweknowthatheremainsinus, bytheSpiritwhichhegaveus.
-
-
-
-
- Beloved, don’tbelieveeveryspirit, buttestthespirits, whethertheyareofGod, becausemanyfalseprophetshavegoneoutintotheworld. BythisyouknowtheSpiritofGod: everyspiritwhoconfessesthatJesusChristhascomeinthefleshisofGod, andeveryspiritwhodoesn’tconfessthatJesus Christ hascomeinthe flesh isnotofGod; andthisisthespiritoftheAntichrist, ofwhomyouhaveheardthatitcomes. Nowitisintheworldalready. YouareofGod, littlechildren, andhaveovercomethem, becausegreaterishewhoisinyouthanhewhoisintheworld. Theyareoftheworld. Thereforetheyspeakoftheworld, andtheworldhearsthem. WeareofGod. HewhoknowsGodlistenstous. HewhoisnotofGoddoesn’tlistentous. Bythisweknowthespiritoftruth, andthespiritoferror.
-
-
- Beloved, let’s loveoneanother, forloveisofGod; andeveryonewholoveshasbeenbornofGodandknowsGod. Hewhodoesn’tlovedoesn’tknowGod, forGodislove. BythisGod’slovewasrevealedinus, thatGodhassenthisonly born4:9 The phrase “only born” is from the Greek word “μονογενη”, which is sometimes translated “only begotten” or “one and only”.Sonintotheworldthatwemightlivethroughhim. Inthisislove, notthatwelovedGod, butthathelovedus, andsenthisSonasthe atoning sacrifice4:10 “atoning sacrifice” is from the Greek “ιλασμος”, an appeasing, propitiating, or the means of appeasement or propitiation—the sacrifice that turns away God’s wrath because of our sin. foroursins. Beloved, ifGodloved us inthisway, wealsooughttoloveoneanother. NoonehasseenGodatanytime. Ifweloveoneanother, Godremainsinus, andhislovehasbeenperfectedinus.
-
-
- Bythisweknowthatweremaininhimandheinus, becausehehasgivenusofhisSpirit. WehaveseenandtestifythattheFatherhassenttheSonastheSavioroftheworld. WhoeverconfessesthatJesusistheSonofGod, Godremainsinhim, andheinGod. WeknowandhavebelievedthelovewhichGodhasforus. Godislove, andhewhoremainsinloveremainsinGod, andGodremainsinhim. Inthis, lovehasbeenmadeperfectamongus, thatwemayhaveboldnessinthedayofjudgment, becauseasheis, evensoweareinthisworld. Thereisnofearinlove; butperfectlovecastsoutfear, becausefearhaspunishment. Hewhofearsisnotmadeperfectinlove. Welovehim,4:19 NU omits “him”.becausehefirstloved us. Ifamansays, “IloveGod,” andhateshisbrother, heisaliar; forhewhodoesn’tlovehisbrotherwhomhehasseen, howcanheloveGodwhomhehasnotseen? Thiscommandmentwehavefromhim, thathewholovesGodshouldalsolovehisbrother.
-
-
-
-
- WhoeverbelievesthatJesusistheChristhasbeenbornofGod. WhoeverlovestheFatheralsolovesthechildwhoisbornofhim. BythisweknowthatwelovethechildrenofGod, whenweloveGodandkeephiscommandments. Forthisis loving God, thatwekeephiscommandments. Hiscommandmentsarenot grievous. ForwhateverisbornofGodovercomestheworld. Thisisthevictorythathasovercometheworld: yourfaith. Whoishewhoovercomestheworld, buthewhobelievesthatJesusistheSonofGod?
-
-
- Thisishewhocamebywaterandblood, JesusChrist; notwiththewateronly, butwiththewaterandtheblood. ItistheSpiritwhotestifies, becausetheSpiritisthetruth. Fortherearethreewhotestify:5:7 Only a few recent manuscripts add “in heaven: the Father, the Word, and the Holy Spirit; and these three are one. And there are three that testify on earth:”theSpirit, thewater, andtheblood; andthethreeagreeasone. Ifwereceivethewitnessofmen, thewitnessofGodisgreater; forthisisGod’stestimonywhichhehastestifiedconcerninghisSon. HewhobelievesintheSonofGodhasthetestimonyinhimself. Hewhodoesn’tbelieveGodhasmadehimaliar, becausehehasnotbelievedinthetestimonythatGodhasgivenconcerninghisSon. Thetestimonyisthis: thatGodgavetouseternallife, andthislifeisinhisSon. HewhohastheSonhasthelife. Hewhodoesn’thaveGod’sSondoesn’thavethelife.
-
-
- ThesethingsIhavewrittentoyouwhobelieveinthenameoftheSonofGod, thatyoumayknowthatyouhaveeternallife, andthatyoumay continue tobelieveinthenameoftheSonofGod.
-
-
- Thisistheboldnesswhichwehavetowardhim, thatifweaskanythingaccordingtohiswill, helistenstous. Andifweknowthathelistenstous, whateverweask, weknowthatwehavethe petitions whichwehaveaskedofhim.
-
-
- Ifanyoneseeshisbrothersinningasinnot leading todeath, heshallask, andGodwillgivehimlifeforthosewhosinnot leading todeath. Thereissin leading todeath. Idon’tsaythatheshouldmakearequestconcerningthis. Allunrighteousnessissin, andthereissinnot leading todeath.
-
-
- WeknowthatwhoeverisbornofGoddoesn’tsin, buthewhowasbornofGodkeepshimself, andtheevilonedoesn’ttouchhim. WeknowthatweareofGod, andthewholeworldliesinthe power oftheevilone. WeknowthattheSonofGodhascomeandhasgivenusanunderstanding, thatweknowhimwhoistrue; andweareinhimwhoistrue, inhisSonJesusChrist. ThisisthetrueGodandeternallife.
-
-
- Littlechildren, keepyourselvesfromidols.
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/release/USX_1/2JN.usx b/samples/data/WEB-DBL/release/USX_1/2JN.usx
deleted file mode 100644
index 4e17914ee..000000000
--- a/samples/data/WEB-DBL/release/USX_1/2JN.usx
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
- 63-2JN-web.sfm World English Bible (WEB)
- UTF-8
- 2 John
- John’s Second Letter
- 2 John
- 2 John
- John’s Second Letter
-
-
-
- Theelder, tothechosenladyandherchildren, whomIloveintruth, andnotIonly, butalsoallthosewhoknowthetruth, forthe truth’s sake, whichremainsinus, anditwillbewithusforever: Grace, mercy, andpeacewillbewithus, fromGodtheFatherandfromtheLordJesusChrist,1:3 “Christ” means “Anointed One”.theSonoftheFather, intruthandlove.
-
-
- IrejoicegreatlythatIhavefoundsomeofyourchildrenwalkingintruth, evenaswehave been commandedbytheFather. NowIbegyou, dear lady, notasthoughIwrotetoyouanewcommandment, butthatwhichwehadfromthebeginning, thatweloveoneanother. Thisislove, thatweshouldwalkaccordingtohiscommandments. Thisisthecommandment, evenasyouheardfromthebeginning, thatyoushouldwalkinit.
-
-
- Formanydeceivershavegoneoutintotheworld, thosewhodon’tconfessthatJesusChristcameintheflesh. ThisisthedeceiverandtheAntichrist. Watchyourselves, thatwedon’tlosethethingswhichwehave accomplished, butthatwereceiveafullreward. Whoever transgresses anddoesn’tremainintheteachingofChristdoesn’thaveGod. HewhoremainsintheteachinghasboththeFatherandtheSon. Ifanyonecomestoyouanddoesn’tbringthisteaching, don’treceivehimintoyourhouse, anddon’t welcome him, forhewho welcomes himparticipatesinhisevildeeds.
-
-
- Havingmanythingstowritetoyou, Idon’twanttodosowithpaperandink, butIhopetocometoyouandtospeakfacetoface, thatourjoymaybemadefull. Thechildrenofyourchosensistergreetyou. Amen.
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/release/USX_1/3JN.usx b/samples/data/WEB-DBL/release/USX_1/3JN.usx
deleted file mode 100644
index 02f756613..000000000
--- a/samples/data/WEB-DBL/release/USX_1/3JN.usx
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
- 64-3JN-web.sfm World English Bible (WEB)
- UTF-8
- 3 John
- John’s Third Letter
- 3 John
- 3 John
- John’s Third Letter
-
-
-
- TheeldertoGaiusthebeloved, whomIloveintruth.
-
-
- Beloved, Ipraythatyoumayprosperinallthingsandbe healthy, evenasyoursoulprospers. ForIrejoicedgreatlywhenbrotherscameandtestifiedaboutyourtruth, evenasyouwalkintruth. Ihavenogreaterjoythanthis: tohearaboutmychildrenwalkingintruth.
-
-
- Beloved, youdoafaithfulworkinwhateveryouaccomplishforthosewhoarebrothersandstrangers. Theyhavetestifiedaboutyourlovebeforetheassembly. Youwilldowelltosendthem forward ontheirjourneyinawayworthyofGod, becauseforthesakeoftheNametheywentout, takingnothingfromtheGentiles. Wethereforeoughtto receive such, thatwemaybefellowworkersforthetruth.
-
-
- Iwrotetotheassembly, butDiotrephes, wholovestobefirst among them, doesn’tacceptwhatwesay. Therefore, ifIcome, Iwillcallattentiontohisdeedswhichhedoes, unjustlyaccusinguswithwickedwords. Notcontentwiththis, hedoesn’treceivethebrothershimself, andthosewhowould, heforbidsandthrowsoutoftheassembly.
-
-
- Beloved, don’timitatethatwhichisevil, butthatwhichisgood. HewhodoesgoodisofGod. Hewhodoesevilhasn’tseenGod. Demetriushasthetestimonyofall, andofthetruthitself; yes, wealsotestify, andyouknowthatourtestimonyistrue.
-
-
- Ihadmanythingstowritetoyou, butIam unwilling towritetoyouwithinkandpen; butIhopetoseeyou soon. Thenwewillspeakfacetoface.
- Peace betoyou. The friends greet you. Greet the friends by name.
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/release/eng_en.ldml b/samples/data/WEB-DBL/release/eng_en.ldml
deleted file mode 100644
index 1371f1ba8..000000000
--- a/samples/data/WEB-DBL/release/eng_en.ldml
+++ /dev/null
@@ -1 +0,0 @@
-[][!%-/\:;=?\[\]\u00B0\u00D7\u200C\u200D\u2013\u2014\u2018\u2019\u201C\u201D\u2303{...}][][\ '\-\u2019][][][a b c d e f g h i j k l m n o p q r s t u v w x y z {aa} {bb} {cc} {dd} {ee} {ff} {gg} {hh} {ii} {jj} {kk} {ll} {mm} {nn} {oo} {pp} {qq} {rr} {ss} {tt} {uu} {vv} {ww} {xx} {yy} {zz}][]“”‘’left-to-rightstandard
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/release/styles.xml b/samples/data/WEB-DBL/release/styles.xml
deleted file mode 100644
index 6614341eb..000000000
--- a/samples/data/WEB-DBL/release/styles.xml
+++ /dev/null
@@ -1,1817 +0,0 @@
-
-
- Gentium Plus
- 14
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/release/versification.vrs b/samples/data/WEB-DBL/release/versification.vrs
deleted file mode 100644
index 19d8f1511..000000000
--- a/samples/data/WEB-DBL/release/versification.vrs
+++ /dev/null
@@ -1,395 +0,0 @@
-# List of books, chapters, verses
-# One line per book.
-# One entry for each chapter.
-# Verse number is the maximum verse number for that chapter.
-GEN 1:31 2:25 3:24 4:26 5:32 6:22 7:24 8:22 9:29 10:32 11:32 12:20 13:18 14:24 15:21 16:16 17:27 18:33 19:38 20:18 21:34 22:24 23:20 24:67 25:34 26:35 27:46 28:22 29:35 30:43 31:55 32:32 33:20 34:31 35:29 36:43 37:36 38:30 39:23 40:23 41:57 42:38 43:34 44:34 45:28 46:34 47:31 48:22 49:33 50:26
-EXO 1:22 2:25 3:22 4:31 5:23 6:30 7:25 8:32 9:35 10:29 11:10 12:51 13:22 14:31 15:27 16:36 17:16 18:27 19:25 20:26 21:36 22:31 23:33 24:18 25:40 26:37 27:21 28:43 29:46 30:38 31:18 32:35 33:23 34:35 35:35 36:38 37:29 38:31 39:43 40:38
-LEV 1:17 2:16 3:17 4:35 5:19 6:30 7:38 8:36 9:24 10:20 11:47 12:8 13:59 14:57 15:33 16:34 17:16 18:30 19:37 20:27 21:24 22:33 23:44 24:23 25:55 26:46 27:34
-NUM 1:54 2:34 3:51 4:49 5:31 6:27 7:89 8:26 9:23 10:36 11:35 12:16 13:33 14:45 15:41 16:50 17:13 18:32 19:22 20:29 21:35 22:41 23:30 24:25 25:18 26:65 27:23 28:31 29:40 30:16 31:54 32:42 33:56 34:29 35:34 36:13
-DEU 1:46 2:37 3:29 4:49 5:33 6:25 7:26 8:20 9:29 10:22 11:32 12:32 13:18 14:29 15:23 16:22 17:20 18:22 19:21 20:20 21:23 22:30 23:25 24:22 25:19 26:19 27:26 28:68 29:29 30:20 31:30 32:52 33:29 34:12
-JOS 1:18 2:24 3:17 4:24 5:15 6:27 7:26 8:35 9:27 10:43 11:23 12:24 13:33 14:15 15:63 16:10 17:18 18:28 19:51 20:9 21:45 22:34 23:16 24:33
-JDG 1:36 2:23 3:31 4:24 5:31 6:40 7:25 8:35 9:57 10:18 11:40 12:15 13:25 14:20 15:20 16:31 17:13 18:31 19:30 20:48 21:25
-RUT 1:22 2:23 3:18 4:22
-1SA 1:28 2:36 3:21 4:22 5:12 6:21 7:17 8:22 9:27 10:27 11:15 12:25 13:23 14:52 15:35 16:23 17:58 18:30 19:24 20:42 21:15 22:23 23:29 24:22 25:44 26:25 27:12 28:25 29:11 30:31 31:13
-2SA 1:27 2:32 3:39 4:12 5:25 6:23 7:29 8:18 9:13 10:19 11:27 12:31 13:39 14:33 15:37 16:23 17:29 18:33 19:43 20:26 21:22 22:51 23:39 24:25
-1KI 1:53 2:46 3:28 4:34 5:18 6:38 7:51 8:66 9:28 10:29 11:43 12:33 13:34 14:31 15:34 16:34 17:24 18:46 19:21 20:43 21:29 22:53
-2KI 1:18 2:25 3:27 4:44 5:27 6:33 7:20 8:29 9:37 10:36 11:21 12:21 13:25 14:29 15:38 16:20 17:41 18:37 19:37 20:21 21:26 22:20 23:37 24:20 25:30
-1CH 1:54 2:55 3:24 4:43 5:26 6:81 7:40 8:40 9:44 10:14 11:47 12:40 13:14 14:17 15:29 16:43 17:27 18:17 19:19 20:8 21:30 22:19 23:32 24:31 25:31 26:32 27:34 28:21 29:30
-2CH 1:17 2:18 3:17 4:22 5:14 6:42 7:22 8:18 9:31 10:19 11:23 12:16 13:22 14:15 15:19 16:14 17:19 18:34 19:11 20:37 21:20 22:12 23:21 24:27 25:28 26:23 27:9 28:27 29:36 30:27 31:21 32:33 33:25 34:33 35:27 36:23
-EZR 1:11 2:70 3:13 4:24 5:17 6:22 7:28 8:36 9:15 10:44
-NEH 1:11 2:20 3:32 4:23 5:19 6:19 7:73 8:18 9:38 10:39 11:36 12:47 13:31
-EST 1:22 2:23 3:15 4:17 5:14 6:14 7:10 8:17 9:32 10:3
-JOB 1:22 2:13 3:26 4:21 5:27 6:30 7:21 8:22 9:35 10:22 11:20 12:25 13:28 14:22 15:35 16:22 17:16 18:21 19:29 20:29 21:34 22:30 23:17 24:25 25:6 26:14 27:23 28:28 29:25 30:31 31:40 32:22 33:33 34:37 35:16 36:33 37:24 38:41 39:30 40:24 41:34 42:17
-PSA 1:6 2:12 3:8 4:8 5:12 6:10 7:17 8:9 9:20 10:18 11:7 12:8 13:6 14:7 15:5 16:11 17:15 18:50 19:14 20:9 21:13 22:31 23:6 24:10 25:22 26:12 27:14 28:9 29:11 30:12 31:24 32:11 33:22 34:22 35:28 36:12 37:40 38:22 39:13 40:17 41:13 42:11 43:5 44:26 45:17 46:11 47:9 48:14 49:20 50:23 51:19 52:9 53:6 54:7 55:23 56:13 57:11 58:11 59:17 60:12 61:8 62:12 63:11 64:10 65:13 66:20 67:7 68:35 69:36 70:5 71:24 72:20 73:28 74:23 75:10 76:12 77:20 78:72 79:13 80:19 81:16 82:8 83:18 84:12 85:13 86:17 87:7 88:18 89:52 90:17 91:16 92:15 93:5 94:23 95:11 96:13 97:12 98:9 99:9 100:5 101:8 102:28 103:22 104:35 105:45 106:48 107:43 108:13 109:31 110:7 111:10 112:10 113:9 114:8 115:18 116:19 117:2 118:29 119:176 120:7 121:8 122:9 123:4 124:8 125:5 126:6 127:5 128:6 129:8 130:8 131:3 132:18 133:3 134:3 135:21 136:26 137:9 138:8 139:24 140:13 141:10 142:7 143:12 144:15 145:21 146:10 147:20 148:14 149:9 150:6
-PRO 1:33 2:22 3:35 4:27 5:23 6:35 7:27 8:36 9:18 10:32 11:31 12:28 13:25 14:35 15:33 16:33 17:28 18:24 19:29 20:30 21:31 22:29 23:35 24:34 25:28 26:28 27:27 28:28 29:27 30:33 31:31
-ECC 1:18 2:26 3:22 4:16 5:20 6:12 7:29 8:17 9:18 10:20 11:10 12:14
-SNG 1:17 2:17 3:11 4:16 5:16 6:13 7:13 8:14
-ISA 1:31 2:22 3:26 4:6 5:30 6:13 7:25 8:22 9:21 10:34 11:16 12:6 13:22 14:32 15:9 16:14 17:14 18:7 19:25 20:6 21:17 22:25 23:18 24:23 25:12 26:21 27:13 28:29 29:24 30:33 31:9 32:20 33:24 34:17 35:10 36:22 37:38 38:22 39:8 40:31 41:29 42:25 43:28 44:28 45:25 46:13 47:15 48:22 49:26 50:11 51:23 52:15 53:12 54:17 55:13 56:12 57:21 58:14 59:21 60:22 61:11 62:12 63:19 64:12 65:25 66:24
-JER 1:19 2:37 3:25 4:31 5:31 6:30 7:34 8:22 9:26 10:25 11:23 12:17 13:27 14:22 15:21 16:21 17:27 18:23 19:15 20:18 21:14 22:30 23:40 24:10 25:38 26:24 27:22 28:17 29:32 30:24 31:40 32:44 33:26 34:22 35:19 36:32 37:21 38:28 39:18 40:16 41:18 42:22 43:13 44:30 45:5 46:28 47:7 48:47 49:39 50:46 51:64 52:34
-LAM 1:22 2:22 3:66 4:22 5:22
-EZK 1:28 2:10 3:27 4:17 5:17 6:14 7:27 8:18 9:11 10:22 11:25 12:28 13:23 14:23 15:8 16:63 17:24 18:32 19:14 20:49 21:32 22:31 23:49 24:27 25:17 26:21 27:36 28:26 29:21 30:26 31:18 32:32 33:33 34:31 35:15 36:38 37:28 38:23 39:29 40:49 41:26 42:20 43:27 44:31 45:25 46:24 47:23 48:35
-DAN 1:21 2:49 3:30 4:37 5:31 6:28 7:28 8:27 9:27 10:21 11:45 12:13
-HOS 1:11 2:23 3:5 4:19 5:15 6:11 7:16 8:14 9:17 10:15 11:12 12:14 13:16 14:9
-JOL 1:20 2:32 3:21
-AMO 1:15 2:16 3:15 4:13 5:27 6:14 7:17 8:14 9:15
-OBA 1:21
-JON 1:17 2:10 3:10 4:11
-MIC 1:16 2:13 3:12 4:13 5:15 6:16 7:20
-NAM 1:15 2:13 3:19
-HAB 1:17 2:20 3:19
-ZEP 1:18 2:15 3:20
-HAG 1:15 2:23
-ZEC 1:21 2:13 3:10 4:14 5:11 6:15 7:14 8:23 9:17 10:12 11:17 12:14 13:9 14:21
-MAL 1:14 2:17 3:18 4:6
-MAT 1:25 2:23 3:17 4:25 5:48 6:34 7:29 8:34 9:38 10:42 11:30 12:50 13:58 14:36 15:39 16:28 17:27 18:35 19:30 20:34 21:46 22:46 23:39 24:51 25:46 26:75 27:66 28:20
-MRK 1:45 2:28 3:35 4:41 5:43 6:56 7:37 8:38 9:50 10:52 11:33 12:44 13:37 14:72 15:47 16:20
-LUK 1:80 2:52 3:38 4:44 5:39 6:49 7:50 8:56 9:62 10:42 11:54 12:59 13:35 14:35 15:32 16:31 17:37 18:43 19:48 20:47 21:38 22:71 23:56 24:53
-JHN 1:51 2:25 3:36 4:54 5:47 6:71 7:53 8:59 9:41 10:42 11:57 12:50 13:38 14:31 15:27 16:33 17:26 18:40 19:42 20:31 21:25
-ACT 1:26 2:47 3:26 4:37 5:42 6:15 7:60 8:40 9:43 10:48 11:30 12:25 13:52 14:28 15:41 16:40 17:34 18:28 19:41 20:38 21:40 22:30 23:35 24:27 25:27 26:32 27:44 28:31
-ROM 1:32 2:29 3:31 4:25 5:21 6:23 7:25 8:39 9:33 10:21 11:36 12:21 13:14 14:26 15:33 16:27
-1CO 1:31 2:16 3:23 4:21 5:13 6:20 7:40 8:13 9:27 10:33 11:34 12:31 13:13 14:40 15:58 16:24
-2CO 1:24 2:17 3:18 4:18 5:21 6:18 7:16 8:24 9:15 10:18 11:33 12:21 13:14
-GAL 1:24 2:21 3:29 4:31 5:26 6:18
-EPH 1:23 2:22 3:21 4:32 5:33 6:24
-PHP 1:30 2:30 3:21 4:23
-COL 1:29 2:23 3:25 4:18
-1TH 1:10 2:20 3:13 4:18 5:28
-2TH 1:12 2:17 3:18
-1TI 1:20 2:15 3:16 4:16 5:25 6:21
-2TI 1:18 2:26 3:17 4:22
-TIT 1:16 2:15 3:15
-PHM 1:25
-HEB 1:14 2:18 3:19 4:16 5:14 6:20 7:28 8:13 9:28 10:39 11:40 12:29 13:25
-JAS 1:27 2:26 3:18 4:17 5:20
-1PE 1:25 2:25 3:22 4:19 5:14
-2PE 1:21 2:22 3:18
-1JN 1:10 2:29 3:24 4:21 5:21
-2JN 1:13
-3JN 1:15
-JUD 1:25
-REV 1:20 2:29 3:22 4:11 5:14 6:17 7:17 8:13 9:21 10:11 11:19 12:17 13:18 14:20 15:8 16:21 17:18 18:24 19:21 20:15 21:27 22:21
-TOB 1:22 2:14 3:17 4:21 5:22 6:17 7:18 8:21 9:6 10:12 11:19 12:22 13:18 14:15
-JDT 1:16 2:28 3:10 4:15 5:24 6:21 7:32 8:36 9:14 10:23 11:23 12:20 13:20 14:19 15:13 16:25
-ESG 1:22 2:23 3:15 4:47 5:14 6:14 7:10 8:17 9:32 10:14
-WIS 1:16 2:24 3:19 4:20 5:23 6:25 7:30 8:21 9:18 10:21 11:26 12:27 13:19 14:31 15:19 16:29 17:21 18:25 19:22
-SIR 1:30 2:18 3:31 4:31 5:15 6:37 7:36 8:19 9:18 10:31 11:34 12:18 13:26 14:27 15:20 16:30 17:32 18:33 19:30 20:32 21:28 22:27 23:28 24:34 25:26 26:29 27:30 28:26 29:28 30:25 31:31 32:24 33:33 34:26 35:20 36:26 37:31 38:34 39:35 40:30 41:24 42:25 43:33 44:23 45:26 46:20 47:25 48:25 49:16 50:29 51:30
-BAR 1:22 2:35 3:37 4:37 5:9 6:73
-LJE 1:73
-S3Y 1:68
-SUS 1:64
-BEL 1:42
-1MA 1:64 2:70 3:60 4:61 5:68 6:63 7:50 8:32 9:73 10:89 11:74 12:53 13:53 14:49 15:41 16:24
-2MA 1:36 2:32 3:40 4:50 5:27 6:31 7:42 8:36 9:29 10:38 11:38 12:45 13:26 14:46 15:39
-3MA 1:29 2:33 3:30 4:21 5:51 6:41 7:23
-4MA 1:35 2:24 3:21 4:26 5:38 6:35 7:25 8:29 9:32 10:21 11:27 12:20 13:27 14:20 15:32 16:25 17:24 18:24
-1ES 1:58 2:30 3:24 4:63 5:73 6:34 7:15 8:96 9:55
-2ES 1:40 2:48 3:36 4:52 5:56 6:59 7:140 8:63 9:47 10:59 11:46 12:51 13:58 14:48 15:63 16:78
-MAN 1:15
-PS2 1:7
-ODA 1:1
-PSS 1:1
-JSA 1:18 2:24 3:17 4:24 5:15 6:27 7:26 8:35 9:27 10:43 11:23 12:24 13:33 14:15 15:63 16:10 17:18 18:28 19:51 20:9 21:45 22:34 23:16 24:33
-JDB 1:36 2:23 3:31 4:24 5:31 6:40 7:25 8:35 9:57 10:18 11:40 12:15 13:25 14:20 15:20 16:31 17:13 18:31 19:30 20:48 21:25
-TBS 1:22 2:14 3:17 4:21 5:23 6:19 7:17 8:21 9:6 10:14 11:19 12:22 13:18 14:15
-SST 1:64
-DNT 1:21 2:49 3:97 4:37 5:30 6:29 7:28 8:27 9:27 10:21 11:45 12:13
-BLT 1:42
-XXA 1:1
-XXB 1:1
-XXC 1:1
-XXD 1:1
-XXE 1:1
-XXF 1:1
-XXG 1:1
-FRT 1:1
-BAK 1:1
-OTH 1:1
-3ES 1:1
-EZA 1:1
-5EZ 1:1
-6EZ 1:1
-INT 1:1
-CNC 1:1
-GLO 1:1
-TDX 1:1
-NDX 1:1
-DAG 1:21 2:49 3:97 4:37 5:31 6:28 7:28 8:27 9:27 10:21 11:45 12:13 13:64 14:42
-PS3 1:1
-2BA 1:1
-LBA 1:1
-JUB 1:1
-ENO 1:1
-1MQ 1:1
-2MQ 1:1
-3MQ 1:1
-REP 1:1
-4BA 1:1
-LAO 1:20
-#
-# Mappings from this versification to standard versification
-GEN 31:55 = GEN 32:1
-GEN 32:1-32 = GEN 32:2-33
-EXO 8:1-4 = EXO 7:26-29
-EXO 8:5-32 = EXO 8:1-28
-EXO 22:1 = EXO 21:37
-EXO 22:2-31 = EXO 22:1-30
-LEV 6:1-7 = LEV 5:20-26
-LEV 6:8-30 = LEV 6:1-23
-NUM 16:36-50 = NUM 17:1-15
-NUM 17:1-13 = NUM 17:16-28
-NUM 29:40 = NUM 30:1
-NUM 30:1-16 = NUM 30:2-17
-DEU 12:32 = DEU 13:1
-DEU 13:1-18 = DEU 13:2-19
-DEU 22:30 = DEU 23:1
-DEU 23:1-25 = DEU 23:2-26
-DEU 29:1 = DEU 28:69
-DEU 29:2-29 = DEU 29:1-28
-1SA 20:42 = 1SA 21:1
-1SA 21:1-15 = 1SA 21:2-16
-1SA 23:29 = 1SA 24:1
-1SA 24:1-22 = 1SA 24:2-23
-2SA 18:33 = 2SA 19:1
-2SA 19:1-43 = 2SA 19:2-44
-1KI 4:21-34 = 1KI 5:1-14
-1KI 5:1-18 = 1KI 5:15-32
-1KI 22:43-53 = 1KI 22:44-54
-2KI 11:21 = 2KI 12:1
-2KI 12:1-21 = 2KI 12:2-22
-1CH 6:1-15 = 1CH 5:27-41
-1CH 6:16-81 = 1CH 6:1-66
-1CH 12:4-40 = 1CH 12:5-41
-2CH 2:1 = 2CH 1:18
-2CH 2:2-18 = 2CH 2:1-17
-2CH 14:1 = 2CH 13:23
-2CH 14:2-15 = 2CH 14:1-14
-NEH 4:1-6 = NEH 3:33-38
-NEH 4:7-23 = NEH 4:1-17
-NEH 7:69-73 = NEH 7:68-72
-NEH 9:38 = NEH 10:1
-NEH 10:1-39 = NEH 10:2-40
-JOB 41:1-8 = JOB 40:25-32
-JOB 41:9-34 = JOB 41:1-26
-PSA 3:0-8 = PSA 3:1-9
-PSA 4:0-8 = PSA 4:1-9
-PSA 5:0-12 = PSA 5:1-13
-PSA 6:0-10 = PSA 6:1-11
-PSA 7:0-17 = PSA 7:1-18
-PSA 8:0-9 = PSA 8:1-10
-PSA 9:0-20 = PSA 9:1-21
-PSA 12:0-8 = PSA 12:1-9
-PSA 13:0-5 = PSA 13:1-6
-PSA 18:0-50 = PSA 18:1-51
-PSA 19:0-14 = PSA 19:1-15
-PSA 20:0-9 = PSA 20:1-10
-PSA 21:0-13 = PSA 21:1-14
-PSA 22:0-31 = PSA 22:1-32
-PSA 30:0-12 = PSA 30:1-13
-PSA 31:0-24 = PSA 31:1-25
-PSA 34:0-22 = PSA 34:1-23
-PSA 36:0-12 = PSA 36:1-13
-PSA 38:0-22 = PSA 38:1-23
-PSA 39:0-13 = PSA 39:1-14
-PSA 40:0-17 = PSA 40:1-18
-PSA 41:0-13 = PSA 41:1-14
-PSA 42:0-11 = PSA 42:1-12
-PSA 44:0-26 = PSA 44:1-27
-PSA 45:0-17 = PSA 45:1-18
-PSA 46:0-11 = PSA 46:1-12
-PSA 47:0-9 = PSA 47:1-10
-PSA 48:0-14 = PSA 48:1-15
-PSA 49:0-20 = PSA 49:1-21
-PSA 51:0-19 = PSA 51:2-21
-PSA 52:0-9 = PSA 52:2-11
-PSA 53:0-6 = PSA 53:1-7
-PSA 54:0-7 = PSA 54:2-9
-PSA 55:0-23 = PSA 55:1-24
-PSA 56:0-13 = PSA 56:1-14
-PSA 57:0-11 = PSA 57:1-12
-PSA 58:0-11 = PSA 58:1-12
-PSA 59:0-17 = PSA 59:1-18
-PSA 60:0-12 = PSA 60:2-14
-PSA 61:0-8 = PSA 61:1-9
-PSA 62:0-12 = PSA 62:1-13
-PSA 63:0-11 = PSA 63:1-12
-PSA 64:0-10 = PSA 64:1-11
-PSA 65:0-13 = PSA 65:1-14
-PSA 67:0-7 = PSA 67:1-8
-PSA 68:0-35 = PSA 68:1-36
-PSA 69:0-36 = PSA 69:1-37
-PSA 70:0-5 = PSA 70:1-6
-PSA 75:0-10 = PSA 75:1-11
-PSA 76:0-12 = PSA 76:1-13
-PSA 77:0-20 = PSA 77:1-21
-PSA 80:0-19 = PSA 80:1-20
-PSA 81:0-16 = PSA 81:1-17
-PSA 83:0-18 = PSA 83:1-19
-PSA 84:0-12 = PSA 84:1-13
-PSA 85:0-13 = PSA 85:1-14
-PSA 88:0-18 = PSA 88:1-19
-PSA 89:0-52 = PSA 89:1-53
-PSA 92:0-15 = PSA 92:1-16
-PSA 102:0-28 = PSA 102:1-29
-PSA 108:0-13 = PSA 108:1-14
-PSA 140:0-13 = PSA 140:1-14
-PSA 142:0-7 = PSA 142:1-8
-ECC 5:1 = ECC 4:17
-ECC 5:2-20 = ECC 5:1-19
-SNG 6:13 = SNG 7:1
-SNG 7:1-13 = SNG 7:2-14
-ISA 9:1 = ISA 8:23
-ISA 9:2-21 = ISA 9:1-20
-ISA 64:2-12 = ISA 64:1-11
-JER 9:1 = JER 8:23
-JER 9:2-26 = JER 9:1-25
-EZK 20:45-49 = EZK 21:1-5
-EZK 21:1-32 = EZK 21:6-37
-DAN 4:1-3 = DAN 3:31-33
-DAN 4:4-37 = DAN 4:1-34
-DAN 5:31 = DAN 6:1
-DAN 6:1-28 = DAN 6:2-29
-HOS 1:10-11 = HOS 2:1-2
-HOS 2:1-23 = HOS 2:3-25
-HOS 11:12 = HOS 12:1
-HOS 12:1-14 = HOS 12:2-15
-HOS 13:16 = HOS 14:1
-HOS 14:1-9 = HOS 14:2-10
-JOL 2:28-32 = JOL 3:1-5
-JOL 3:1-21 = JOL 4:1-21
-JON 1:17 = JON 2:1
-JON 2:1-10 = JON 2:2-11
-MIC 5:1 = MIC 4:14
-MIC 5:2-15 = MIC 5:1-14
-NAM 1:15 = NAM 2:1
-NAM 2:1-13 = NAM 2:2-14
-ZEC 1:18-21 = ZEC 2:1-4
-ZEC 2:1-13 = ZEC 2:5-17
-MAL 4:1-6 = MAL 3:19-24
-ACT 19:40 = ACT 19:40
-ACT 19:41 = ACT 19:40
-ESG 1:1 = ESG 1:1a
-ESG 1:2 = ESG 1:1b
-ESG 1:3 = ESG 1:1c
-ESG 1:4 = ESG 1:1d
-ESG 1:5 = ESG 1:1e
-ESG 1:6 = ESG 1:1f
-ESG 1:7 = ESG 1:1g
-ESG 1:8 = ESG 1:1h
-ESG 1:9 = ESG 1:1i
-ESG 1:10 = ESG 1:1k
-ESG 1:11 = ESG 1:1l
-ESG 1:12 = ESG 1:1m
-ESG 1:13 = ESG 1:1n
-ESG 1:14 = ESG 1:1o
-ESG 1:15 = ESG 1:1p
-ESG 1:16 = ESG 1:1q
-ESG 1:17 = ESG 1:1r
-ESG 1:18-39 = ESG 1:1-22
-ESG 3:14 = ESG 3:13a
-ESG 3:15 = ESG 3:13b
-ESG 3:16 = ESG 3:13c
-ESG 3:17 = ESG 3:13d
-ESG 3:18 = ESG 3:13e
-ESG 3:19 = ESG 3:13f
-ESG 3:20-22 = ESG 3:13-15
-ESG 4:18 = ESG 4:17a
-ESG 4:19 = ESG 4:17b
-ESG 4:20 = ESG 4:17c
-ESG 4:21 = ESG 4:17c
-ESG 4:22 = ESG 4:17d
-ESG 4:23 = ESG 4:17d
-ESG 4:24 = ESG 4:17e
-ESG 4:25 = ESG 4:17f
-ESG 4:26 = ESG 4:17g
-ESG 4:27 = ESG 4:17h
-ESG 4:28 = ESG 4:17i
-ESG 4:29 = ESG 4:17k
-ESG 4:30 = ESG 4:17k
-ESG 4:31 = ESG 4:17k
-ESG 4:32 = ESG 4:17l
-ESG 4:33 = ESG 4:17m
-ESG 4:34 = ESG 4:17n
-ESG 4:35 = ESG 4:17n
-ESG 4:36 = ESG 4:17o
-ESG 4:37 = ESG 4:17o
-ESG 4:38 = ESG 4:17p
-ESG 4:39 = ESG 4:17q
-ESG 4:40 = ESG 4:17r
-ESG 4:41 = ESG 4:17s
-ESG 4:42 = ESG 4:17t
-ESG 4:43 = ESG 4:17u
-ESG 4:44 = ESG 4:17w
-ESG 4:45 = ESG 4:17x
-ESG 4:46 = ESG 4:17y
-ESG 4:47 = ESG 4:17z
-ESG 5:2 = ESG 5:1a
-ESG 5:3 = ESG 5:1a
-ESG 5:4 = ESG 5:1a
-ESG 5:5 = ESG 5:1b
-ESG 5:6 = ESG 5:1c
-ESG 5:7 = ESG 5:1d
-ESG 5:8 = ESG 5:1e
-ESG 5:9 = ESG 5:1f
-ESG 5:10-11 = ESG 5:1-2
-ESG 5:12 = ESG 5:2
-ESG 5:13 = ESG 5:2a
-ESG 5:14 = ESG 5:2a
-ESG 5:15 = ESG 5:2b
-ESG 5:16-28 = ESG 5:2-14
-ESG 8:13 = ESG 8:12a
-ESG 8:14 = ESG 8:12b
-ESG 8:15 = ESG 8:12c
-ESG 8:16 = ESG 8:12d
-ESG 8:17 = ESG 8:12e
-ESG 8:18 = ESG 8:12f
-ESG 8:19 = ESG 8:12g
-ESG 8:20 = ESG 8:12h
-ESG 8:21 = ESG 8:12i
-ESG 8:22 = ESG 8:12k
-ESG 8:23 = ESG 8:12l
-ESG 8:24 = ESG 8:12m
-ESG 8:25 = ESG 8:12n
-ESG 8:26 = ESG 8:12o
-ESG 8:27 = ESG 8:12p
-ESG 8:28 = ESG 8:12q
-ESG 8:29 = ESG 8:12r
-ESG 8:30 = ESG 8:12s
-ESG 8:31 = ESG 8:12t
-ESG 8:32 = ESG 8:12u
-ESG 8:33 = ESG 8:12x
-ESG 8:34 = ESG 8:12y
-ESG 8:35 = ESG 8:12y
-ESG 8:36-41 = ESG 8:12-17
-ESG 10:4 = ESG 10:3a
-ESG 10:5 = ESG 10:3b
-ESG 10:6 = ESG 10:3c
-ESG 10:7 = ESG 10:3d
-ESG 10:8 = ESG 10:3e
-ESG 10:9 = ESG 10:3f
-ESG 10:10 = ESG 10:3g
-ESG 10:11 = ESG 10:3h
-ESG 10:12 = ESG 10:3i
-ESG 10:13 = ESG 10:3k
-ESG 10:14 = ESG 10:3l
-BAR 6:1-73 = LJE 1:1-73
-S3Y 1:1-29 = DAG 3:24-52
-S3Y 1:30-31 = DAG 3:52-53
-S3Y 1:32 = DAG 3:55
-S3Y 1:33 = DAG 3:54
-S3Y 1:34-35 = DAG 3:56-57
-S3Y 1:36 = DAG 3:59
-S3Y 1:37 = DAG 3:58
-S3Y 1:38-68 = DAG 3:60-90
-DAG 13:1-63 = SUS 1:1-63
-DAG 14:1-42 = BEL 1:1-42
-#
-# Excluded verses
-#! -ROM 16:26
-#! -ROM 16:27
-#! -3JN 1:15
-#! -S3Y 1:49
-#! -ESG 4:6
-#! -ESG 9:5
-#! -ESG 9:30
-#
-# Verse segment information
diff --git a/samples/data/WEB-PT/631JNengWEB14.SFM b/samples/data/WEB-PT/631JNengWEB14.SFM
deleted file mode 100644
index 2b4eb194d..000000000
--- a/samples/data/WEB-PT/631JNengWEB14.SFM
+++ /dev/null
@@ -1,199 +0,0 @@
-\id 1JN 62-1JN-web.sfm World English Bible (WEB)
-\ide UTF-8
-\h 1 John
-\toc1 John’s First Letter
-\toc2 1 John
-\toc3 1 John
-\mt1 John’s First Letter
-\c 1
-\p
-\v 1 That which was from the beginning, that which we have heard, that which we have seen with our eyes, that which we saw, and our hands touched, concerning the Word of life
-\v 2 (and the life was revealed, and we have seen, and testify, and declare to you the life, the eternal life, which was with the Father, and was revealed to us);
-\v 3 that which we have seen and heard we declare to you, that you also may have fellowship with us. Yes, and our fellowship is with the Father and with his Son, Jesus Christ.\f + \fr 1:3 \ft “Christ” means “Anointed One”.\f*
-\v 4 And we write these things to you, that our joy may be fulfilled.
-\p
-\v 5 This is the message which we have heard from him and announce to you, that God is light, and in him is no darkness at all.
-\v 6 If we say that we have fellowship with him and walk in the darkness, we lie and don’t tell the truth.
-\v 7 But if we walk in the light as he is in the light, we have fellowship with one another, and the blood of Jesus Christ his Son, cleanses us from all sin.
-\v 8 If we say that we have no sin, we deceive ourselves, and the truth is not in us.
-\v 9 If we confess our sins, he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness.
-\v 10 If we say that we haven’t sinned, we make him a liar, and his word is not in us.
-\c 2
-
-\p
-\v 1 My little children, I write these things to you so that you may not sin. If anyone sins, we have a
-Counselor\f + \fr 2:1 \ft Greek παρακλητον: Counselor, Helper, Intercessor, Advocate, and
-Comforter.\f* with the Father, Jesus Christ, the righteous.
-\v 2 And he is the atoning sacrifice\f + \fr 2:2 \ft “atoning sacrifice” is from the Greek “ιλασμος”, an appeasing,
-propitiating, or the means of appeasement or propitiation—the sacrifice that turns away God’s wrath because of our sin.
-\f* for our sins, and not for ours only, but also for the whole world.
-\v 3 This is how we know that we know him: if we keep his commandments.
-\v 4 One who says, “I know him,” and doesn’t keep his commandments, is a liar, and the truth isn’t in him.
-\v 5 But God’s love has most certainly been perfected in whoever keeps his word. This is how we know that we are in him:
-\v 6 he who says he remains in him ought himself also to walk just like he walked.
-\p
-\v 7 Brothers, I write no new commandment to you, but an old commandment which you had from the beginning. The old commandment
-is the word which you heard from the beginning.
-\v 8 Again, I write a new commandment to you, which is true in him and in you, because the darkness is passing away and the
-true light already shines.
-\v 9 He who says he is in the light and hates his brother is in the darkness even until now.
-\v 10 He who loves his brother remains in the light, and there is no occasion for stumbling in him.
-\v 11 But he who hates his brother is in the darkness, and walks in the darkness, and doesn’t know where he is going, because
-the darkness has blinded his eyes.
-\p
-\v 12 I write to you, little children, because your sins are forgiven you for his name’s sake.
-\p
-\v 13 I write to you, fathers, because you know him who is from the beginning.
-\p I write to you, young men, because you have overcome the evil one.
-\p I write to you, little children, because you know the Father.
-\p
-\v 14 I have written to you, fathers, because you know him who is from the beginning.
-\p I have written to you, young men, because you are strong, and the word of God remains in you, and you have overcome the evil
-one.
-\p
-\v 15 Don’t love the world or the things that are in the world. If anyone loves the world, the Father’s love isn’t in him.
-\v 16 For all that is in the world—the lust of the flesh, the lust of the eyes, and the pride of life—isn’t the Father’s, but
-is the world’s.
-\v 17 The world is passing away with its lusts, but he who does God’s will remains forever.
-\p
-\v 18 Little children, these are the end times, and as you heard that the Antichrist is coming, even now many antichrists have
-arisen. By this we know that it is the final hour.
-\v 19 They went out from us, but they didn’t belong to us; for if they had belonged to us, they would have continued with us.
-But they left, that they might be revealed that none of them belong to us.
-\v 20 You have an anointing from the Holy One, and you all have knowledge.\f + \fr 2:20 \ft Or, “know what is true”, or, “know all things”\f*
-\v 21 I have not written to you because you don’t know the truth, but because you know it, and because no lie is of the truth.
-\v 22 Who is the liar but he who denies that Jesus is the Christ? This is the Antichrist, he who denies the Father and the Son.
-\v 23 Whoever denies the Son doesn’t have the Father. He who confesses the Son has the Father also.
-\p
-\v 24 Therefore, as for you, let that remain in you which you heard from the beginning. If that which you heard from the
-beginning remains in you, you also will remain in the Son, and in the Father.
-\v 25 This is the promise which he promised us, the eternal life.
-\p
-\v 26 These things I have written to you concerning those who would lead you astray.
-\v 27 As for you, the anointing which you received from him remains in you, and you don’t need for anyone to teach you. But as
-his anointing teaches you concerning all things, and is true, and is no lie, and even as it taught you, you will remain in him.
-\p
-\v 28 Now, little children, remain in him, that when he appears, we may have boldness and not be ashamed before him at his
-coming.
-\v 29 If you know that he is righteous, you know that everyone who practices righteousness has been born of him.
-\c 3
-
-\p
-\v 1 See how great a love the Father has given to us, that we should be called children of God! For this cause the world
-doesn’t know us, because it didn’t know him.
-\v 2 Beloved, now we are children of God. It is not yet revealed what we will be; but we know that when he is revealed, we will
-be like him, for we will see him just as he is.
-\v 3 Everyone who has this hope set on him purifies himself, even as he is pure.
-\p
-\v 4 Everyone who sins also commits lawlessness. Sin is lawlessness.
-\v 5 You know that he was revealed to take away our sins, and no sin is in him.
-\v 6 Whoever remains in him doesn’t sin. Whoever sins hasn’t seen him and doesn’t know him.
-\p
-\v 7 Little children, let no one lead you astray. He who does righteousness is righteous, even as he is righteous.
-\v 8 He who sins is of the devil, for the devil has been sinning from the beginning. To this end the Son of God was revealed:
-that he might destroy the works of the devil.
-\v 9 Whoever is born of God doesn’t commit sin, because his seed remains in him, and he can’t sin, because he is born of God.
-\v 10 In this the children of God are revealed, and the children of the devil. Whoever doesn’t do righteousness is not of God,
-neither is he who doesn’t love his brother.
-\v 11 For this is the message which you heard from the beginning, that we should love one another—
-\v 12 unlike Cain, who was of the evil one and killed his brother. Why did he kill him? Because his deeds were evil, and his
-brother’s righteous.
-\p
-\v 13 Don’t be surprised, my brothers, if the world hates you.
-\v 14 We know that we have passed out of death into life, because we love the brothers. He who doesn’t love his brother remains
-in death.
-\v 15 Whoever hates his brother is a murderer, and you know that no murderer has eternal life remaining in him.
-\p
-\v 16 By this we know love, because he laid down his life for us. And we ought to lay down our lives for the brothers.
-\v 17 But whoever has the world’s goods and sees his brother in need, then closes his heart of compassion against him, how does
-God’s love remain in him?
-\p
-\v 18 My little children, let’s not love in word only, or with the tongue only, but in deed and truth.
-\v 19 And by this we know that we are of the truth and persuade our hearts before him,
-\v 20 because if our heart condemns us, God is greater than our heart, and knows all things.
-\v 21 Beloved, if our hearts don’t condemn us, we have boldness toward God;
-\v 22 so whatever we ask, we receive from him, because we keep his commandments and do the things that are pleasing in his
-sight.
-\v 23 This is his commandment, that we should believe in the name of his Son, Jesus Christ, and love one another, even as he
-commanded.
-\v 24 He who keeps his commandments remains in him, and he in him. By this we know that he remains in us, by the Spirit which
-he gave us.
-\c 4
-
-
-
-\p
-\v 1 Beloved, don’t believe every spirit, but test the spirits, whether they are of God, because many false prophets have gone
-out into the world.
-\v 2 By this you know the Spirit of God: every spirit who confesses that Jesus Christ has come in the flesh is of God,
-\v 3 and every spirit who doesn’t confess that Jesus Christ has come in the flesh is not of God; and this is the spirit of the
-Antichrist, of whom you have heard that it comes. Now it is in the world already.
-\v 4 You are of God, little children, and have overcome them, because greater is he who is in you than he who is in the world.
-\v 5 They are of the world. Therefore they speak of the world, and the world hears them.
-\v 6 We are of God. He who knows God listens to us. He who is not of God doesn’t listen to us. By this we know the spirit of
-truth, and the spirit of error.
-\p
-\v 7 Beloved, let’s love one another, for love is of God; and everyone who loves has been born of God and knows God.
-\v 8 He who doesn’t love doesn’t know God, for God is love.
-\v 9 By this God’s love was revealed in us, that God has sent his only born\f + \fr 4:9 \ft The phrase “only born” is from the Greek word “μονογενη”, which is sometimes translated “only begotten” or “one and only”.\f* Son into the world that we might live through
-him.
-\v 10 In this is love, not that we loved God, but that he loved us, and sent his Son as the atoning
-sacrifice\f + \fr 4:10 \ft “atoning sacrifice” is from the Greek “ιλασμος”, an appeasing, propitiating, or the means of
-appeasement or propitiation—the sacrifice that turns away God’s wrath because of our sin.
-\f* for our sins.
-\v 11 Beloved, if God loved us in this way, we also ought to love one another.
-\v 12 No one has seen God at any time. If we love one another, God remains in us, and his love has been perfected in us.
-\p
-\v 13 By this we know that we remain in him and he in us, because he has given us of his Spirit.
-\v 14 We have seen and testify that the Father has sent the Son as the Savior of the world.
-\v 15 Whoever confesses that Jesus is the Son of God, God remains in him, and he in God.
-\v 16 We know and have believed the love which God has for us. God is love, and he who remains in love remains in God, and God
-remains in him.
-\v 17 In this, love has been made perfect among us, that we may have boldness in the day of judgment, because as he is, even so
-we are in this world.
-\v 18 There is no fear in love; but perfect love casts out fear, because fear has punishment. He who fears is not made perfect
-in love.
-\v 19 We love him,\f + \fr 4:19\ft NU omits “him”.\f* because he first loved us.
-\v 20 If a man says, “I love God,” and hates his brother, he is a liar; for he who doesn’t love his brother whom he has seen,
-how can he love God whom he has not seen?
-\v 21 This commandment we have from him, that he who loves God should also love his brother.
-\c 5
-
-\p
-\v 1 Whoever believes that Jesus is the Christ has been born of God. Whoever loves the Father also loves the child who is born
-of him.
-\v 2 By this we know that we love the children of God, when we love God and keep his commandments.
-\v 3 For this is loving God, that we keep his commandments. His commandments are not grievous.
-\v 4 For whatever is born of God overcomes the world. This is the victory that has overcome the world: your faith.
-\v 5 Who is he who overcomes the world, but he who believes that Jesus is the Son of God?
-\p
-\v 6 This is he who came by water and blood, Jesus Christ; not with the water only, but with the water and the blood. It is the
-Spirit who testifies, because the Spirit is the truth.
-\v 7 For there are three who testify:\f + \fr 5:7 \ft Only a few recent manuscripts add “in heaven: the Father, the Word, and
-the Holy Spirit; and these three are one. And there are three that testify on
-earth:”\f*
-\v 8 the Spirit, the water, and the blood; and the three agree as one.
-\v 9 If we receive the witness of men, the witness of God is greater; for this is God’s testimony which he has testified
-concerning his Son.
-\v 10 He who believes in the Son of God has the testimony in himself. He who doesn’t believe God has made him a liar, because
-he has not believed in the testimony that God has given concerning his Son.
-\v 11 The testimony is this: that God gave to us eternal life, and this life is in his Son.
-\v 12 He who has the Son has the life. He who doesn’t have God’s Son doesn’t have the life.
-\p
-\v 13 These things I have written to you who believe in the name of the Son of God, that you may know that you have eternal
-life, and that you may continue to believe in the name of the Son of God.
-\p
-\v 14 This is the boldness which we have toward him, that if we ask anything according to his will, he listens to us.
-\v 15 And if we know that he listens to us, whatever we ask, we know that we have the petitions which we have asked of him.
-\p
-\v 16 If anyone sees his brother sinning a sin not leading to death, he shall ask, and God will give him life for those who sin
-not leading to death. There is sin leading to death. I don’t say that he should make a request concerning this.
-\v 17 All unrighteousness is sin, and there is sin not leading to death.
-\p
-\v 18 We know that whoever is born of God doesn’t sin, but he who was born of God keeps himself, and the evil one doesn’t touch
-him.
-\v 19 We know that we are of God, and the whole world lies in the power of the evil one.
-\v 20 We know that the Son of God has come and has given us an understanding, that we know him who is true; and we are in him
-who is true, in his Son Jesus Christ. This is the true God and eternal life.
-\p
-\v 21 Little children, keep yourselves from idols.
diff --git a/samples/data/WEB-PT/642JNengWEB14.SFM b/samples/data/WEB-PT/642JNengWEB14.SFM
deleted file mode 100644
index ab7eaa1e2..000000000
--- a/samples/data/WEB-PT/642JNengWEB14.SFM
+++ /dev/null
@@ -1,25 +0,0 @@
-\id 2JN 63-2JN-web.sfm World English Bible (WEB)
-\ide UTF-8
-\h 2 John
-\toc1 John’s Second Letter
-\toc2 2 John
-\toc3 2 John
-\mt1 John’s Second Letter
-\c 1
-\p
-\v 1 The elder, to the chosen lady and her children, whom I love in truth, and not I only, but also all those who know the truth,
-\v 2 for the truth’s sake, which remains in us, and it will be with us forever:
-\v 3 Grace, mercy, and peace will be with us, from God the Father and from the Lord Jesus Christ,\f + \fr 1:3 \ft “Christ” means “Anointed One”.\f* the Son of the Father, in truth and love.
-\p
-\v 4 I rejoice greatly that I have found some of your children walking in truth, even as we have been commanded by the Father.
-\v 5 Now I beg you, dear lady, not as though I wrote to you a new commandment, but that which we had from the beginning, that we love one another.
-\v 6 This is love, that we should walk according to his commandments. This is the commandment, even as you heard from the beginning, that you should walk in it.
-\p
-\v 7 For many deceivers have gone out into the world, those who don’t confess that Jesus Christ came in the flesh. This is the deceiver and the Antichrist.
-\v 8 Watch yourselves, that we don’t lose the things which we have accomplished, but that we receive a full reward.
-\v 9 Whoever transgresses and doesn’t remain in the teaching of Christ doesn’t have God. He who remains in the teaching has both the Father and the Son.
-\v 10 If anyone comes to you and doesn’t bring this teaching, don’t receive him into your house, and don’t welcome him,
-\v 11 for he who welcomes him participates in his evil deeds.
-\p
-\v 12 Having many things to write to you, I don’t want to do so with paper and ink, but I hope to come to you and to speak face to face, that our joy may be made full.
-\v 13 The children of your chosen sister greet you. Amen.
diff --git a/samples/data/WEB-PT/653JNengWEB14.SFM b/samples/data/WEB-PT/653JNengWEB14.SFM
deleted file mode 100644
index 55d4fdcc7..000000000
--- a/samples/data/WEB-PT/653JNengWEB14.SFM
+++ /dev/null
@@ -1,29 +0,0 @@
-\id 3JN 64-3JN-web.sfm World English Bible (WEB)
-\ide UTF-8
-\h 3 John
-\toc1 John’s Third Letter
-\toc2 3 John
-\toc3 3 John
-\mt1 John’s Third Letter
-\c 1
-\p
-\v 1 The elder to Gaius the beloved, whom I love in truth.
-\p
-\v 2 Beloved, I pray that you may prosper in all things and be healthy, even as your soul prospers.
-\v 3 For I rejoiced greatly when brothers came and testified about your truth, even as you walk in truth.
-\v 4 I have no greater joy than this: to hear about my children walking in truth.
-\p
-\v 5 Beloved, you do a faithful work in whatever you accomplish for those who are brothers and strangers.
-\v 6 They have testified about your love before the assembly. You will do well to send them forward on their journey in a way worthy of God,
-\v 7 because for the sake of the Name they went out, taking nothing from the Gentiles.
-\v 8 We therefore ought to receive such, that we may be fellow workers for the truth.
-\p
-\v 9 I wrote to the assembly, but Diotrephes, who loves to be first among them, doesn’t accept what we say.
-\v 10 Therefore, if I come, I will call attention to his deeds which he does, unjustly accusing us with wicked words. Not content with this, he doesn’t receive the brothers himself, and those who would, he forbids and throws out of the assembly.
-\p
-\v 11 Beloved, don’t imitate that which is evil, but that which is good. He who does good is of God. He who does evil hasn’t seen God.
-\v 12 Demetrius has the testimony of all, and of the truth itself; yes, we also testify, and you know that our testimony is true.
-\p
-\v 13 I had many things to write to you, but I am unwilling to write to you with ink and pen;
-\v 14 but I hope to see you soon. Then we will speak face to face.
-\p Peace be to you. The friends greet you. Greet the friends by name.
diff --git a/samples/data/WEB-PT/BookNames.xml b/samples/data/WEB-PT/BookNames.xml
deleted file mode 100644
index 3681a1fb2..000000000
--- a/samples/data/WEB-PT/BookNames.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-PT/Settings.xml b/samples/data/WEB-PT/Settings.xml
deleted file mode 100644
index 2731664f1..000000000
--- a/samples/data/WEB-PT/Settings.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-
- 4
- engWEB14
- 65001
- English
- Gentium Basic
- 14
- engWEB14.SFM
- 41MAT
- usfm.sty
- 8.0.63.1
- World English Bible (American Edition)
- <p>PUBLIC DOMAIN</p>
- Major::BiblicalTerms.xml
- T
- No
- No
- /home/kahunapule/Paratext8Projects/engweb18
- 9879dbb7cfe39e4d5d6f7f9dbd0c6414691a036e
- 0
- “ ”
- ‘ ’
- “ ”
- Yes
- No
- p p/q p/q1
- T
- -
- ,
- :
- –
- ;
- ;
- Abbreviation
- ShortName
- False
- a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z - * υ – + κ ρ π τ ν ι ς σ η λ μ % α = δ ἰ ὺ " ο & / ה נֵּ הִ ם אֱ לֹ הִ֑ י [ ] — 7 9 8 ! ’ “ ; 6 , : ) ( 2 . ” 3 5 0 ? 1 ⌃ ‘ 4 ' _ ִ֑י ֵּה ִנ ֹה א ֱל ῆ ῥ
- \ ½ × χ ῦ θ ἄ β צִ έ ת צִ֛ ᾳ ἐ Μ ά ί ω ε ° έ ά נֵּ
- γ
- > <
- _— ]_ _[ '_ – _=_ %_ ‘ -_ ) _&_ _—_ / ⌃_ ” ? _+_ —_ !_ . — _& - ?_ ..._ , ... _( )_ ._ ,_ _“ ”_ ;_ ’_ _‘ :_ ’ * ___ × °_ “
- “_ _?_ _’_ .._ _(_ _] _;_ ; _-_ _:_ _“_ _" "_ _._ _,_
- (/) [/] {/}
- No
- ib iq iq1 iq2 iq3 q q1 q2 q3 q4 qc qr qs qa qac qm qm1 qm2 qm3 b
- io io1 io2 io3 io4
- Standard::
- True
- Yes
- a b c d e f g h i j k l m n o p q r s t u v w x y z aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu vv ww xx yy zz
- No
- Yes
- “/“ ‘ ’ ”
- Yes
- Yes
- NIV84
- (none)
- Compare
- Invalid pair:
- Could not find:
- en:::
- 2014-09-24T04:59:02.500278
- False
- False
- False
- MatchVerseExactly
-
-
-
- See | LXX
- 111111111111111111111111111111111111111111111111111111111111111111111111000011111111000000000000000100000000100100000000000
-
-
- dtyynkiqGHSk8qEp7
- Public
- 546a4d9f5117ad7230055b04
- English(eng), World English Bible, United States, Bible with Deuterocanon, Published, eBible.org, engWEB14, dbl: matches, tms
- False
-
- F
- F
- F
-
-
-
-
\ No newline at end of file
diff --git a/samples/data/WEB-PT/custom.sty b/samples/data/WEB-PT/custom.sty
deleted file mode 100644
index b84499be3..000000000
--- a/samples/data/WEB-PT/custom.sty
+++ /dev/null
@@ -1,353 +0,0 @@
-# Custom style file created by the upgrade to Paratext 8.0. It is based upon
-# the original style files used by your project.
-# These files have been removed, but a backup of the files has been saved to
-# usfm.sty.bak and custom.sty.bak.
-
-
-\Marker imte3
-\Name imte3 - Introduction - [Uncommon] Major Title at Introduction End Level 3
-\Description Introduction major title at introduction end, level 3
-\OccursUnder id
-\Bold
-\FontSize 14
-\Rank 7
-\SpaceAfter 2
-\Justification center
-\StyleType paragraph
-\TextType other
-\TextProperties paragraph publishable vernacular level_3
-
-\Marker v
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 s3 d sp
-
-\Marker va
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tc1 tc2 tc3 tc4 s3 d
-
-\Marker vp
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tc1 tc2 tc3 tc4 s3
-
-\Marker po
-\Name po - Paragraph - Letter Opening
-\Description Letter opening
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\SpaceAfter 4
-\SpaceBefore 4
-\FirstLineIndent 0.125
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular
-
-\Marker cls
-\Description Letter Closing
-
-\Marker pmo
-\OccursUnder m mi nb p pc ph phi pi pi1 pi2 pi3 pr po q q1 q2 q3 q4 qc qr s1 s2 s3 s4
-
-\Marker pm
-\OccursUnder m mi nb p pc ph phi pi pi1 pi2 pi3 pr po psi q q1 q2 q3 q4 qc qr b s1 s2 s3 s4
-
-\Marker pmc
-\OccursUnder m mi nb p pc ph phi pi pi1 pi2 pi3 pr po q q1 q2 q3 q4 qc qr b s1 s2 s3 s4
-
-\Marker pmr
-\OccursUnder m mi nb p pc ph phi pi pi1 pi2 pi3 pr po q q1 q2 q3 q4 qc qr b s1 s2 s3 s4
-
-\Marker qs
-\OccursUnder q q1 q2 q3 q4 qc qr qd NEST
-
-\Marker qd
-\Name qd - Poetry - Hebrew Note
-\Description A Hebrew musical performance annotation, similar in content to Hebrew descriptive title.
-\OccursUnder c
-\Italic
-\FontSize 12
-\Rank 4
-\LeftMargin 0.250
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular poetic
-
-\Marker mte1
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tc1 tc2 tc3 tc4 s3 d
-
-\Marker lh
-\Name lh - List Header
-\Description List header (introductory remark)
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\FirstLineIndent 0.125
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular
-
-\Marker li
-\Description A list item, level 1 (if single level)
-
-\Marker li1
-\Description A list item, level 1 (if multiple levels)
-
-\Marker li2
-\Description A list item, level 2
-
-\Marker li3
-\Description A list item, level 3
-
-\Marker li4
-\Description A list item, level 4
-
-\Marker lf
-\Name lf - List Footer
-\Description List footer (concluding remark)
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular
-
-\Marker lim
-\Name lim - Embedded List Item - Level 1
-\Description An embedded list item, level 1 (if single level)
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\LeftMargin 0.750
-\RightMargin 0.250
-\FirstLineIndent -0.375
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular level_1
-
-\Marker lim1
-\Name lim1 - Embedded List Item - Level 1
-\Description An embedded list item, level 1 (if multiple levels)
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\LeftMargin 0.750
-\RightMargin 0.250
-\FirstLineIndent -0.375
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular level_1
-
-\Marker lim2
-\Name lim2 - Embedded List Item - Level 2
-\Description An embedded list item, level 2
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\LeftMargin 1.000
-\FirstLineIndent -0.375
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular level_2
-
-\Marker lim3
-\Name lim3 - Embedded List Item - Level 3
-\Description An embedded list item, level 3
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\LeftMargin 1.250
-\FirstLineIndent -0.375
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular level_3
-
-\Marker lim4
-\Name lim4 - Embedded List Item - Level 4
-\Description An embedded list item, level 4
-\OccursUnder c
-\FontSize 12
-\Rank 4
-\LeftMargin 1.500
-\FirstLineIndent -0.375
-\StyleType paragraph
-\TextType versetext
-\TextProperties paragraph publishable vernacular level_4
-
-\Marker f
-\OccursUnder c cp lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 qs sp tc1 tc2 tc3 tc4 mt mt1 mt2 mt3 ms ms1 ms2 ms3 s s1 s2 s3 d ip
-
-\Marker fe
-\OccursUnder c lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 sp tc1 tc2 tc3 tc4 ms ms1 ms2 ms3 s s1 s2 s3 d ip
-
-\Marker fm
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 sp tc1 tc2 tc3 tc4 ms ms1 ms2 s s1 s2 s3 d ip
-
-\Marker x
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 qs sp tc1 tc2 tc3 tc4 mt mt1 mt2 mt3 ms ms1 ms2 s s1 s2 s3 d
-
-\Marker xop
-\Name xop - Cross Reference - Origin Reference Publishing Alternate
-\Description Published cross reference origin reference (origin reference that should appear in the published text)
-\Endmarker xop*
-\OccursUnder x
-\FontSize 12
-\StyleType character
-\TextType notetext
-\TextProperties publishable vernacular note
-
-\Marker xta
-\Name xta - Cross Reference - Target References Added Text
-\Description Cross reference target references added text
-\Endmarker xta*
-\OccursUnder x
-\FontSize 12
-\StyleType character
-\TextType notetext
-\TextProperties publishable vernacular note
-
-\Marker rq
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 NEST
-
-\Marker qt
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker nd
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker tl
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 cls tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker dc
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker bk
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker sig
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 cls tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker pn
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 cls tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker png
-\Name png...png* - Special Text - Geographic Proper Name
-\Description For a geographic proper name
-\Endmarker png*
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 cls tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-\Underline
-\FontSize 12
-\StyleType character
-\TextType versetext
-\TextProperties publishable vernacular
-
-\Marker addpn
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 cls tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker wj
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker k
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker sls
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 sp tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker ord
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker add
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 cls tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe NEST
-
-\Marker it
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe x NEST
-
-\Marker bd
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe x NEST
-
-\Marker bdit
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe x NEST
-
-\Marker em
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe x NEST
-
-\Marker sc
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 io io1 io2 io3 io4 ms ms1 ms2 s s1 s2 s3 s4 cd sp d lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 f fe x NEST
-
-\Marker fig
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 sp tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 ms ms1 ms2 s s1 s2 s3 d ip
-
-\Marker pro
-\OccursUnder ip im ipi imi ipq imq ipr iq iq1 iq2 iq3 lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 sp tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 ms ms1 ms2 s s1 s2 s3 d ip f fe NEST
-
-\Marker w
-\OccursUnder f ip im lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po d q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 s s1 s2 s3 s4 NEST
-
-\Marker wh
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po d q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 s s1 s2 s3 s4 NEST
-
-\Marker wg
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po d q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 s s1 s2 s3 s4 NEST
-
-\Marker wa
-\Name wa...wa* - Peripheral Ref - Aramaic Wordlist Entry
-\Description An Aramaic Wordlist text item
-\Endmarker wa*
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po d q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 s s1 s2 s3 s4 NEST
-\FontSize 12
-\StyleType character
-\TextType versetext
-\TextProperties paragraph publishable vernacular
-
-\Marker ndx
-\OccursUnder lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr pmo pm pmc pmr po q q1 q2 q3 q4 qc qr qd qm qm1 qm2 qm3 tr th1 th2 th3 th4 thr1 thr2 thr3 thr4 tc1 tc2 tc3 tc4 tcr1 tcr2 tcr3 tcr4 s s1 s2 s3 s4 NEST
-
-\Marker wr
-\OccursUnder ms s lh li li1 li2 li3 li4 lf lim lim1 lim2 lim3 lim4 m mi nb p pc ph phi pi pi1 pi2 pi3 pr po q q1 q2 q3 q4 qc qr qd tc1 tc2 tc3 tc4 f fe NEST
-
-\Marker ul
-\Name ul...ul* - Character - Underline
-\Description A character style, for underlined text
-\Endmarker ul*
-\OccursUnder ip ipi im imi ili ili1 ili2 iex io1 io2 io3 io4 cd li li1 li2 li3 li4 m mi nb p pc ph phi pi pr pmo pm pmc pmr q q1 q2 q3 q4 qc qr qm qm1 qm2 qm3 sp tc1 tc2 tc3 tc4 ms ms1 ms2 s s1 s2 s3 spd d ip f fe NEST
-\Underline
-\FontSize 12
-\StyleType character
-\TextProperties publishable vernacular
-
-\Marker zw
-\Name zw...zw* - Special Text - Strong's Number Start
-\Endmarker zw*
-\FontSize 7
-\StyleType character
-\TextType versetext
-\TextProperties publishable vernacular
-
-\Marker zx
-\Name zx...zx* - Special Text - Strong's Number End
-\Endmarker zx*
-\FontSize 7
-\StyleType character
-\TextType versetext
-\TextProperties publishable vernacular
-
-\Marker toc4
-\Name toc4 - File - Alternate Book Name or Abbreviation
-\Description Alternate Book Name or Abbreviation
-\OccursUnder h h1 h2 h3
-\Italic
-\Color 128
-\FontSize 12
-\Rank 1
-\StyleType paragraph
-\TextType other
-\TextProperties paragraph publishable vernacular
-
-\Marker ztoc4
-\Name ztoc4 - File - Alternate Book Name or Abbreviation
-\Description Alternate Book Name or Abbreviation
-\OccursUnder h h1 h2 h3
-\Italic
-\Color 128
-\FontSize 12
-\Rank 1
-\StyleType paragraph
-\TextType other
-\TextProperties paragraph publishable vernacular
-
diff --git a/samples/data/WEB-PT/custom.vrs b/samples/data/WEB-PT/custom.vrs
deleted file mode 100644
index 3053290dc..000000000
--- a/samples/data/WEB-PT/custom.vrs
+++ /dev/null
@@ -1,30 +0,0 @@
-# custom.vrs
-# prepared by Michael Johnson for the World English Bible project
-
-# amend total quantity of verses in chapter
-ROM 14:26
-REV 12:17
-TOB 5:22
-TOB 10:12
-SIR 23:28
-ESG 1:22
-ESG 3:15
-ESG 5:14
-ESG 8:17
-ESG 10:14
-SIR 33:33
-SIR 41:24
-BAR 1:22
-4MA 7:25
-4MA 12:20
-# deliberately missing verses
--ROM 16:26
--ROM 16:27
--3JN 1:15
--S3Y 1:49
--ESG 4:6
--ESG 9:5
--ESG 9:30
-
-
-
diff --git a/samples/data/WEB-PT/en.ldml b/samples/data/WEB-PT/en.ldml
deleted file mode 100644
index 365da17e0..000000000
--- a/samples/data/WEB-PT/en.ldml
+++ /dev/null
@@ -1 +0,0 @@
-[][!%-/\:;=?\[\]\u00B0\u00D7\u200C\u200D\u2013\u2014\u2018\u2019\u201C\u201D\u2303{...}][][][][a b c d e f g h i j k l m n o p q r s t u v w x y z {aa} {bb} {cc} {dd} {ee} {ff} {gg} {hh} {ii} {jj} {kk} {ll} {mm} {nn} {oo} {pp} {qq} {rr} {ss} {tt} {uu} {vv} {ww} {xx} {yy} {zz}][][]“”‘’left-to-rightstandard
\ No newline at end of file
diff --git a/samples/data/WEB-PT/frtbak_old.sty b/samples/data/WEB-PT/frtbak_old.sty
deleted file mode 100644
index 8d20c474a..000000000
--- a/samples/data/WEB-PT/frtbak_old.sty
+++ /dev/null
@@ -1,2278 +0,0 @@
-# Default frtbak.sty created from usfm.sty
-
-
-\Marker id
-\Name id - File - Identification
-\Description File identification information (BOOKID, FILENAME, EDITOR, MODIFICATION DATE)
-\StyleType Paragraph
-\TextType Other
-\TextProperties paragraph nonpublishable nonvernacular book
-\FontSize 12
-
-\Marker ide
-\Name ide - File - Encoding
-\Description File encoding information
-\StyleType Paragraph
-\TextType Other
-\TextProperties paragraph nonpublishable nonvernacular
-\FontSize 12
-
-# Headers
-
-\Marker h
-\Name h - File - Header
-\Description Running header text for a book (basic)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker h1
-\Name h1 - File - Header
-\Description Running header text
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker h2
-\Name h2 - File - Left Header
-\Description Running header text, left side of page
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker h3
-\Name h3 - File - Right Header
-\Description Running header text, right side of page
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker toc1
-\Name toc1 - File - Long Table of Contents Text
-\Description Long table of contents text
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Bold
-\color 16384
-
-\Marker toc2
-\Name toc2 - File - Short Table of Contents Text
-\Description Short table of contents text
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\color 16384
-
-\Marker toc3
-\Name toc3 - File - Book Abbreviation
-\Description Book Abbreviation
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Italic
-\color 128
-
-# Remarks and Comments
-
-\Marker rem
-\Name rem - File - Remark
-\Description Comments and remarks
-\TextType Other
-\TextProperties paragraph nonpublishable nonvernacular
-\StyleType Paragraph
-\FontSize 12
-\Color 16711680
-
-\Marker sts
-\Name rem - File - Status
-\Description Status of this file
-\TextType Other
-\TextProperties paragraph nonpublishable nonvernacular
-\StyleType Paragraph
-\FontSize 12
-\Color 16711680
-
-\Marker restore
-\Name restore - File - Restore Information
-\Description Project restore information
-\TextType Other
-\TextProperties paragraph nonpublishable nonvernacular
-\StyleType Paragraph
-\FontSize 12
-\Color 16711680
-
-# Introduction
-
-\Marker imt
-\Name imt - Introduction - Major Title Level 1
-\Description Introduction major title, level 1 (if single level) (basic)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Other
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker imt1
-\Name imt1 - Introduction - Major Title Level 1
-\Description Introduction major title, level 1 (if multiple levels)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Other
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker imt2
-\Name imt2 - Introduction - Major Title Level 2
-\Description Introduction major title, level 2
-\TextProperties paragraph publishable vernacular level_2
-\TextType other
-\StyleType Paragraph
-\FontSize 13
-\Italic
-\Justification Center
-\SpaceBefore 6
-\SpaceAfter 3
-
-\Marker imt3
-\Name imt3 - Introduction - Major Title Level 3
-\Description Introduction major title, level 3
-\TextProperties paragraph publishable vernacular level_3
-\TextType Other
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Justification Center
-\SpaceBefore 2
-\SpaceAfter 2
-
-\Marker imt4
-\Name imt4 - Introduction - Major Title Level 4
-\Description Introduction major title, level 4 (usually within parenthesis)
-\TextProperties paragraph publishable vernacular level_4
-\TextType Other
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Center
-\SpaceBefore 2
-\SpaceAfter 2
-
-\Marker imte
-\Name imte - Introduction - [Uncommon] Major Title at Introduction End Level 1
-\Description Introduction major title at introduction end, level 1 (if single level)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Other
-\StyleType Paragraph
-\FontSize 20
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker imte1
-\Name imte1 - Introduction - [Uncommon] Major Title at Introduction End Level 1
-\Description Introduction major title at introduction end, level 1 (if multiple levels)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Other
-\StyleType Paragraph
-\FontSize 20
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker imte2
-\Name imte2 - Introduction - [Uncommon] Major Title at Introduction End Level 2
-\Description Introduction major title at introduction end, level 2
-\TextProperties paragraph publishable vernacular level_2
-\TextType Other
-\StyleType Paragraph
-\FontSize 16
-\Italic
-\Justification Center
-\SpaceAfter 2
-
-\Marker is
-\Name is - Introduction - Section Heading Level 1
-\Description Introduction section heading, level 1 (if single level) (basic)
-\TextType Other
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker is1
-\Name is1 - Introduction - Section Heading Level 1
-\Description Introduction section heading, level 1 (if multiple levels)
-\TextType Other
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker is2
-\Name is2 - Introduction - Section Heading Level 2
-\Description Introduction section heading, level 2
-\TextType Other
-\TextProperties paragraph publishable vernacular level_2
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker iot
-\Name iot - Introduction - Outline Title
-\Description Introduction outline title (basic)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker io
-\Name io - Introduction - Outline Level 1
-\Description Introduction outline text, level 1 (if single level)
-\TextType Other
-\TextProperties paragraph publishable vernacular level_1
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .5
-
-\Marker io1
-\Name io1 - Introduction - Outline Level 1
-\Description Introduction outline text, level 1 (if multiple levels) (basic)
-\TextType Other
-\TextProperties paragraph publishable vernacular level_1
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .5
-
-\Marker io2
-\Name io2 - Introduction - Outline Level 2
-\Description Introduction outline text, level 2
-\TextType Other
-\TextProperties paragraph publishable vernacular level_2
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .75
-
-\Marker io3
-\Name io3 - Introduction - Outline Level 3
-\Description Introduction outline text, level 3
-\TextType Other
-\TextProperties paragraph publishable vernacular level_3
-\StyleType paragraph
-\FontSize 12
-\LeftMargin 1
-
-\Marker io4
-\Name io4 - Introduction - Outline Level 4
-\Description Introduction outline text, level 4
-\TextType Other
-\TextProperties paragraph publishable vernacular level_4
-\StyleType paragraph
-\FontSize 12
-\LeftMargin 1.25
-
-\Marker ior
-\Endmarker ior*
-\Name ior...ior* - Introduction - Outline References Range
-\Description Introduction references range for outline entry; for marking references separately
-\TextType Other
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker ip
-\Name ip - Introduction - Paragraph
-\Description Introduction prose paragraph (basic)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-
-\Marker im
-\Name im - Introduction - Paragraph - no first line indent
-\Description Introduction prose paragraph, with no first line indent (may occur after poetry)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker ipi
-\Name ipi - Introduction - Indented Para - first line indent
-\Description Introduction prose paragraph, indented, with first line indent
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .25
-\RightMargin .25
-
-\Marker imi
-\Name imi - Introduction - Indented Para - no first line indent
-\Description Introduction prose paragraph text, indented, with no first line indent
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-
-\Marker ili
-\Name ili - Introduction - List Entry - Level 1
-\Description A list entry, level 1 (if single level)
-\TextType Other
-\TextProperties paragraph publishable vernacular level_1
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .5
-\FirstLineIndent -.375 # 1/8 inch indent, 1/2 inch wrap
-
-\Marker ili1
-\Name ili1 - Introduction - List Entry - Level 1
-\Description A list entry, level 1 (if multiple levels)
-\TextType Other
-\TextProperties paragraph publishable vernacular level_1
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .5
-\FirstLineIndent -.375 # 1/8 inch indent, 1/2 inch wrap
-
-\Marker ili2
-\Name ili2 - Introduction - List Entry - Level 2
-\Description A list entry, level 2
-\TextType Other
-\TextProperties paragraph publishable vernacular level_2
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .75
-\FirstLineIndent -.375
-
-\Marker ipq
-\Name ipq - Introduction - Paragraph - quote from text
-\Description Introduction prose paragraph, quote from the body text
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-\FirstLineIndent .125 # 1/8 inch first line indent
-\Italic
-
-\Marker imq
-\Name imq - Introduction - Paragraph - quote from text - no first line indent
-\Description Introduction prose paragraph, quote from the body text, with no first line indent
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-\Italic
-
-\Marker ipr
-\Name ipr - Introduction - Paragraph - right aligned
-\Description Introduction prose paragraph, right aligned
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-\Justification Right
-\Italic
-
-\Marker ib
-\Name ib - Introduction - Blank Line
-\Description Introduction blank line
-\TextProperties paragraph publishable vernacular poetic
-\TextType Other
-\FontSize 10
-\StyleType paragraph
-
-\Marker iq
-\Name iq - Introduction - Poetry Level 1
-\Description Introduction poetry text, level 1 (if single level)
-\TextType Other
-\TextProperties paragraph publishable vernacular poetic level_1
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.75 # 1/4 inch indent, 1 inch wrap
-\Italic
-
-\Marker iq1
-\Name iq1 - Introduction - Poetry Level 1
-\Description Introduction poetry text, level 1 (if multiple levels)
-\TextType Other
-\TextProperties paragraph publishable vernacular poetic level_1
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.75 # 1/4 inch indent, 1 inch wrap
-\Italic
-
-\Marker iq2
-\Name iq2 - Introduction - Poetry Level 2
-\Description Introduction poetry text, level 2
-\TextType Other
-\TextProperties paragraph publishable vernacular poetic level_2
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.5 # 1/2 inch indent, 1 inch wrap
-\Italic
-
-\Marker iq3
-\Name iq3 - Introduction - Poetry Level 3
-\Description Introduction poetry text, level 3
-\TextType Other
-\TextProperties paragraph publishable vernacular poetic level_3
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.25 # 3/4 inch indent, 1 inch wrap
-\Italic
-
-\Marker iex
-\Name iex - Introduction - Explanatory or Bridge Text
-\Description Introduction explanatory or bridge text (e.g. explanation of missing book in Short Old Testament)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\SpaceBefore 4
-\SpaceAfter 4
-
-\Marker iqt
-\Endmarker iqt*
-\Name iqt...iqt* - Special Text - Quoted Scripture Text in Introduction
-\Description For quoted scripture text appearing in the introduction
-\TextType Other
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker ie
-\Name ie - Introduction - End Marker
-\Description Introduction ending marker
-\TextProperties paragraph publishable vernacular
-\TextType Other
-\FontSize 10
-\StyleType paragraph
-
-# Chapters and Verses
-
-\Marker c
-\Name c - Chapter Number
-\Description Chapter number (necessary for normal Paratext operation)
-\TextType ChapterNumber
-\TextProperties chapter
-\StyleType Paragraph
-\Bold
-\FontSize 18
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker ca
-\Endmarker ca*
-\Name ca...ca* - Chapter Number - Alternate
-\Description Second (alternate) chapter number (for coding dual versification; useful for places where different traditions of chapter breaks need to be supported in the same translation)
-\TextType Other
-\StyleType Character
-\Italic
-\FontSize 16
-\Color 2263842
-
-\Marker cp
-\Name cp - Chapter Number - Publishing Alternate
-\Description Published chapter number (this is a chapter marking that would be used in the published text)
-\TextType Other
-\TextProperties paragraph
-\StyleType Paragraph
-\Bold
-\FontSize 18
-\SpaceBefore 8
-\SpaceAfter 4
-\Color 16711680
-
-\Marker cl
-\Name cl - Chapter - Publishing Label
-\Description Chapter label used for translations that add a word such as "Chapter" before chapter numbers (e.g. Psalms). The subsequent text is the chapter label.
-\TextType Other
-\TextProperties paragraph
-\StyleType Paragraph
-\Bold
-\FontSize 18
-\SpaceBefore 8
-\SpaceAfter 4
-\Justification Center
-
-\Marker cd
-\Name cd - Chapter - Description
-\Description Chapter Description (Publishing option D, e.g. in Russian Bibles)
-\TextType Other
-\TextProperties paragraph
-\StyleType Paragraph
-\FontSize 11
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker v
-\Name v - Verse Number
-\Description A verse number (Necessary for normal paratext operation) (basic)
-\TextType VerseNumber
-\TextProperties verse
-\StyleType Character
-\FontSize 12
-\Superscript
-
-\Marker va
-\Endmarker va*
-\Name va...va* - Verse Number - Alternate
-\Description Second (alternate) verse number (for coding dual numeration in Psalms; see also NRSV Exo 22.1-4)
-\TextType Other
-\StyleType Character
-\FontSize 12
-\Superscript
-\Color 2263842
-
-\Marker vp
-\Endmarker vp*
-\Name vp...vp* - Verse Number - Publishing Alternate
-\Description Published verse marker - this is a verse marking that would be used in the published text
-\TextType Other
-\StyleType Character
-\FontSize 12
-\Superscript
-\Color 16711680
-
-# Paragraphs
-
-\Marker p
-\Name p - Paragraph - Normal - First Line Indent
-\Description Paragraph text, with first line indent (basic)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-
-\Marker m
-\Name m - Paragraph - Margin - No First Line Indent
-\Description Paragraph text, with no first line indent (may occur after poetry) (basic)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker pmo
-\Name pmo - Paragraph - Embedded Text Opening
-\Description Embedded text opening
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-
-\Marker pm
-\Name pm - Paragraph - Embedded Text
-\Description Embedded text paragraph
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .25
-\RightMargin .25
-
-\Marker pmc
-\Name pmc - Paragraph - Embedded Text Closing
-\Description Embedded text closing
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-
-\Marker pmr
-\Name pmr - Paragraph - Embedded Text Refrain
-\Description Embedded text refrain (e.g. Then all the people shall say, "Amen!")
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\Justification Right
-\LeftMargin .25
-\RightMargin .25
-
-\Marker pi
-\Name pi - Paragraph - Indented - Level 1 - First Line Indent
-\Description Paragraph text, level 1 indent (if sinlge level), with first line indent; often used for discourse (basic)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .25
-\RightMargin .25
-
-\Marker pi1
-\Name pi1 - Paragraph - Indented - Level 1 - First Line Indent
-\Description Paragraph text, level 1 indent (if multiple levels), with first line indent; often used for discourse
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .25
-\RightMargin .25
-
-\Marker pi2
-\Name pi2 - Paragraph - Indented - Level 2 - First Line Indent
-\Description Paragraph text, level 2 indent, with first line indent; often used for discourse
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_2
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .5
-\RightMargin .25
-
-\Marker pi3
-\Name pi3 - Paragraph - Indented - Level 3 - First Line Indent
-\Description Paragraph text, level 3 indent, with first line indent; often used for discourse
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_3
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .75
-\RightMargin .25
-
-\Marker pc
-\Name pc - Paragraph - Centered (for Inscription)
-\Description Paragraph text, centered (for Inscription)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\Justification Center
-\FontSize 12
-
-\Marker mi
-\Name mi - Paragraph - Indented - No First Line Indent
-\Description Paragraph text, indented, with no first line indent; often used for discourse
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .25
-\RightMargin .25
-
-\Marker nb
-\Name nb - Paragraph - No Break with Previous Paragraph
-\Description Paragraph text, with no break from previous paragraph text (at chapter boundary) (basic)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker cls
-\Name cls - Paragraph - Closure of an Epistle
-\Description Closure of an Epistle
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\Justification Right
-
-# Poetry
-
-\Marker q
-\Name q - Poetry - Indent Level 1 - Single Level Only
-\Description Poetry text, level 1 indent (if single level)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_1
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1.25
-\FirstLineIndent -1 # 1/4 inch indent, 1 inch wrap
-
-\Marker q1
-\Name q1 - Poetry - Indent Level 1
-\Description Poetry text, level 1 indent (if multiple levels) (basic)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_1
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1.25
-\FirstLineIndent -1 # 1/4 inch indent, 1 inch wrap
-
-\Marker q2
-\Name q2 - Poetry - Indent Level 2
-\Description Poetry text, level 2 indent (basic)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_2
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1.25
-\FirstLineIndent -.75 # 1/2 inch indent, 1 inch wrap
-
-\Marker q3
-\Name q3 - Poetry - Indent Level 3
-\Description Poetry text, level 3 indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_3
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1.25
-\FirstLineIndent -.5 # 3/4 inch indent, 1 inch wrap
-
-\Marker q4
-\Name q4 - Poetry - Indent Level 4
-\Description Poetry text, level 4 indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_3
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1.25
-\FirstLineIndent -.25 # 3/4 inch indent, 1 inch wrap
-
-\Marker qc
-\Name qc - Poetry - Centered
-\Description Poetry text, centered
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic
-\StyleType Paragraph
-\FontSize 12
-\Justification Center
-
-\Marker qr
-\Name qr - Poetry - Right Aligned
-\Description Poetry text, Right Aligned
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic
-\StyleType Paragraph
-\FontSize 12
-\Justification Right
-
-\Marker qs
-\Endmarker qs*
-\Name qs...qs* - Poetry Text - Selah
-\Description Poetry text, Selah
-\TextType VerseText
-\TextProperties publishable vernacular poetic
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker qa
-\Name qa - Poetry - Acrostic Heading/Marker
-\Description Poetry text, Acrostic marker/heading
-\TextType Other
-\TextProperties paragraph publishable vernacular poetic
-\StyleType Paragraph
-\FontSize 12
-\Italic
-
-\Marker qac
-\Endmarker qac*
-\Name qac...qac* - Poetry Text - Acrostic Letter
-\Description Poetry text, Acrostic markup of the first character of a line of acrostic poetry
-\TextType Other
-\TextProperties publishable vernacular poetic
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker qm
-\Name qm - Poetry - Embedded Text - Indent Level 1 - Single Level Only
-\Description Poetry text, embedded, level 1 indent (if single level)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.75 # 1/4 inch indent, 1 inch wrap
-
-\Marker qm1
-\Name qm1 - Poetry - Embedded Text - Indent Level 1
-\Description Poetry text, embedded, level 1 indent (if multiple levels)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_1
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.75 # 1/4 inch indent, 1 inch wrap
-
-\Marker qm2
-\Name qm2 - Poetry - Embedded Text - Indent Level 2
-\Description Poetry text, embedded, level 2 indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_2
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.5 # 1/2 inch indent, 1 inch wrap
-
-\Marker qm3
-\Name qm3 - Poetry - Embedded Text - Indent Level 3
-\Description Poetry text, embedded, level 3 indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular poetic level_3
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.25 # 3/4 inch indent, 1 inch wrap
-
-\Marker b
-\Name b - Poetry - Stanza Break (Blank Line)
-\Description Poetry text stanza break (e.g. stanza break) (basic)
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-# Titles & Headings
-
-\Marker mt
-\Name mt - Title - Major Title Level 1
-\Description The main title of the book (if single level)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Title
-\StyleType Paragraph
-\FontSize 20
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker mt1
-\Name mt1 - Title - Major Title Level 1
-\Description The main title of the book (if multiple levels) (basic)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Title
-\StyleType Paragraph
-\FontSize 20
-\Bold
-\Justification Center
-\SpaceBefore 2
-\SpaceAfter 4
-
-\Marker mt2
-\Name mt2 - Title - Major Title Level 2
-\Description A secondary title usually occurring before the main title (basic)
-\TextProperties paragraph publishable vernacular level_2
-\TextType Title
-\StyleType Paragraph
-\FontSize 16
-\Italic
-\Justification Center
-\SpaceAfter 2
-
-\Marker mt3
-\Name mt3 - Title - Major Title Level 3
-\Description A secondary title occurring after the main title
-\TextProperties paragraph publishable vernacular level_3
-\TextType Title
-\StyleType Paragraph
-\FontSize 16
-\Bold
-\Justification Center
-\SpaceBefore 2
-\SpaceAfter 2
-
-\Marker mt4
-\Name mt4 - Title - Major Title level 4
-\Description A small secondary title sometimes occuring within parentheses
-\TextProperties paragraph publishable vernacular level_4
-\TextType Title
-\StyleType Paragraph
-\FontSize 12
-\Justification Center
-\SpaceBefore 2
-\SpaceAfter 2
-
-\Marker mte
-\Name mte - Title - [Uncommon] Major Title Ending Level 1
-\Description The main title of the book repeated at the end of the book, level 1 (if single level)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Title
-\StyleType Paragraph
-\FontSize 20
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker mte1
-\Name mte1 - Title - [Uncommon] Major Title Ending Level 1
-\Description The main title of the book repeated at the end of the book, level 1 (if multiple levels)
-\TextProperties paragraph publishable vernacular level_1
-\TextType Title
-\StyleType Paragraph
-\FontSize 20
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker mte2
-\Name mte2 - Title - [Uncommon] Major Title Ending Level 2
-\Description A secondary title occurring before or after the 'ending' main title
-\TextProperties paragraph publishable vernacular level_2
-\TextType Title
-\StyleType Paragraph
-\FontSize 16
-\Italic
-\Justification Center
-\SpaceAfter 2
-
-\Marker ms
-\Name ms - Heading - Major Section Level 1
-\Description A major section division heading, level 1 (if single level) (basic)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 16
-\SpaceAfter 4
-
-\Marker ms1
-\Name ms1 - Heading - Major Section Level 1
-\Description A major section division heading, level 1 (if multiple levels)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 16
-\SpaceAfter 4
-
-\Marker ms2
-\Name ms2 - Heading - Major Section Level 2
-\Description A major section division heading, level 2
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\Justification Center
-\SpaceBefore 16
-\SpaceAfter 4
-
-\Marker ms3
-\Name ms3 - Heading - Major Section Level 3
-\Description A major section division heading, level 3
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 14
-\Italic
-\Justification Center
-\SpaceBefore 16
-\SpaceAfter 4
-
-\Marker mr
-\Name mr - Heading - Major Section Range References
-\Description A major section division references range heading (basic)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Center
-\SpaceAfter 4
-
-\Marker s
-\Name s - Heading - Section Level 1
-\Description A section heading, level 1 (if single level) (basic)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker s1
-\Name s1 - Heading - Section Level 1
-\Description A section heading, level 1 (if multiple levels)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker s2
-\Name s2 - Heading - Section Level 2
-\Description A section heading, level 2 (e.g. Proverbs 22-24)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_2
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Center
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker s3
-\Name s3 - Heading - Section Level 3
-\Description A section heading, level 3 (e.g. Genesis "The First Day")
-\TextType Section
-\TextProperties paragraph publishable vernacular level_3
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Left
-\SpaceBefore 6
-\SpaceAfter 3
-
-\Marker s4
-\Name s4 - Heading - Section Level 4
-\Description A section heading, level 4
-\TextType Section
-\TextProperties paragraph publishable vernacular level_4
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Left
-\SpaceBefore 6
-\SpaceAfter 3
-
-\Marker sr
-\Name sr - Heading - Section Range References
-\Description A section division references range heading
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Bold
-\Justification Center
-\SpaceAfter 4
-
-\Marker r
-\Name r - Heading - Parallel References
-\Description Parallel reference(s) (basic)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Center
-\SpaceAfter 4
-
-\Marker sp
-\Name sp - Heading - Speaker
-\Description A heading, to identify the speaker (e.g. Job)
-\TextType Section
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Left
-\SpaceBefore 8
-\SpaceAfter 4
-
-\Marker d
-\Name d - Heading - Descriptive Title - Hebrew Subtitle
-\Description A Hebrew text heading, to provide description (e.g. Psalms)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_1
-\StyleType Paragraph
-\FontSize 12
-\Italic
-\Justification Center
-\SpaceBefore 4
-\SpaceAfter 4
-
-# Tables
-
-\Marker tr
-\Name tr - Table - Row
-\Description A new table row
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .5
-\FirstLineIndent -.25 # 6/16 inch
-
-\Marker th1
-\Name th1 - Table - Column 1 Heading
-\Description A table heading, column 1
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker th2
-\Name th2 - Table - Column 2 Heading
-\Description A table heading, column 2
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker th3
-\Name th3 - Table - Column 3 Heading
-\Description A table heading, column 3
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker th4
-\Name th4 - Table - Column 4 Heading
-\Description A table heading, column 4
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker th5
-\Name th5 - Table - Column 5 Heading
-\Description A table heading, column 5
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker tc1
-\Name tc1 - Table - Column 1 Cell
-\Description A table cell item, column 1
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker tc2
-\Name tc2 - Table - Column 2 Cell
-\Description A table cell item, column 2
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker tc3
-\Name tc3 - Table - Column 3 Cell
-\Description A table cell item, column 3
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker tc4
-\Name tc4 - Table - Column 4 Cell
-\Description A table cell item, column 4
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker tc5
-\Name tc5 - Table - Column 5 Cell
-\Description A table cell item, column 5
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-# Center Aligned Table Heads and Columns
-
-\Marker thc1
-\Name thc1 - Table - Column 1 Heading - Center Aligned
-\Description A table heading, column 1, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Center
-
-\Marker thc2
-\Name thc2 - Table - Column 2 Heading - Center Aligned
-\Description A table heading, column 2, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Center
-
-\Marker thc3
-\Name thc3 - Table - Column 3 Heading - Center Aligned
-\Description A table heading, column 3, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Center
-
-\Marker thc4
-\Name thc4 - Table - Column 4 Heading - Center Aligned
-\Description A table heading, column 4, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Center
-
-\Marker thc5
-\Name thc5 - Table - Column 5 Heading - Center Aligned
-\Description A table heading, column 5, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Center
-
-\Marker tcc1
-\Name tcc1 - Table - Column 1 Cell - Center Aligned
-\Description A table cell item, column 1, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Center
-
-\Marker tcc2
-\Name tcc2 - Table - Column 2 Cell - Center Aligned
-\Description A table cell item, column 2, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Center
-
-\Marker tcc3
-\Name tcc3 - Table - Column 3 Cell - Center Aligned
-\Description A table cell item, column 3, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Center
-
-\Marker tcc4
-\Name tcc4 - Table - Column 4 Cell - Center Aligned
-\Description A table cell item, column 4, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Center
-
-\Marker tcc5
-\Name tcc5 - Table - Column 5 Cell - Center Aligned
-\Description A table cell item, column 5, center aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Center
-
-# Right Aligned Table Heads and Columns
-
-\Marker thr1
-\Name thr1 - Table - Column 1 Heading - Right Aligned
-\Description A table heading, column 1, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Right
-
-\Marker thr2
-\Name thr2 - Table - Column 2 Heading - Right Aligned
-\Description A table heading, column 2, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Right
-
-\Marker thr3
-\Name thr3 - Table - Column 3 Heading - Right Aligned
-\Description A table heading, column 3, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Right
-
-\Marker thr4
-\Name thr4 - Table - Column 4 Heading - Right Aligned
-\Description A table heading, column 4, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Right
-
-\Marker thr5
-\Name thr5 - Table - Column 5 Heading - Right Aligned
-\Description A table heading, column 5, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Justification Right
-
-\Marker tcr1
-\Name tcr1 - Table - Column 1 Cell - Right Aligned
-\Description A table cell item, column 1, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Right
-
-\Marker tcr2
-\Name tcr2 - Table - Column 2 Cell - Right Aligned
-\Description A table cell item, column 2, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Right
-
-\Marker tcr3
-\Name tcr3 - Table - Column 3 Cell - Right Aligned
-\Description A table cell item, column 3, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Right
-
-\Marker tcr4
-\Name tcr4 - Table - Column 4 Cell - Right Aligned
-\Description A table cell item, column 4, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Right
-
-\Marker tcr5
-\Name tcr5 - Table - Column 5 Cell - Right Aligned
-\Description A table cell item, column 5, right aligned
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Justification Right
-
-# Lists
-
-\Marker li
-\Name li - List Entry - Level 1
-\Description A list entry, level 1 (if single level)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_1
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .5
-\FirstLineIndent -.375 # 1/8 inch indent, 1/2 inch wrap
-
-\Marker li1
-\Name li1 - List Entry - Level 1
-\Description A list entry, level 1 (if multiple levels)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_1
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .5
-\FirstLineIndent -.375 # 1/8 inch indent, 1/2 inch wrap
-
-\Marker li2
-\Name li2 - List Entry - Level 2
-\Description A list entry, level 2
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_2
-\StyleType paragraph
-\FontSize 12
-\LeftMargin .75
-\FirstLineIndent -.375
-
-\Marker li3
-\Name li3 - List Entry - Level 3
-\Description A list entry, level 3
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_3
-\StyleType paragraph
-\FontSize 12
-\LeftMargin 1
-\FirstLineIndent -.375
-
-\Marker li4
-\Name li4 - List Entry - Level 4
-\Description A list entry, level 4
-\TextType VerseText
-\TextProperties paragraph publishable vernacular level_4
-\StyleType paragraph
-\FontSize 12
-\LeftMargin 1.25
-\FirstLineIndent -.375
-
-# Footnotes
-
-\Marker f
-\Endmarker f*
-\Name f...f* - Footnote
-\Description A Footnote text item (basic)
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Note
-\FontSize 12
-
-\Marker fe
-\Endmarker fe*
-\Name fe...fe* - Endnote
-\Description An Endnote text item
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Note
-\FontSize 12
-
-\Marker fr
-\Endmarker fr*
-\Name fr - Footnote - Reference
-\Description The origin reference for the footnote (basic)
-\TextType NoteText
-\TextProperties publishable vernacular note
-\StyleType Character
-\FontSize 12
-\Bold
-
-\Marker ft
-\Endmarker ft*
-\Name ft - Footnote - Text
-\Description Footnote text, Protocanon (basic)
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker fk
-\Endmarker fk*
-\Name fk - Footnote - Keyword
-\Description A footnote keyword (basic)
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Bold
-\Italic
-
-\Marker fq
-\Endmarker fq*
-\Name fq - Footnote - Quotation or Alternate Rendering
-\Description A footnote scripture quote or alternate rendering (basic)
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker fqa
-\Endmarker fqa*
-\Name fqa - Footnote - Alternate Translation Rendering
-\Description A footnote alternate rendering for a portion of scripture text
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker fl
-\Endmarker fl*
-\Name fl - Footnote - Label Text
-\Description A footnote label text item, for marking or "labelling" the type or alternate translation being provided in the note.
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-\Bold
-
-\Marker fp
-\Endmarker fp*
-\Name fp - Footnote Paragraph Mark
-\Description A Footnote additional paragraph marker
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker fv
-\Endmarker fv*
-\Name fv...fv* - Footnote - Embedded Verse Number
-\Description A verse number within the footnote text
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Superscript
-
-\Marker fdc
-\Endmarker fdc*
-\Name fdc...fdc* - Footnote - DC text
-\Description Footnote text, applies to Deuterocanon only
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker fm
-\Endmarker fm*
-\Name fm - Footnote - Additional Caller to Previous Note
-\Description An additional footnote marker location for a previous footnote
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-\Superscript
-
-# Cross References
-
-\Marker x
-\Endmarker x*
-\Name x...x* - Cross Reference
-\Description A list of cross references (basic)
-\TextProperties publishable vernacular note crossreference
-\TextType NoteText
-\StyleType Note
-\FontSize 12
-
-\Marker xo
-\Endmarker xo*
-\Name xo - Cross Reference - Origin Reference
-\Description The cross reference origin reference (basic)
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Bold
-
-\Marker xt
-\Endmarker xt*
-\Name xt - Cross Reference - Target References
-\Description The cross reference target reference(s), protocanon only (basic)
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker xk
-\Endmarker xk*
-\Name xk - Cross Reference - Keyword
-\Description A cross reference keyword
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker xq
-\Endmarker xq*
-\Name xq - Cross Reference - Quotation
-\Description A cross-reference quotation from the scripture text
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker xot
-\Endmarker xot*
-\Name xot...xot* - Cross Reference - OT Target Refs (optional)
-\Description Cross-reference target reference(s), Old Testament only
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker xnt
-\Endmarker xnt*
-\Name xnt...xnt* - Cross Reference - NT Target Refs (optional)
-\Description Cross-reference target reference(s), New Testament only
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker xdc
-\Endmarker xdc*
-\Name xdc...xdc* - Cross Reference - DC Target Refs
-\Description Cross-reference target reference(s), Deuterocanon only
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-
-\Marker rq
-\Endmarker rq*
-\Name rq...rq* - Cross Reference - Inline Quotation References
-\Description A cross-reference indicating the source text for the preceding quotation.
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 10
-\Italic
-
-# Other Special Text
-
-\Marker qt
-\Endmarker qt*
-\Name qt...qt* - Special Text - Quoted Text - OT in NT
-\Description For Old Testament quoted text appearing in the New Testament (basic)
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker nd
-\Endmarker nd*
-\Name nd...nd* - Special Text - Name of Deity
-\Description For name of deity (basic)
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Underline
-
-\Marker tl
-\Endmarker tl*
-\Name tl...tl* - Special Text - Transliterated Word
-\Description For transliterated words
-\TextType VerseText
-\TextProperties publishable nonvernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker dc
-\Endmarker dc*
-\Name dc...dc* - Special Text - Deuterocanonical/LXX Additions
-\Description Deuterocanonical/LXX additions or insertions in the Protocanonical text
-\TextProperties publishable vernacular
-\StyleType Character
-\Italic
-
-\Marker bk
-\Endmarker bk*
-\Name bk...bk* - Special Text - Quoted book title
-\Description For the quoted name of a book
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker sig
-\Endmarker sig*
-\Name sig...sig* - Special Text - Author's Signature (Epistles)
-\Description For the signature of the author of an Epistle
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker pn
-\Endmarker pn*
-\Name pn...pn* - Special Text - Proper Name
-\Description For a proper name
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Bold
-\Underline
-
-\Marker addpn
-\Endmarker addpn*
-\Name addpn...addpn* - Special Text for Chinese
-\Description For chinese words to be dot underline & underline
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-#\Color 2263842
-\Bold
-\Italic
-\Underline
-
-\Marker wj
-\Endmarker wj*
-\Name wj...wj* - Special Text - Words of Jesus
-\Description For marking the words of Jesus
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Color 255
-
-\Marker k
-\Endmarker k*
-\Name k...k* - Special Text - Keyword
-\Description For a keyword
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-\Bold
-
-\Marker sls
-\Endmarker sls*
-\Name sls...sls* - Special Text - Secondary Language or Text Source
-\Description To represent where the original text is in a secondary language or from an alternate text source
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker ord
-\Endmarker ord*
-\Name ord...ord* - Special Text - Ordinal number text portion
-\Description For the text portion of an ordinal number
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Superscript
-
-\Marker add
-\Endmarker add*
-\Name add...add* - Special Text - Translational Addition
-\Description For a translational addition to the text
-\TextType VerseText
-\TextProperties publishable vernacular
-\StyleType Character
-#\Color 2263842
-\Bold
-\Italic
-
-\Marker lit
-\Name lit - Special Text - Liturgical note
-\Description For a comment or note inserted for liturgical use
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\Justification Right
-\FontSize 12
-\Bold
-
-# Character Styling
-
-\Marker no
-\Endmarker no*
-\Name no...no* - Character - Normal Text
-\Description A character style, use normal text
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker it
-\Endmarker it*
-\Name it...it* - Character - Italic Text
-\Description A character style, use italic text
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker bd
-\Endmarker bd*
-\Name bd...bd* - Character - Bold Text
-\Description A character style, use bold text
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Bold
-
-\Marker bdit
-\Endmarker bdit*
-\Name bdit...bdit* - Character - BoldItalic Text
-\Description A character style, use bold + italic text
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Bold
-\Italic
-
-\Marker em
-\Endmarker em*
-\Name em...em* - Character - Emphasized Text
-\Description A character style, use emphasized text style
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker sc
-\Endmarker sc*
-\Name sc...sc* - Character - Small Caps
-\Description A character style, for small capitalization text
-\TextProperties publishable vernacular
-\StyleType Character
-\FontSize 12
-\Smallcaps
-
-# Breaks
-
-\Marker pb
-\Name pb - Break - Page Break
-\Description Page Break used for new reader portions and children's bibles where content is controlled by the page
-\TextType Other
-\TextProperties publishable
-\StyleType Paragraph
-\FontSize 12
-
-# Special Features
-
-\Marker fig
-\Endmarker fig*
-\Name fig...fig* - Auxiliary - Figure/Illustration/Map
-\Description Illustration [Columns to span, height, filename, caption text]
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker pro
-\Endmarker pro*
-\Name pro...pro* - Special Text - CJK Pronunciation
-\Description For indicating pronunciation in CJK texts
-\TextType Other
-\TextProperties Nonpublishable
-\StyleType Character
-\FontSize 10
-#\Color 128
-
-# Peripheral References
-
-\Marker w
-\Endmarker w*
-\Name w...w* - Peripheral Ref - Wordlist Entry
-\Description A wordlist text item
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker wh
-\Endmarker wh*
-\Name wh...wh* - Peripheral Ref - Hebrew Wordlist Entry
-\Description A Hebrew wordlist text item
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker wg
-\Endmarker wg*
-\Name wg...wg* - Peripheral Ref - Greek Wordlist Entry
-\Description A Greek Wordlist text item
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker ndx
-\Endmarker ndx*
-\Name ndx...ndx* - Peripheral Ref - Subject Index Entry
-\Description A subject index text item
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-# Peripheral Materials
-# Content Division Marker
-
-\Marker periph
-\Name periph - Peripherals - Content Division Marker
-\Description Periheral content division marker which should be followed by an additional division argument/title.
-\TextType Section
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 14
-\Bold
-\SpaceBefore 16
-\SpaceAfter 4
-\Color 33023
-
-# Additional peripheral material extensions to existing USFM markup.
-
-\Marker p1
-\Name p1 - Periph - Front/Back Matter Paragraph Level 1
-\Description Front or back matter text paragraph, level 1 (if multiple levels)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-
-\Marker p2
-\Name p2 - Periph - Front/Back Matter Paragraph Level 2
-\Description Front or back matter text paragraph, level 2 (if multiple levels)
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/4 inch first line indent
-\LeftMargin .125
-
-\Marker k1
-\Name k1 - Periph - Concordance Keyword Level 1
-\Description Concordance main entry text or keyword, level 1
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker k2
-\Name k2 - Periph - Concordance Keyword Level 2
-\Description Concordance main entry text or keyword, level 2
-\TextType Other
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-
-\Marker xtSee
-\Endmarker xtSee*
-\Name xtSee - Concordance and Names Index - Alternate Entry Target Reference
-\Description Concordance and Names Index markup for an alternate entry target reference.
-\TextProperties publishable vernacular
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-\Color 16711680
-
-\Marker xtSeeAlso
-\Endmarker xtSeeAlso*
-\Name xtSeeAlso - Concordance and Names Index - Additional Entry Target Reference
-\Description Concordance and Names Index markup for an additional entry target reference.
-\TextProperties publishable vernacular
-\TextType Other
-\StyleType Character
-\FontSize 12
-\Italic
-\color 16711680
-
-# Other special text elements specified in USFM
-# ~ = fixed (no-break) space
-# // = discretionary line break
-
-# Obsolete, deprecated, or no longer officially part of USFM.
-# These markers may have existed in earlier resource and stylesheet revisions.
-
-\Marker pr
-\Name DEPRECATED pr - Paragraph - Right Aligned
-\Description Paragraph text, right aligned
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\Justification Right
-\FontSize 12
-
-\Marker ph
-\Name DEPRECATED ph - Paragraph - Hanging Indent - Level 1
-\Description Paragraph text, with level 1 hanging indent (if single level)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\LeftMargin .5
-\FirstLineIndent -.25 # 1/4 inch indent, 1/2 inch wrap
-\FontSize 12
-
-\Marker ph1
-\Name DEPRECATED ph1 - Paragraph - Hanging Indent - Level 1
-\Description Paragraph text, with level 1 hanging indent (if multiple levels)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\LeftMargin .5
-\FirstLineIndent -.25 # 1/4 inch indent, 1/2 inch wrap
-\FontSize 12
-
-\Marker ph2
-\Name DEPRECATED ph2 - Paragraph - Hanging Indent - Level 2
-\Description Paragraph text, with level 2 hanging indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\LeftMargin .75
-\FirstLineIndent -.25 # 1/2 inch indent, 3/4 inch wrap
-\FontSize 12
-
-\Marker ph3
-\Name DEPRECATED ph3 - Paragraph - Hanging Indent - Level 3
-\Description Paragraph text, with level 3 hanging indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\LeftMargin 1
-\FirstLineIndent -.25 # 3/4 inch indent, 1 inch wrap
-\FontSize 12
-
-\Marker phi
-\Name DEPRECATED phi - Paragraph - Indented - Hanging Indent
-\Description Paragraph text, indented with hanging indent
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\LeftMargin 1
-
-\Marker tr1
-\Name OBSOLETE tr1 - Table - Row - Level 1
-\Description A table Row
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .5
-\FirstLineIndent -.25 # 6/16 inch
-
-\Marker tr2
-\Name OBSOLETE tr2 - Table - Row - Level 2
-\Description A table Row
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\LeftMargin .75
-\FirstLineIndent -.25 # 6/16 inch
-
-\Marker ps
-\Name OBSOLETE ps - Paragraph - No Break with Next Paragraph
-\Description Paragraph text, no break with next paragraph text at chapter boundary
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FontSize 12
-\FirstLineIndent .125 # 1/8 inch first line indent
-
-\Marker psi
-\Name OBSOLETE psi - Paragraph - Indented - No Break with Next
-\Description Paragraph text, indented, with no break with next paragraph text (at chapter boundary)
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Paragraph
-\FirstLineIndent .125 # 1/8 inch first line indent
-\LeftMargin .25
-\RightMargin .25
-\FontSize 12
-
-\Marker fs
-\Endmarker fs*
-\Name DEPRECATED fs - Footnote - Footnote Summary
-\Description A summary text for the concept/idea/quotation from the scripture translation for which the note is being provided.
-\TextProperties publishable vernacular note
-\TextType NoteText
-\StyleType Character
-\FontSize 12
-\Italic
-
-\Marker wr
-\Endmarker wr*
-\Name OBSOLETE wr...wr* - Auxiliary - Wordlist/Glossary Reference
-\Description A Wordlist text item
-\TextProperties publishable vernacular
-\TextType VerseText
-\StyleType Character
-\FontSize 12
-\Italic
-
-# 2.0x peripheral markup (replaced with \periph + Content Division Title/Argument)
-
-\Marker pub
-\Name OBSOLETE pub Peripherals - Front Matter Publication Data
-\Description Front matter publication data
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker toc
-\Name OBSOLETE toc Peripherals - Front Matter Table of Contents
-\Description Front matter table of contents
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker pref
-\Name OBSOLETE pref Peripherals - Front Matter Preface
-\Description Front matter preface
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker intro
-\Name OBSOLETE intro Peripherals - Front Matter Introduction
-\Description Front matter introduction
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker conc
-\Name OBSOLETE conc Peripherals - Back Matter Concordance
-\Description Back matter concordance
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker glo
-\Name OBSOLETE glo Peripherals - Back Matter Glossary
-\Description Back matter glossary
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker idx
-\Name OBSOLETE idx Peripherals - Back Matter Index
-\Description Back matter index
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker maps
-\Name OBSOLETE maps Peripherals - Back Matter Map Index
-\Description Back matter map index
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker cov
-\Name OBSOLETE cov Peripherals - Other - Cover
-\Description Other peripheral materials - cover
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker spine
-\Name OBSOLETE spine Peripherals - Other - Spine
-\Description Other peripheral materials - spine
-\TextProperties paragraph publishable vernacular poetic
-\TextType VerseText
-\FontSize 10
-\StyleType paragraph
-
-\Marker pubinfo
-\Name OBSOLETE pubinfo - Publication - Information
-\Description Publication information - Lang,Credit,Version,Copies,Publisher,Id,Logo
-\TextType Other
-\TextProperties paragraph nonpublishable nonvernacular
-\StyleType Paragraph
-\FontSize 12
-\Color 16711680
-
-# Concordance/Names Index Tools - special sfms for use in Publishing Assistant
-
-\Marker zpa-xb
-\Endmarker zpa-xb*
-\Name zpa-xb - Periph - Book
-\Description Book Ref
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker zpa-xc
-\Endmarker zpa-xc*
-\Name zpa-xc - Periph - Chapter
-\Description Chapter Ref
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-\Bold
-
-\Marker zpa-xv
-\Endmarker zpa-xv*
-\Name zpa-xv - Periph - Verse
-\Description Verse Ref
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
-
-\Marker zpa-d
-\Endmarker zpa-d*
-\Name zpa-d - Periph - Description
-\Description Description
-\TextType VerseText
-\TextProperties paragraph publishable vernacular
-\StyleType Character
-\FontSize 12
diff --git a/samples/data/en-hc.xml b/samples/data/en-hc.xml
deleted file mode 100644
index 96d7419fb..000000000
--- a/samples/data/en-hc.xml
+++ /dev/null
@@ -1,265 +0,0 @@
-
-
-
-
- English
-
-
- Noun
-
-
- Verb
-
-
- Article
-
-
-
- English Orthography
-
-
-
- a
-
-
-
-
- e
-
-
-
-
- i
-
-
-
-
- o
-
-
-
-
- u
-
-
-
-
- y
-
-
-
-
-
- b
-
-
-
-
- c
-
-
-
-
- d
-
-
-
-
- f
-
-
-
-
- g
-
-
-
-
- h
-
-
-
-
- j
-
-
-
-
- k
-
-
-
-
- l
-
-
-
-
- m
-
-
-
-
- n
-
-
-
-
- p
-
-
-
-
- q
-
-
-
-
- r
-
-
-
-
- s
-
-
-
-
- t
-
-
-
-
- v
-
-
-
-
- w
-
-
-
-
- x
-
-
-
-
- z
-
-
-
-
-
-
- +
-
-
-
-
-
-
- Any
-
-
-
-
- morphophonemic
-
-
- Past tense
-
-
-
-
-
-
-
-
-
-
-
-
- +ed
-
-
-
-
- rule1
- PAST
-
-
- Plural
-
-
-
-
-
-
-
-
-
-
-
-
- +s
-
-
-
-
- rule2
- PLURAL
-
-
-
-
-
-
- god
-
-
- le1
- god
-
-
-
-
- creat
-
-
- create
-
-
-
-
- world
-
-
- world
-
-
-
-
- the
-
-
- le2
- the
-
-
-
-
- bill
-
-
- le5
- bill
-
-
-
-
- surface
-
-
-
-
\ No newline at end of file
diff --git a/samples/data/en.txt b/samples/data/en.txt
deleted file mode 100644
index 739411113..000000000
--- a/samples/data/en.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-Would you mind giving us the keys to the room, please?
-I have made a reservation for a quiet, double room with a telephone and a tv for Rosario Cabedo.
-Would you mind moving me to a quieter room?
-I have booked a room.
-I think that there is a problem.
-Do you have any rooms with a tv, air conditioning and a safe available?
-Would you mind showing us a room with a tv?
-Does it have a telephone?
-I am leaving on the second at eight in the evening.
-How much does a single room cost per week?
-Do you accept cash?
-My name is Victoria Piquer.
-Would you mind sending up my luggage to room number three one oh?
-Do you accept cash?
-There is a mistake in my bill.
-Could you explain the bill for me, please?
-I want to book a double room for a night.
-Does it have a telephone?
-Could you wake us up at five o'clock, please?
-I should leave on Tuesday March the seventh in the morning.
-We have made a reservation.
-Could you wake us up at twelve, please?
-Can you send our luggage to the taxi?
-I have a reservation for Julia Calatayud.
-I have booked a room.
-A room with a telephone and a view for Mrs Ramírez, please.
-Can you send up our bags to the room, please?
-I have booked a room for Mr Roda.
-How much does a double room with half board cost per day?
-Are all expenses included in the bill?
-I think that there is a mistake.
-We want you to send up our suitcase to the room, please.
-I would like a room.
-Prepare the bill.
-I want a quiet, double room, please.
-Please make out the bill.
-We want you to send our luggage to our room, please.
-Could you wake us up at seven, please?
-Could we see a room?
-Could you wake us up tomorrow at a quarter to nine, please?
-Put my suitcases on the bus.
-I want a room until the twentieth, please.
-Could we book two rooms?
-Is there a quiet room available?
-I have booked a quiet room with a tv and a good view of the mountain for Rosario Cantero.
-Do you have a double room available?
-I made a reservation.
-Is the phone bill included?
-Can you give us the key to room number two nine four, please?
-Could you call a taxi, please?
-The room is very cold.
-I have made a reservation.
-Would you mind showing us another room?
-We would like you to send up our suitcases to our room.
-Can you change our room?
-Will you call a taxi for me, please?
-The room is too hot.
-Would you mind sending up my travel bags to the room?
-I would like to book a room with air conditioning for twenty days, please.
-Could I see a quiet room, please?
-Wake me up at a quarter past two.
-Could we see a room, please?
-I have booked a room until next Friday.
-I am leaving on Friday.
-Give me the key to room number one four nine, please.
-I am leaving today at eight in the morning.
-I have made a reservation for a room with a good view of the mountain and a bathroom for Pilar Jiménez.
-Please check the bill.
-Do you have a room with a tv, air conditioning and a minibar available?
-Could you wake me up tomorrow at two o'clock?
-We have booked a double room until the day after tomorrow.
-Could you call a taxi for me, please?
-I would like you to wake me up tomorrow at four, please.
-I want a room for a night, please.
-Could you ask for a taxi for us, please?
-I want to book a single room for twenty-five nights.
-I have a reservation.
-What is the date?
-Please make out the bill.
-I have booked a single room.
-I booked a room for Mr and Mrs Tena.
-We have made a reservation.
-Is everything included?
-Could you call a taxi for us, please?
-Carry our luggage.
-Would you mind giving us the key to the room?
-I made a reservation for a double room for Miguel Ramírez.
-We have booked a quiet room.
-Can you give me the key to the room, please?
-Is the phone bill included?
-I made a reservation.
-I want a room with air conditioning for today.
-Would you mind changing my room?
-We have booked two rooms with a telephone.
-I booked a double room with a telephone for today.
-Is there air conditioning in my room, please?
-I have booked a room.
-Would you mind sending the travel bags to the station?
-I have booked a quiet, double room for Enrique Velasco.
-Could you send my bags down?
-Would you mind giving us the key to our room, please?
-We want a double room for a night, please.
-I want to move to a room with a tv, please.
-Do you have a quiet room available?
-I have booked a room with a telephone.
-Please send my luggage to my room.
-Is the phone bill included?
-Send my luggage to the station.
-Would you call our taxi for us, please?
-How much does a single room with half board cost?
-The room is too cold.
-Could you send the luggage to the bus?
-We made a reservation.
-Could you make out our bill, please?
-I have booked a quiet, double room for Silvia Quereda.
-My name is Jesús Rivera.
-I have made a reservation for Sergio Moliner.
-Do you have a room available?
-Could you ask for a taxi for me, please?
-Could you prepare our bill for room number six oh nine for us, please?
-Would you mind sending down our luggage to the room?
-Could you ask for a taxi for me, please?
-I would like to book a room until the twenty-fifth.
-I want to book a double room with a telephone, please.
-Could you wake me up at two?
-Can you wake us up at eleven, please?
-Do you have a room available?
-The room is too cold.
-Could you call a taxi for me, please?
-How much is a single room with full board for a day?
-Could you wake me up at one o'clock, please?
-I have a reservation for a quiet, double room with a tv and a view.
-Could you send our suitcases to room number eight one nine, please?
-Sorry.
-I have booked a quiet, double room with a tv and a telephone.
-Could you wake me up at a quarter to eleven?
-I should leave this afternoon.
-There has been a mistake in the bill.
-We would like to change rooms, please.
-I think that there was a mistake in the bill for room number eight seven four.
-How much is a single room including breakfast, please?
-Could you wake me up at half past three, please?
-The room is very cold.
-Would you mind giving me the key to the room?
-I have booked a room.
-I would like to change rooms.
-My name is Sergio Iborra.
-I have made a reservation for Mr Miralles.
-I have a reservation for Mr Ortiz.
-We should leave on Saturday March the seventh.
-Can you wake us up at half past ten, please?
-I would like you to send down our luggage to our room, please.
-How much is a single room for a night?
-How much is a double room per day, please?
-I want a double room.
-I want you to give me the key to room number three three three.
-I booked a room.
-Is breakfast included?
-The room is very expensive.
-We are leaving on September the thirteenth at a quarter to eight in the morning.
-Can you wake me up at half past eleven, please?
-Would you mind sending my bags to the bus?
-We are leaving tomorrow at four.
-I think that there has been an error in the bill.
-Would you mind me taking a look at a room?
-I want you to send down our luggage to the room, please.
-Could you give me the keys to room number six one three, please?
-How much does a double room including room service cost, please?
-Can you explain the bill for room number oh one four for me, please?
-The room is all right.
-I made a reservation.
-I have made a reservation for a quiet, double room with a telephone and a shower.
-We should leave tomorrow evening.
-Are there a tv and air conditioning in the room?
-Wake me up tomorrow at half past ten, please.
-Please give me the key to room number nine one oh.
-We have booked a double room with a bath for today.
-Does it have air conditioning, a telephone and a tv?
-A mistake has been made in our bill.
-Could I see a single room with air conditioning?
-How much is a double room?
-Could I see a double room, please?
-Is there a quiet room available?
-I made a reservation for a room with a tv and a telephone for Roberto Arnau.
-I have booked a room with a tv and a bath for Gerardo Ródenas.
-I would like a room, please.
-We have booked a room.
-We are leaving on Thursday September the thirtieth at half past four.
-Could I see a double room with a tv?
-Is everything included?
-Could you give us the key to the room, please?
-Can you give me the key to room number seven seven three?
-Would you make out the bill for us, please?
-We should leave on Thursday April the ninth in the afternoon.
-I am leaving today at six in the morning.
-I booked a quiet, double room.
-I booked a quiet room for Amelia Peinado.
-Would you ask for a taxi for room number nine eight one for me, please?
-How much does a double room cost, please?
-Would you ask for a taxi for us, please?
-Could you explain our bill for room number nine four one, please?
-Is everything included?
-Can you prepare my bill for me, please?
-I have made a reservation for a quiet, double room with a view, a shower and a telephone for Carmelo Peris.
-Could you give me the key to the room, please?
-Could we see another room, please?
-Can you carry the travel bags?
-I would like to move to a quieter room, please.
-Could you wake us up tomorrow at a quarter past nine?
-I want to book a room, please.
-Could we book two double rooms for fifteen days?
-It does not matter!
-Could we book two rooms?
-Do you have a double room available?
-Please prepare the bill.
-I would like a room, please.
-Is room service included?
-We are leaving this evening.
-Send up our luggage to our room.
-My name is Federico Viciano.
-I have booked a quiet room.
-I have a reservation for Mrs Guijarro.
-Would you mind waking us up at half past one?
-Do you have any quiet, single rooms available?
-We should leave tomorrow.
-I have booked a room.
-Could you make out the bill for me, please?
-Could I see a quiet, double room, please?
-A mistake has been made in the bill.
-I have made a reservation for a room with a tv, a telephone and a view of the sea for Asunción Espinosa.
-Does the room have air conditioning and hot water?
-I want to book a room until next Saturday.
-Could you call a taxi for room number three one three for us, please?
-I want a room.
-Can you wake me up at a quarter to one?
-A room, please.
-I think that there was an error in the bill.
-I would like a room for five nights.
-We have booked a single room with a telephone for Mr and Mrs Santos.
-Are all taxes included?
-Is the phone bill included?
-Please send our travel bag to room number five two seven.
-I have booked a quiet room.
-Ask for a taxi.
-Can you give us the key to the room?
-Could you send the bags to the car?
-I have made a reservation for Susana Padilla.
-Can you send down our luggage to the room, please?
-Would you mind sending down our luggage to the room, please?
-How much does a double room cost per week, please?
-Wake me up at half past one, please.
-We should leave tomorrow at six.
-I have made a reservation.
-The room is too noisy.
-I want you to give us the keys to room number seven one six, please.
-Is everything included?
-I have booked a double room.
-I would like to book a single room until the twenty-first, please.
-Can you wake me up tomorrow at a quarter to three, please?
-Wake us up at one, please.
-I should leave on Monday July the second in the afternoon.
-Should I fill in a registration form, please?
-Could I see a room?
-I think that there was an error in the bill.
-The room is very expensive.
-We would like you to give us the keys to room number four three, please.
-Could you explain the bill for us, please?
-Could you give us the keys to room number two two six, please?
-How much does a single room cost, please?
-Could we book two rooms for tonight?
-Could you wake us up at one, please?
-I think that there is a problem in my bill for room number nine three three.
-No!
-My name is Marina Varela.
-I want to change rooms, please.
-The keys to room number eight two oh, please.
-Are expenses included in the bill?
-I leave today.
-Would you mind giving us the keys to the room?
-Do the rooms have air conditioning, please?
-Can you put the luggage in the car?
-Would you mind giving us the key to the room?
-Could you send down my suitcases to my room?
-I want a room with a telephone, a view, a tv and a bath for Marina Sáez.
-I have a reservation for a quiet, double room with a view of the town and a bath for Ricardo Salsas.
-Should we sign the registration form, please?
-Could you wake us up tomorrow at half past six?
-I should leave on Friday April the nineteenth at nine in the evening.
-I think that a mistake has been made in the bill.
-I would like to change rooms, please.
-Is the phone bill included?
-Can you wake me up at a quarter to two, please?
-We are leaving on the seventh at half past eleven in the evening.
-I would like you to wake us up at half past three, please.
-We should leave tomorrow at nine.
-Is there a minibar in the room?
-We booked a room until next Thursday.
-Would you mind showing me a double room with a tv, please?
-I think that there is an error in the bill for room number eight three eight.
-Could you make out the bill for room number nine oh one for us, please?
-I want to book a quiet, single room until November the first, please.
-I have booked a quiet, single room with a view of the mountain and a tv for Mrs Gómez.
-I have made a reservation.
-Could I book a room?
-We are leaving on Monday April the nineteenth in the morning.
-I have booked a quiet room.
-Could you make out my bill for me, please?
-I should leave today at half past eleven in the morning.
-Could you prepare the bill, please?
-Do you have a room available?
-I think that a mistake has been made in our bill for room number five one five.
-I want to book a room, please.
-Do you have a room available?
-Are extras included in the bill?
-I have booked a room.
-We have made a reservation.
-Can you ask for my taxi for room number seven one six for me, please?
-Can you wake me up at a quarter past four?
-Are all taxes included in the bill?
-Is breakfast included?
-I booked a room for Mr Gerardo Paches.
-I have booked a single room for Mr Fernández.
-I leave on the eighteenth at a quarter to seven in the morning.
-Could you give us the key to room number six four seven, please?
-Could we see a room, please?
-Can you send our luggage to the bus?
-I leave on Friday the first at three.
-Can you send down my luggage to the room?
-How much is a double room per day, please?
-There is a lot of noise in the room.
-Is the phone bill included?
-The room is all right.
-Is there hot water in the rooms, please?
-Would you mind changing my room?
-Could you put my travel bags in the taxi?
-We would like you to wake us up at a quarter to eight, please.
-It is very hot in the room.
-We want to change rooms.
-Put my bags on the bus.
-Does my room have air conditioning?
-Wake me up at six.
-I am leaving tomorrow at a quarter to three in the afternoon.
-Are there any rooms available?
-Can you move us to a room with a telephone and a tv?
-It does not matter.
-Are there a telephone and a tv in the room?
-I should leave today.
-We are leaving this morning.
-Would you mind showing us a room with a telephone and a tv, please?
-Carry the luggage.
-Is there air conditioning in the rooms?
-Could you send up my luggage to my room?
-I do not agree.
-I have booked a single room.
-I want to book a room for a day, please.
-Could you give us the key to my room?
-Can you give me the key to the room, please?
-I have made a reservation.
-I should leave tomorrow morning.
-Should I fill in the registration form, please?
-Would you mind changing my room?
-Can you give me the keys to room number oh three oh, please?
-Can you send down our travel bags to room number four two three, please?
-I want to book a quiet, single room for a week, please.
-Please explain the bill.
-Could you ask for a taxi for room number seven two nine for us, please?
-I have booked a room for tonight for Manuela Valls.
-I would like you to give us the key to room number one one, please.
-Can you send down our luggage to room number four one four, please?
-I would like to change rooms, please.
-We have booked a quiet, single room.
-Please send up my travel bag to room number six three one.
-Can you ask for a taxi, please?
-Can you ask for a taxi, please?
-Could you make out the bill for room number six two six, please?
-Give us the key to room number eight one four.
-I want you to send up my luggage to the room, please.
-Give me the key to room number six one eight, please.
-Could you give us the key to room number six four oh?
-Could we see a quiet room, please?
-Yes!
-Send our luggage to room number eight two six, please.
-Could you send down our luggage to room number three six two?
-I have booked a quiet room until tomorrow for Gregorio Cabedo.
-We are leaving today at half past six in the afternoon.
-Would you mind sending our travel bags to room number two three five, please?
-We made a reservation.
-Could you explain the bill for me, please?
-I would like to move to a room with a minibar and air conditioning, please.
-We would like you to wake us up at a quarter past eleven.
-We would like you to wake us up at nine o'clock.
-I booked a room.
-Can you move us to a room with a tv?
-I should leave tomorrow at ten o'clock in the morning.
-Can you explain the bill, please?
-Please send up my luggage to my room.
-Can you send our luggage to the bus?
-Should we sign the registration form?
-I would like you to wake me up tomorrow at ten, please.
-We booked a double room.
-We are leaving tomorrow at five o'clock in the afternoon.
-Is there air conditioning in the room?
-Would you mind giving me the key to room number three three three, please?
-I am leaving tomorrow at half past four in the afternoon.
-We should leave on Monday April the fourth at half past twelve in the morning.
-What is the price for a double room with half board per day, please?
-It is too hot in the room.
-How much does a double room cost?
-Would you mind showing us a room with a telephone, please?
-How much does a single room cost per day?
-I should leave.
-Could you carry my bags?
-How much does a double room cost for eighteen days, please?
-Can you wake us up tomorrow at five o'clock?
-Are all expenses included in the bill?
-I have made a reservation for a double room with a bath and a telephone for Paloma Betoret.
-I would like you to give me the keys to room number two three nine.
-Could you check the bill for me, please?
-I want you to send up my luggage to my room, please.
-Can you give us the key to room number one four oh, please?
-Would you mind giving me the keys to the room, please?
-Could you wake us up at a quarter to six?
-How much is a single room, please?
-Could we book two quiet rooms for tonight?
-I have booked a quiet, single room.
-The room is very expensive.
-I think that there was a problem in the bill.
-I want a double room for today.
-I want a single room.
-I booked a room for Alicia Morales.
-Okay.
-Please give me the key to our room.
-We want a room, please.
-I would like to book two double rooms, please.
-I am leaving tomorrow at a quarter to ten in the evening.
-I want to change rooms.
-The room is very hot.
-I made a reservation for a quiet, single room with a good view of the sea, a telephone and a tv.
-Would you mind changing our room?
-We have booked a single room until the seventeenth.
-I have a reservation.
-Do you accept traveler checks?
-We have booked a room.
-How much?
-How much is a single room per day, please?
-Do you have a quiet, double room available?
-Will you prepare the bill for us, please?
-Can you wake us up at four, please?
-We have booked a double room.
-The room is all right.
-Could you check the bill, please?
-Please call my taxi.
-I would like you to give us the key to my room.
-I want you to wake us up at half past nine.
-I would like a quiet, double room with a telephone, a good view of the mountain, a bath and a tv for Mrs Berrueco, please.
-Could you ask for my taxi for me, please?
-Could you ask for a taxi for me, please?
-I think that there has been an error in the bill.
-The room is too cold.
-Could you call my taxi for me, please?
-How much does a single room cost per week?
-Would you mind me taking a look at a double room?
-The room is all right.
-Send our luggage to our room.
-Could you carry my suitcases?
-I want a room for twenty-nine days.
-Should I fill in the registration form?
-I want a room.
-We want a single room until next Friday.
-Give us the key to room number seven oh five.
-Could you ask for a taxi, please?
-We should leave on Saturday May the fourteenth.
-Prepare our bill.
-I should leave tomorrow at a quarter to five in the afternoon.
-I want a room.
-There is a mistake in the bill.
-Do you have a single room available?
-Is there a room available?
-We have booked a single room for Luis Llopis.
-We want a double room with a shower and air conditioning.
-We have made a reservation.
-Is the phone bill included?
-Please give me the key to the room.
-I think that a mistake has been made in our bill.
-I have a reservation for a quiet, double room with a tv, a bathroom and a good view of the sea.
-Would you mind waking me up at half past ten, please?
-Please make out the bill.
-I have booked a room for Jesús Barberá.
-I want a room for a day, please.
-Could you call a taxi for me, please?
-I want you to send my luggage to my room, please.
-Is there a tv in my room?
-I booked a quiet room for twenty-six nights for Celestino Puig.
-I leave on September the sixteenth at a quarter to twelve in the morning.
-How much does a single room including breakfast cost per week?
-Please send up our travel bag to room number one seven four.
-Please prepare the bill.
-I should leave on the third at a quarter past ten in the morning.
-Do you have a room available?
-I have booked a quiet room with a bathroom, a telephone and a tv.
-Wake us up at a quarter past six.
-Could we see a double room?
-Could you wake us up at half past six?
-I think that a mistake has been made in the bill.
-I would like you to give me the key to the room, please.
-Please ask for a taxi.
-Do you have any rooms available?
-We have booked a room for ten weeks for Rosario Cornelles.
-We booked a quiet room.
-Are all extras included in the bill?
-We would like to change rooms, please.
-Could we see a room?
-How much does a double room including room service cost per week, please?
-I would like a room with a telephone, please.
-We booked two double rooms with a tv.
-Can you give me the key to room number oh one nine?
-Give me the key to the room, please.
-There is a problem in the bill.
-Is the phone bill included?
-I am leaving.
-Could you give me the key to room number five oh one?
-We should leave today in the afternoon.
-Would you ask for a taxi for me, please?
-Could you send our luggage down to reception?
-Can you send up my luggage to room number seven two eight, please?
-Could you give us the key to the room?
-We should leave on the fourteenth in the evening.
-We want a room for nine nights, please.
-Give us the keys to the room.
-I want a room with a telephone, a tv and a shower, please.
-I booked a double room.
-Could you prepare the bill for me, please?
-Send our suitcases to room number nine two six, please.
-How much is a single room per week?
-I want a room for a week, please.
-I want to book a room, please.
-I made a reservation.
-Could you make out the bill, please?
-Send up my luggage to room number oh three five.
-The room is too cold.
-Could you prepare our bill for room number three four one for us, please?
-I think that there is a problem.
-I want you to give us the keys to room number oh one oh, please.
-I have made a reservation for a single room for Dulce Gumbau.
-We booked a room.
-Could you give us the key to room number six, please?
-Could you make out the bill for us, please?
-How much is a single room per day?
-I made a reservation for Roberto Vázquez.
-Do you have a room with a telephone and a tv available?
-Send up our luggage to room number three four oh, please.
-Could you send the luggage to the car?
-What is the price for a double room with full board, please?
-I want a double room for today.
-We should leave today at twelve in the morning.
-Please send my travel bag to my room.
-Ask for a taxi.
-How much is a single room?
-Can you give us the keys to my room?
-I want you to wake me up tomorrow at half past two, please.
-Would you mind sending up my luggage to room number four nine oh, please?
-Will you make out the bill for us, please?
-Would you prepare the bill for me, please?
-I have made a reservation.
-I want a quiet, single room until tomorrow.
-Could you send my suitcase to my room?
-Would you mind waking me up at a quarter past three, please?
-Can you give us the keys to room number nine two seven?
-I have booked a single room with a tv.
-I would like you to send my bag to room number eight oh three.
-How much does a single room cost?
-Is there a tv in the rooms?
-I want you to send my luggage to room number seven three three, please.
-I have a reservation.
-Can you change my room?
-Would you mind sending our suitcases to the taxi?
-Can you wake us up at nine, please?
-I have booked two rooms.
-Can you give me the key to the room?
-Good bye!
-Can you give us the key to the room?
-Can you wake me up at one?
-Would you mind giving us the key to the room, please?
-We have booked a quiet, single room.
-I want you to give us the key to room number nine one one, please.
-Can you give us the key to my room, please?
-I am leaving.
-We should leave this afternoon.
-Would you mind putting my travel bags on the bus?
-Could you give us the key to room number four seven one, please?
-I want a quiet, single room until tomorrow, please.
-Could we book two rooms?
-I have made a reservation for a room with a telephone and a shower for Mr Borillo.
-Could you ask for our taxi for us, please?
-We have made a reservation.
-Can you prepare the bill for room number one one one for me, please?
-Would you mind sending our luggage to our room, please?
-I want you to send my luggage to room number six one four, please.
-Would you mind showing us a quiet room, please?
-I have made a reservation for a room with a tv, a good view and a shower for Virginia Pérez.
-I think that there is a mistake in the bill.
-I am leaving on Thursday morning.
-We booked a quiet, single room for thirty days for Lidia Llorens.
-There is a lot of noise in the room.
-We have booked two quiet rooms.
-Would you mind showing us a room?
-I want a room with a bathroom, a tv and a good view for Jorge Balaguer, please.
-Does it have a tv?
-Could we see a quiet, single room?
-I think that there was a mistake in the bill.
-It is very hot in the room.
-I should leave tomorrow at a quarter past two in the afternoon.
-Is there air conditioning in the rooms?
-Can you wake us up at a quarter to one?
-We booked a double room for twenty-nine days.
-Could we book two quiet, single rooms until the twenty-eighth?
-Can you call a taxi for me, please?
-I want you to wake me up at half past seven.
-Could you check the bill for me, please?
-Do you have any quiet rooms available?
-I think that there was a problem in the bill for room number nine six four.
-Give me the keys to the room, please.
-Could you call our taxi for room number two six eight for us, please?
-Can you give us the key to the room?
-Give me the key to room number four one three.
-Could you send our luggage to reception?
-We would like a room, please.
-How much is a double room per week, please?
-Could you wake us up tomorrow at half past nine, please?
-We booked a single room for a night for Micaela Carpio.
-Please ask for our taxi for room number one two eight.
-How much does a double room with full board cost per day?
-Wake me up at a quarter past one.
-I have booked a room with a good view and a telephone.
-Would you mind giving us the keys to the room, please?
-I should leave today at a quarter past eight in the morning.
-Can you ask for a taxi for room number oh one nine for us, please?
-I think that there is an error.
-We want a room.
-I should leave on Thursday October the twenty-eighth at eight o'clock in the morning.
-Could you wake me up at half past ten, please?
-I would like you to wake me up at one, please.
-We are leaving on the eleventh.
-How many?
-I have a reservation for Mr Borrás.
-Can you send the suitcases to the bus?
-There was a mistake in my bill.
-Could I see a room, please?
-Please make out the bill for room number nine one four.
-Could you send up our luggage to room number four seven four?
-Do you have any quiet rooms available?
-I have booked a room until November the first for Mr Víctor Lobo.
-Are extras included?
-We have booked a room until next Sunday for Mr Ángel Viciano.
-Could you give us the key to my room, please?
-Can you make out the bill for room number two one two for me, please?
-Could you send down my luggage to the room, please?
-Could we book two single rooms for today?
-Do you have a quiet, single room available?
-Give me the key to room number three one oh.
-We have booked a room for today.
-There is too much noise in the room.
-We should leave on the first in the morning.
-I would like a quiet, single room, please.
-We want a quiet, double room.
-I want you to wake me up tomorrow at a quarter to twelve.
-Could you wake us up at a quarter past one, please?
-We are leaving on the fifteenth at a quarter to nine in the morning.
-Are taxes included?
-Could you call a taxi for me, please?
-Could you send the travel bags down to reception?
-Could you make out the bill for room number seven three two for us, please?
-I have booked a room for eighteen days for Mr and Mrs Cabo.
-Are there any rooms with a bath available?
-Can you make out the bill for us, please?
-I booked a quiet, double room with a tv for tonight for Miss Marina Miralles.
-I think that there was a problem in the bill for room number seven eight six.
-Do you have any rooms with a telephone available?
-I am leaving today in the afternoon.
-We should leave today at twelve in the morning.
-We should leave on Monday evening.
-I want a room with a tv, a shower and a telephone.
-I booked a room for today for Mr Rafael Soler.
-Could I book a double room?
-We want a room until the twenty-eighth, please.
-Do you have a quiet, single room available?
-We would like to move to a room with a tv and a bathroom, please.
-Do you have any quiet, single rooms available?
-Can you change our room?
-Are all taxes included?
-Could you ask for a taxi for me, please?
-I have booked a room for Mr Ortiz.
-We are leaving on Sunday at nine o'clock in the morning.
-Would you call a taxi for us, please?
-Thank you very much!
-Could you send down our suitcase to our room?
-I have a reservation.
-Can you wake me up tomorrow at a quarter past one?
-Could you make out the bill for room number four one nine for us, please?
-There is a mistake.
-We have made a reservation.
-Please send my travel bags to the room.
-Do you have a quiet room available?
-We have booked two rooms for a night.
-Could you check my bill for me, please?
-I have a reservation for a quiet room.
-Could you give us the keys to room number five one five, please?
-We want to book a room with air conditioning, please.
-I have made a reservation for a room for Teresa Martínez.
-Could you call my taxi for me, please?
-I have booked a room with a shower, a tv and a telephone for Emilio Paches.
-Could you give us the key to room number five nine, please?
-Is everything included?
-I have made a reservation for a room for Mr Ramos.
-I think that there is a mistake in my bill for room number three three nine.
-Is there air conditioning in the room?
-We should leave on the fourteenth at a quarter past one in the afternoon.
-I think that there is a mistake in the bill for room number seven one nine.
-Wake us up at a quarter to one, please.
-I think that there is a mistake in the bill.
-Could you put the luggage in the taxi?
-We want to book a double room for tonight.
-Do you accept cash?
-Could you put the luggage in the car?
-I have booked a room for Sergio Orenga.
-Could you call a taxi for room number one nine oh for me, please?
-We would like you to give us the key to the room, please.
-Is there a telephone in our room?
-Can you explain the bill for us, please?
-Can you give us the key to my room, please?
-Is there a single room available?
-We should leave.
-Can you give me the key to room number two one four, please?
-Would you mind changing my room?
-Can you put our luggage in the car?
-I want a quiet room.
-Wake us up tomorrow at a quarter to six, please.
-I want a room with a tv, a telephone and hot water until the twenty-seventh.
-Please wake us up at one o'clock.
-I have booked a quiet room for Tomás Fernández.
-Can you give us the key to room number two five nine, please?
-Please wake us up at a quarter past one.
-I have booked a room.
-Please give us the keys to room number six four one.
-I have made a reservation for a room with a tv and a telephone for Miss Calleja.
-I booked a room with a tv, a good view and a telephone.
-I would like you to wake us up tomorrow at a quarter to six, please.
-I want to change rooms.
-We want to change rooms, please.
-Do you have any double rooms available?
-I would like a room.
-We want a room.
-I would like you to give me the key to our room, please.
-I should leave on September the thirtieth.
-Is there a room available?
-Would you prepare the bill for me, please?
-I would like a room with a tv and a telephone, please.
-I have booked a room with a telephone.
-Wake us up tomorrow at six o'clock, please.
-We have booked a quiet room.
-I have a reservation.
-Could I see a quiet, single room, please?
-How much is a single room, please?
-Send my bags to the taxi.
-We want to change rooms.
-Can you send the bags to the station?
-Would you mind showing me another room?
-I want to book a room, please.
-I have made a reservation.
-What is the price for a single room for nine days, please?
-We should leave tomorrow at one.
-Please send my bags to room number oh two nine.
-Could you send my bags to the bus?
-We have booked a room for a night for Mr Federico Cornelles.
-I made a reservation.
-I think that there has been a problem.
-Can you prepare the bill for room number five one one, please?
-The room is very hot.
-Could I see a quiet, single room?
-Could you call a taxi for me, please?
-Wake me up tomorrow at five.
-Is room service included?
-Could you give us the keys to the room, please?
-I am leaving on Friday May the twenty-ninth at nine o'clock in the evening.
-I want to book a quiet, single room for this week, please.
-How much does a double room with full board cost?
-Could you wake us up at half past seven?
-We booked a single room.
-Send our travel bags down to reception.
-We have booked a room until February the second.
-I would like to book a room for tonight, please.
-Would you mind giving me the key to my room?
-Would you mind waking me up at a quarter past eight, please?
-Could you wake us up at half past six?
-We want you to give us the key to the room.
-I have a reservation for a quiet, single room for Enrique Díaz.
-Do you have a room with hot water and air conditioning available?
-Does the room have a telephone and air conditioning?
-We should leave on the twenty-seventh at nine o'clock.
-Would you call a taxi for me, please?
-Would you mind waking us up tomorrow at a quarter to nine?
-We booked a room with air conditioning until the day after tomorrow.
-Can you ask for a taxi for us, please?
-We have booked a double room.
-I would like you to send my bags to my room, please.
-I want a double room.
-I leave tomorrow at twelve o'clock in the morning.
-Are there air conditioning and a minibar in the rooms?
-We booked two rooms.
-Is there a safe in the rooms?
-Do you have any quiet rooms available?
-Can you give me the keys to room number one one three, please?
-Please send up my suitcase to my room.
-I have booked a double room with air conditioning, a telephone and a tv.
-I want to book a room.
-Could I see another room?
-Do you have any double rooms available?
-Are all taxes included?
-Please wake us up tomorrow at two.
-Could you give us the key to the room, please?
-Put our suitcases in the car.
-How much does a single room cost?
-I am leaving on Friday April the eleventh at a quarter past eight in the evening.
-I want you to give us the key to my room, please.
-How much does a double room cost per week?
-I made a reservation for a quiet, double room with a bathroom and a view of the town for Arturo Mira.
-I have booked a room.
-Is there a tv in the room, please?
-I think that there has been a problem in my bill for room number six five.
-How much does a single room cost, please?
-Could you make out the bill for room number one four seven for me, please?
-Is there hot water in the room, please?
-Do you have a single room available?
-How much does a single room cost for a day?
-Can you call a taxi for room number three six for us, please?
-How much is a double room per day?
-We have made a reservation.
-I have booked a quiet, double room for Paloma Montero.
-We want to move to a room with a bathroom, please.
-Could you wake me up at eleven o'clock, please?
-Could you call a taxi for room number nine three six for us, please?
-We are leaving on September the twenty-sixth at a quarter past seven.
-I want you to give me the key to the room, please.
-Could you ask for a taxi for me, please?
-Would you accept cash?
-I have a reservation for a room for Francisco Botella.
-Could you prepare the bill for me, please?
-I would like to book a quiet, single room with a telephone until the day after tomorrow, please.
-Could you ask for a taxi for us, please?
-Is there a tv in the rooms?
-How much?
-Okay!
-Could you prepare the bill for room number two six three for us, please?
-Is there a telephone in the rooms?
-What time is it?
-My name is Jesús González.
-I have made a reservation for Teresa Ibá~nez.
-I should leave today at eleven o'clock in the morning.
-I would like you to send down my luggage to room number one two.
-Where?
-Could you ask for a taxi for room number six one four for us, please?
-Would you mind waking me up tomorrow at half past four, please?
-We would like to move to a quieter room, please.
-I think that a mistake has been made in the bill.
-Is the phone bill included?
-A room for Virginia Álvarez, please.
-We should leave today in the evening.
-It is very hot in the room.
-Could you prepare my bill for me, please?
-Could I see a room, please?
-We have booked a double room.
-Would you accept credit cards?
-I should leave on Thursday the sixteenth at half past nine in the evening.
-Please send up my suitcase to my room.
-I want a single room.
-Are there any quiet, double rooms available?
-We want you to send down our suitcases to the room.
-Do you have a room available?
-We are leaving on Saturday.
-I have made a reservation for a room with a tv and a telephone for Inmaculada Colomer.
-Send up my suitcases to room number two eight, please.
-Would you mind waking us up at half past four, please?
-There is an error in the bill for room number seven one nine.
-Would you ask for our taxi for room number two three one for us, please?
-Could you send up our travel bag to the room, please?
-Would you mind sending our luggage to our room?
-Can you move me to a warmer room?
-We have booked a room.
-Would you mind us taking a look at a room?
-How many?
-Give me the keys to our room.
-Could you call a taxi for me, please?
-I would like you to send my suitcase to room number seven oh three, please.
-We have made a reservation.
-Can you move me to a warmer room?
-Good bye.
-Please send my suitcase to the room.
-Could you send my luggage to room number seven two three, please?
-Is there a double room available?
-Please give us the key to the room.
-I think that there has been a mistake in the bill.
-Wake us up tomorrow at one o'clock, please.
-When?
-My name is Emilio Navarro.
-Would you mind sending up our bags to our room, please?
-There is an error in our bill.
-Is there a telephone in the room?
-I have a reservation for a room with a telephone, a tv and a bath for Isabel Cabedo.
-Could you wake me up tomorrow at twelve, please?
-Could we see another room, please?
-Could you make out the bill for me, please?
-Could I book a room?
-I should leave tomorrow at six.
-We want you to give us the key to room number nine two one, please.
-Send our bags to our room.
-Can you move us to a quieter room?
-I think that there is a mistake in my bill.
-I should leave on September the eighth.
-I have booked a double room for Mrs Inmaculada Colomer.
-Could we book two rooms?
-Send down our luggage to room number four one eight.
-I should leave on the thirteenth at a quarter past four.
-Do you have a single room available?
-We booked two rooms.
-I think that there is an error.
-Would you mind moving us to a quieter room?
-Give us the keys to room number nine nine two, please.
-I want a room, please.
-I have made a reservation for a room with a telephone, a view of the mountain, a bath and a tv for Ricardo Vilanova.
-I want you to send up my luggage to my room.
-I have made a reservation.
-Could you wake us up tomorrow at four?
-I think that there was an error in the bill.
-I should leave tomorrow.
-Would you mind giving us the key to the room?
-I would like a room until next Tuesday.
-Where?
-Would you mind giving me the key to room number five two two, please?
-I want to book a room.
-Send my luggage to the station.
-Could you carry the bags?
-Could you give us the key to my room?
-We would like a double room with a shower for a day.
-Do you have a double room available?
-There has been a mistake in the bill.
-I would like to book a room for seven days.
-We have booked a single room with a tv, a telephone and a bath until tomorrow for José Herrero.
-Are extras included in the bill?
-We have booked a double room.
-The room is very cold.
-I have booked a double room for today.
-Good morning!
-Can you send the travel bags to the car?
-Could I see a quiet, double room with a tv, please?
-Are all taxes included in the bill?
-There is a mistake in the bill.
-Would you mind putting my luggage on the bus?
-I leave on March the twenty-seventh at half past two in the afternoon.
-I booked a quiet, double room with a bath, a good view and a tv for Andrés Sanz.
-Could you call a taxi for us, please?
-Should we sign a registration form?
-I have made a reservation for a room for Julia Vilanova.
-Is there a quiet room available?
-My name is Gregorio Pitarch.
-Pardon?
-Could you call my taxi for me, please?
-I think that there is an error in the bill.
-Do you have a room with a bath, air conditioning and a tv available?
-Would you call a taxi for us, please?
-Not at all.
-We booked a room for Juan Rubio.
-Could I book a room with air conditioning for this week?
-We are leaving today at a quarter past ten in the evening.
-It is too cold in the room.
-I have a reservation.
-We are leaving tomorrow at a quarter to three in the afternoon.
-We want you to wake us up at eleven, please.
-I would like you to give me the keys to room number six three eight.
-Can you prepare the bill for us, please?
-We booked a single room.
-We want to book a room, please.
-Would you mind sending my luggage to reception?
-Could you call a taxi for me, please?
-Does the room have air conditioning?
-I should leave tomorrow at a quarter past ten in the evening.
-I have booked a single room.
-Do you have a single room available?
-We should leave on the fourth.
-Can I pay the bill in cash?
-Could you give us the keys to our room?
-I want a quiet, single room for today, please.
-Should we sign the registration form?
-We have made a reservation.
-Would you mind showing me a room with a bath, please?
-Wake me up tomorrow at a quarter to three, please.
-I would like a room with a good view of the mountain and a shower, please.
-I have booked a room.
-Should we fill in the registration form?
-Can you wake me up at two o'clock, please?
-Can you wake us up at ten, please?
diff --git a/samples/data/en_tok.txt b/samples/data/en_tok.txt
deleted file mode 100644
index 8e2358597..000000000
--- a/samples/data/en_tok.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-Would you mind giving us the keys to the room , please ?
-I have made a reservation for a quiet , double room with a telephone and a tv for Rosario Cabedo .
-Would you mind moving me to a quieter room ?
-I have booked a room .
-I think that there is a problem .
-Do you have any rooms with a tv , air conditioning and a safe available ?
-Would you mind showing us a room with a tv ?
-Does it have a telephone ?
-I am leaving on the second at eight in the evening .
-How much does a single room cost per week ?
-Do you accept cash ?
-My name is Victoria Piquer .
-Would you mind sending up my luggage to room number three one oh ?
-Do you accept cash ?
-There is a mistake in my bill .
-Could you explain the bill for me , please ?
-I want to book a double room for a night .
-Does it have a telephone ?
-Could you wake us up at five o ' clock , please ?
-I should leave on Tuesday March the seventh in the morning .
-We have made a reservation .
-Could you wake us up at twelve , please ?
-Can you send our luggage to the taxi ?
-I have a reservation for Julia Calatayud .
-I have booked a room .
-A room with a telephone and a view for Mrs Ramírez , please .
-Can you send up our bags to the room , please ?
-I have booked a room for Mr Roda .
-How much does a double room with half board cost per day ?
-Are all expenses included in the bill ?
-I think that there is a mistake .
-We want you to send up our suitcase to the room , please .
-I would like a room .
-Prepare the bill .
-I want a quiet , double room , please .
-Please make out the bill .
-We want you to send our luggage to our room , please .
-Could you wake us up at seven , please ?
-Could we see a room ?
-Could you wake us up tomorrow at a quarter to nine , please ?
-Put my suitcases on the bus .
-I want a room until the twentieth , please .
-Could we book two rooms ?
-Is there a quiet room available ?
-I have booked a quiet room with a tv and a good view of the mountain for Rosario Cantero .
-Do you have a double room available ?
-I made a reservation .
-Is the phone bill included ?
-Can you give us the key to room number two nine four , please ?
-Could you call a taxi , please ?
-The room is very cold .
-I have made a reservation .
-Would you mind showing us another room ?
-We would like you to send up our suitcases to our room .
-Can you change our room ?
-Will you call a taxi for me , please ?
-The room is too hot .
-Would you mind sending up my travel bags to the room ?
-I would like to book a room with air conditioning for twenty days , please .
-Could I see a quiet room , please ?
-Wake me up at a quarter past two .
-Could we see a room , please ?
-I have booked a room until next Friday .
-I am leaving on Friday .
-Give me the key to room number one four nine , please .
-I am leaving today at eight in the morning .
-I have made a reservation for a room with a good view of the mountain and a bathroom for Pilar Jiménez .
-Please check the bill .
-Do you have a room with a tv , air conditioning and a minibar available ?
-Could you wake me up tomorrow at two o ' clock ?
-We have booked a double room until the day after tomorrow .
-Could you call a taxi for me , please ?
-I would like you to wake me up tomorrow at four , please .
-I want a room for a night , please .
-Could you ask for a taxi for us , please ?
-I want to book a single room for twenty - five nights .
-I have a reservation .
-What is the date ?
-Please make out the bill .
-I have booked a single room .
-I booked a room for Mr and Mrs Tena .
-We have made a reservation .
-Is everything included ?
-Could you call a taxi for us , please ?
-Carry our luggage .
-Would you mind giving us the key to the room ?
-I made a reservation for a double room for Miguel Ramírez .
-We have booked a quiet room .
-Can you give me the key to the room , please ?
-Is the phone bill included ?
-I made a reservation .
-I want a room with air conditioning for today .
-Would you mind changing my room ?
-We have booked two rooms with a telephone .
-I booked a double room with a telephone for today .
-Is there air conditioning in my room , please ?
-I have booked a room .
-Would you mind sending the travel bags to the station ?
-I have booked a quiet , double room for Enrique Velasco .
-Could you send my bags down ?
-Would you mind giving us the key to our room , please ?
-We want a double room for a night , please .
-I want to move to a room with a tv , please .
-Do you have a quiet room available ?
-I have booked a room with a telephone .
-Please send my luggage to my room .
-Is the phone bill included ?
-Send my luggage to the station .
-Would you call our taxi for us , please ?
-How much does a single room with half board cost ?
-The room is too cold .
-Could you send the luggage to the bus ?
-We made a reservation .
-Could you make out our bill , please ?
-I have booked a quiet , double room for Silvia Quereda .
-My name is Jesús Rivera .
-I have made a reservation for Sergio Moliner .
-Do you have a room available ?
-Could you ask for a taxi for me , please ?
-Could you prepare our bill for room number six oh nine for us , please ?
-Would you mind sending down our luggage to the room ?
-Could you ask for a taxi for me , please ?
-I would like to book a room until the twenty - fifth .
-I want to book a double room with a telephone , please .
-Could you wake me up at two ?
-Can you wake us up at eleven , please ?
-Do you have a room available ?
-The room is too cold .
-Could you call a taxi for me , please ?
-How much is a single room with full board for a day ?
-Could you wake me up at one o ' clock , please ?
-I have a reservation for a quiet , double room with a tv and a view .
-Could you send our suitcases to room number eight one nine , please ?
-Sorry .
-I have booked a quiet , double room with a tv and a telephone .
-Could you wake me up at a quarter to eleven ?
-I should leave this afternoon .
-There has been a mistake in the bill .
-We would like to change rooms , please .
-I think that there was a mistake in the bill for room number eight seven four .
-How much is a single room including breakfast , please ?
-Could you wake me up at half past three , please ?
-The room is very cold .
-Would you mind giving me the key to the room ?
-I have booked a room .
-I would like to change rooms .
-My name is Sergio Iborra .
-I have made a reservation for Mr Miralles .
-I have a reservation for Mr Ortiz .
-We should leave on Saturday March the seventh .
-Can you wake us up at half past ten , please ?
-I would like you to send down our luggage to our room , please .
-How much is a single room for a night ?
-How much is a double room per day , please ?
-I want a double room .
-I want you to give me the key to room number three three three .
-I booked a room .
-Is breakfast included ?
-The room is very expensive .
-We are leaving on September the thirteenth at a quarter to eight in the morning .
-Can you wake me up at half past eleven , please ?
-Would you mind sending my bags to the bus ?
-We are leaving tomorrow at four .
-I think that there has been an error in the bill .
-Would you mind me taking a look at a room ?
-I want you to send down our luggage to the room , please .
-Could you give me the keys to room number six one three , please ?
-How much does a double room including room service cost , please ?
-Can you explain the bill for room number oh one four for me , please ?
-The room is all right .
-I made a reservation .
-I have made a reservation for a quiet , double room with a telephone and a shower .
-We should leave tomorrow evening .
-Are there a tv and air conditioning in the room ?
-Wake me up tomorrow at half past ten , please .
-Please give me the key to room number nine one oh .
-We have booked a double room with a bath for today .
-Does it have air conditioning , a telephone and a tv ?
-A mistake has been made in our bill .
-Could I see a single room with air conditioning ?
-How much is a double room ?
-Could I see a double room , please ?
-Is there a quiet room available ?
-I made a reservation for a room with a tv and a telephone for Roberto Arnau .
-I have booked a room with a tv and a bath for Gerardo Ródenas .
-I would like a room , please .
-We have booked a room .
-We are leaving on Thursday September the thirtieth at half past four .
-Could I see a double room with a tv ?
-Is everything included ?
-Could you give us the key to the room , please ?
-Can you give me the key to room number seven seven three ?
-Would you make out the bill for us , please ?
-We should leave on Thursday April the ninth in the afternoon .
-I am leaving today at six in the morning .
-I booked a quiet , double room .
-I booked a quiet room for Amelia Peinado .
-Would you ask for a taxi for room number nine eight one for me , please ?
-How much does a double room cost , please ?
-Would you ask for a taxi for us , please ?
-Could you explain our bill for room number nine four one , please ?
-Is everything included ?
-Can you prepare my bill for me , please ?
-I have made a reservation for a quiet , double room with a view , a shower and a telephone for Carmelo Peris .
-Could you give me the key to the room , please ?
-Could we see another room , please ?
-Can you carry the travel bags ?
-I would like to move to a quieter room , please .
-Could you wake us up tomorrow at a quarter past nine ?
-I want to book a room , please .
-Could we book two double rooms for fifteen days ?
-It does not matter !
-Could we book two rooms ?
-Do you have a double room available ?
-Please prepare the bill .
-I would like a room , please .
-Is room service included ?
-We are leaving this evening .
-Send up our luggage to our room .
-My name is Federico Viciano .
-I have booked a quiet room .
-I have a reservation for Mrs Guijarro .
-Would you mind waking us up at half past one ?
-Do you have any quiet , single rooms available ?
-We should leave tomorrow .
-I have booked a room .
-Could you make out the bill for me , please ?
-Could I see a quiet , double room , please ?
-A mistake has been made in the bill .
-I have made a reservation for a room with a tv , a telephone and a view of the sea for Asunción Espinosa .
-Does the room have air conditioning and hot water ?
-I want to book a room until next Saturday .
-Could you call a taxi for room number three one three for us , please ?
-I want a room .
-Can you wake me up at a quarter to one ?
-A room , please .
-I think that there was an error in the bill .
-I would like a room for five nights .
-We have booked a single room with a telephone for Mr and Mrs Santos .
-Are all taxes included ?
-Is the phone bill included ?
-Please send our travel bag to room number five two seven .
-I have booked a quiet room .
-Ask for a taxi .
-Can you give us the key to the room ?
-Could you send the bags to the car ?
-I have made a reservation for Susana Padilla .
-Can you send down our luggage to the room , please ?
-Would you mind sending down our luggage to the room , please ?
-How much does a double room cost per week , please ?
-Wake me up at half past one , please .
-We should leave tomorrow at six .
-I have made a reservation .
-The room is too noisy .
-I want you to give us the keys to room number seven one six , please .
-Is everything included ?
-I have booked a double room .
-I would like to book a single room until the twenty - first , please .
-Can you wake me up tomorrow at a quarter to three , please ?
-Wake us up at one , please .
-I should leave on Monday July the second in the afternoon .
-Should I fill in a registration form , please ?
-Could I see a room ?
-I think that there was an error in the bill .
-The room is very expensive .
-We would like you to give us the keys to room number four three , please .
-Could you explain the bill for us , please ?
-Could you give us the keys to room number two two six , please ?
-How much does a single room cost , please ?
-Could we book two rooms for tonight ?
-Could you wake us up at one , please ?
-I think that there is a problem in my bill for room number nine three three .
-No !
-My name is Marina Varela .
-I want to change rooms , please .
-The keys to room number eight two oh , please .
-Are expenses included in the bill ?
-I leave today .
-Would you mind giving us the keys to the room ?
-Do the rooms have air conditioning , please ?
-Can you put the luggage in the car ?
-Would you mind giving us the key to the room ?
-Could you send down my suitcases to my room ?
-I want a room with a telephone , a view , a tv and a bath for Marina Sáez .
-I have a reservation for a quiet , double room with a view of the town and a bath for Ricardo Salsas .
-Should we sign the registration form , please ?
-Could you wake us up tomorrow at half past six ?
-I should leave on Friday April the nineteenth at nine in the evening .
-I think that a mistake has been made in the bill .
-I would like to change rooms , please .
-Is the phone bill included ?
-Can you wake me up at a quarter to two , please ?
-We are leaving on the seventh at half past eleven in the evening .
-I would like you to wake us up at half past three , please .
-We should leave tomorrow at nine .
-Is there a minibar in the room ?
-We booked a room until next Thursday .
-Would you mind showing me a double room with a tv , please ?
-I think that there is an error in the bill for room number eight three eight .
-Could you make out the bill for room number nine oh one for us , please ?
-I want to book a quiet , single room until November the first , please .
-I have booked a quiet , single room with a view of the mountain and a tv for Mrs Gómez .
-I have made a reservation .
-Could I book a room ?
-We are leaving on Monday April the nineteenth in the morning .
-I have booked a quiet room .
-Could you make out my bill for me , please ?
-I should leave today at half past eleven in the morning .
-Could you prepare the bill , please ?
-Do you have a room available ?
-I think that a mistake has been made in our bill for room number five one five .
-I want to book a room , please .
-Do you have a room available ?
-Are extras included in the bill ?
-I have booked a room .
-We have made a reservation .
-Can you ask for my taxi for room number seven one six for me , please ?
-Can you wake me up at a quarter past four ?
-Are all taxes included in the bill ?
-Is breakfast included ?
-I booked a room for Mr Gerardo Paches .
-I have booked a single room for Mr Fernández .
-I leave on the eighteenth at a quarter to seven in the morning .
-Could you give us the key to room number six four seven , please ?
-Could we see a room , please ?
-Can you send our luggage to the bus ?
-I leave on Friday the first at three .
-Can you send down my luggage to the room ?
-How much is a double room per day , please ?
-There is a lot of noise in the room .
-Is the phone bill included ?
-The room is all right .
-Is there hot water in the rooms , please ?
-Would you mind changing my room ?
-Could you put my travel bags in the taxi ?
-We would like you to wake us up at a quarter to eight , please .
-It is very hot in the room .
-We want to change rooms .
-Put my bags on the bus .
-Does my room have air conditioning ?
-Wake me up at six .
-I am leaving tomorrow at a quarter to three in the afternoon .
-Are there any rooms available ?
-Can you move us to a room with a telephone and a tv ?
-It does not matter .
-Are there a telephone and a tv in the room ?
-I should leave today .
-We are leaving this morning .
-Would you mind showing us a room with a telephone and a tv , please ?
-Carry the luggage .
-Is there air conditioning in the rooms ?
-Could you send up my luggage to my room ?
-I do not agree .
-I have booked a single room .
-I want to book a room for a day , please .
-Could you give us the key to my room ?
-Can you give me the key to the room , please ?
-I have made a reservation .
-I should leave tomorrow morning .
-Should I fill in the registration form , please ?
-Would you mind changing my room ?
-Can you give me the keys to room number oh three oh , please ?
-Can you send down our travel bags to room number four two three , please ?
-I want to book a quiet , single room for a week , please .
-Please explain the bill .
-Could you ask for a taxi for room number seven two nine for us , please ?
-I have booked a room for tonight for Manuela Valls .
-I would like you to give us the key to room number one one , please .
-Can you send down our luggage to room number four one four , please ?
-I would like to change rooms , please .
-We have booked a quiet , single room .
-Please send up my travel bag to room number six three one .
-Can you ask for a taxi , please ?
-Can you ask for a taxi , please ?
-Could you make out the bill for room number six two six , please ?
-Give us the key to room number eight one four .
-I want you to send up my luggage to the room , please .
-Give me the key to room number six one eight , please .
-Could you give us the key to room number six four oh ?
-Could we see a quiet room , please ?
-Yes !
-Send our luggage to room number eight two six , please .
-Could you send down our luggage to room number three six two ?
-I have booked a quiet room until tomorrow for Gregorio Cabedo .
-We are leaving today at half past six in the afternoon .
-Would you mind sending our travel bags to room number two three five , please ?
-We made a reservation .
-Could you explain the bill for me , please ?
-I would like to move to a room with a minibar and air conditioning , please .
-We would like you to wake us up at a quarter past eleven .
-We would like you to wake us up at nine o ' clock .
-I booked a room .
-Can you move us to a room with a tv ?
-I should leave tomorrow at ten o ' clock in the morning .
-Can you explain the bill , please ?
-Please send up my luggage to my room .
-Can you send our luggage to the bus ?
-Should we sign the registration form ?
-I would like you to wake me up tomorrow at ten , please .
-We booked a double room .
-We are leaving tomorrow at five o ' clock in the afternoon .
-Is there air conditioning in the room ?
-Would you mind giving me the key to room number three three three , please ?
-I am leaving tomorrow at half past four in the afternoon .
-We should leave on Monday April the fourth at half past twelve in the morning .
-What is the price for a double room with half board per day , please ?
-It is too hot in the room .
-How much does a double room cost ?
-Would you mind showing us a room with a telephone , please ?
-How much does a single room cost per day ?
-I should leave .
-Could you carry my bags ?
-How much does a double room cost for eighteen days , please ?
-Can you wake us up tomorrow at five o ' clock ?
-Are all expenses included in the bill ?
-I have made a reservation for a double room with a bath and a telephone for Paloma Betoret .
-I would like you to give me the keys to room number two three nine .
-Could you check the bill for me , please ?
-I want you to send up my luggage to my room , please .
-Can you give us the key to room number one four oh , please ?
-Would you mind giving me the keys to the room , please ?
-Could you wake us up at a quarter to six ?
-How much is a single room , please ?
-Could we book two quiet rooms for tonight ?
-I have booked a quiet , single room .
-The room is very expensive .
-I think that there was a problem in the bill .
-I want a double room for today .
-I want a single room .
-I booked a room for Alicia Morales .
-Okay .
-Please give me the key to our room .
-We want a room , please .
-I would like to book two double rooms , please .
-I am leaving tomorrow at a quarter to ten in the evening .
-I want to change rooms .
-The room is very hot .
-I made a reservation for a quiet , single room with a good view of the sea , a telephone and a tv .
-Would you mind changing our room ?
-We have booked a single room until the seventeenth .
-I have a reservation .
-Do you accept traveler checks ?
-We have booked a room .
-How much ?
-How much is a single room per day , please ?
-Do you have a quiet , double room available ?
-Will you prepare the bill for us , please ?
-Can you wake us up at four , please ?
-We have booked a double room .
-The room is all right .
-Could you check the bill , please ?
-Please call my taxi .
-I would like you to give us the key to my room .
-I want you to wake us up at half past nine .
-I would like a quiet , double room with a telephone , a good view of the mountain , a bath and a tv for Mrs Berrueco , please .
-Could you ask for my taxi for me , please ?
-Could you ask for a taxi for me , please ?
-I think that there has been an error in the bill .
-The room is too cold .
-Could you call my taxi for me , please ?
-How much does a single room cost per week ?
-Would you mind me taking a look at a double room ?
-The room is all right .
-Send our luggage to our room .
-Could you carry my suitcases ?
-I want a room for twenty - nine days .
-Should I fill in the registration form ?
-I want a room .
-We want a single room until next Friday .
-Give us the key to room number seven oh five .
-Could you ask for a taxi , please ?
-We should leave on Saturday May the fourteenth .
-Prepare our bill .
-I should leave tomorrow at a quarter to five in the afternoon .
-I want a room .
-There is a mistake in the bill .
-Do you have a single room available ?
-Is there a room available ?
-We have booked a single room for Luis Llopis .
-We want a double room with a shower and air conditioning .
-We have made a reservation .
-Is the phone bill included ?
-Please give me the key to the room .
-I think that a mistake has been made in our bill .
-I have a reservation for a quiet , double room with a tv , a bathroom and a good view of the sea .
-Would you mind waking me up at half past ten , please ?
-Please make out the bill .
-I have booked a room for Jesús Barberá .
-I want a room for a day , please .
-Could you call a taxi for me , please ?
-I want you to send my luggage to my room , please .
-Is there a tv in my room ?
-I booked a quiet room for twenty - six nights for Celestino Puig .
-I leave on September the sixteenth at a quarter to twelve in the morning .
-How much does a single room including breakfast cost per week ?
-Please send up our travel bag to room number one seven four .
-Please prepare the bill .
-I should leave on the third at a quarter past ten in the morning .
-Do you have a room available ?
-I have booked a quiet room with a bathroom , a telephone and a tv .
-Wake us up at a quarter past six .
-Could we see a double room ?
-Could you wake us up at half past six ?
-I think that a mistake has been made in the bill .
-I would like you to give me the key to the room , please .
-Please ask for a taxi .
-Do you have any rooms available ?
-We have booked a room for ten weeks for Rosario Cornelles .
-We booked a quiet room .
-Are all extras included in the bill ?
-We would like to change rooms , please .
-Could we see a room ?
-How much does a double room including room service cost per week , please ?
-I would like a room with a telephone , please .
-We booked two double rooms with a tv .
-Can you give me the key to room number oh one nine ?
-Give me the key to the room , please .
-There is a problem in the bill .
-Is the phone bill included ?
-I am leaving .
-Could you give me the key to room number five oh one ?
-We should leave today in the afternoon .
-Would you ask for a taxi for me , please ?
-Could you send our luggage down to reception ?
-Can you send up my luggage to room number seven two eight , please ?
-Could you give us the key to the room ?
-We should leave on the fourteenth in the evening .
-We want a room for nine nights , please .
-Give us the keys to the room .
-I want a room with a telephone , a tv and a shower , please .
-I booked a double room .
-Could you prepare the bill for me , please ?
-Send our suitcases to room number nine two six , please .
-How much is a single room per week ?
-I want a room for a week , please .
-I want to book a room , please .
-I made a reservation .
-Could you make out the bill , please ?
-Send up my luggage to room number oh three five .
-The room is too cold .
-Could you prepare our bill for room number three four one for us , please ?
-I think that there is a problem .
-I want you to give us the keys to room number oh one oh , please .
-I have made a reservation for a single room for Dulce Gumbau .
-We booked a room .
-Could you give us the key to room number six , please ?
-Could you make out the bill for us , please ?
-How much is a single room per day ?
-I made a reservation for Roberto Vázquez .
-Do you have a room with a telephone and a tv available ?
-Send up our luggage to room number three four oh , please .
-Could you send the luggage to the car ?
-What is the price for a double room with full board , please ?
-I want a double room for today .
-We should leave today at twelve in the morning .
-Please send my travel bag to my room .
-Ask for a taxi .
-How much is a single room ?
-Can you give us the keys to my room ?
-I want you to wake me up tomorrow at half past two , please .
-Would you mind sending up my luggage to room number four nine oh , please ?
-Will you make out the bill for us , please ?
-Would you prepare the bill for me , please ?
-I have made a reservation .
-I want a quiet , single room until tomorrow .
-Could you send my suitcase to my room ?
-Would you mind waking me up at a quarter past three , please ?
-Can you give us the keys to room number nine two seven ?
-I have booked a single room with a tv .
-I would like you to send my bag to room number eight oh three .
-How much does a single room cost ?
-Is there a tv in the rooms ?
-I want you to send my luggage to room number seven three three , please .
-I have a reservation .
-Can you change my room ?
-Would you mind sending our suitcases to the taxi ?
-Can you wake us up at nine , please ?
-I have booked two rooms .
-Can you give me the key to the room ?
-Good bye !
-Can you give us the key to the room ?
-Can you wake me up at one ?
-Would you mind giving us the key to the room , please ?
-We have booked a quiet , single room .
-I want you to give us the key to room number nine one one , please .
-Can you give us the key to my room , please ?
-I am leaving .
-We should leave this afternoon .
-Would you mind putting my travel bags on the bus ?
-Could you give us the key to room number four seven one , please ?
-I want a quiet , single room until tomorrow , please .
-Could we book two rooms ?
-I have made a reservation for a room with a telephone and a shower for Mr Borillo .
-Could you ask for our taxi for us , please ?
-We have made a reservation .
-Can you prepare the bill for room number one one one for me , please ?
-Would you mind sending our luggage to our room , please ?
-I want you to send my luggage to room number six one four , please .
-Would you mind showing us a quiet room , please ?
-I have made a reservation for a room with a tv , a good view and a shower for Virginia Pérez .
-I think that there is a mistake in the bill .
-I am leaving on Thursday morning .
-We booked a quiet , single room for thirty days for Lidia Llorens .
-There is a lot of noise in the room .
-We have booked two quiet rooms .
-Would you mind showing us a room ?
-I want a room with a bathroom , a tv and a good view for Jorge Balaguer , please .
-Does it have a tv ?
-Could we see a quiet , single room ?
-I think that there was a mistake in the bill .
-It is very hot in the room .
-I should leave tomorrow at a quarter past two in the afternoon .
-Is there air conditioning in the rooms ?
-Can you wake us up at a quarter to one ?
-We booked a double room for twenty - nine days .
-Could we book two quiet , single rooms until the twenty - eighth ?
-Can you call a taxi for me , please ?
-I want you to wake me up at half past seven .
-Could you check the bill for me , please ?
-Do you have any quiet rooms available ?
-I think that there was a problem in the bill for room number nine six four .
-Give me the keys to the room , please .
-Could you call our taxi for room number two six eight for us , please ?
-Can you give us the key to the room ?
-Give me the key to room number four one three .
-Could you send our luggage to reception ?
-We would like a room , please .
-How much is a double room per week , please ?
-Could you wake us up tomorrow at half past nine , please ?
-We booked a single room for a night for Micaela Carpio .
-Please ask for our taxi for room number one two eight .
-How much does a double room with full board cost per day ?
-Wake me up at a quarter past one .
-I have booked a room with a good view and a telephone .
-Would you mind giving us the keys to the room , please ?
-I should leave today at a quarter past eight in the morning .
-Can you ask for a taxi for room number oh one nine for us , please ?
-I think that there is an error .
-We want a room .
-I should leave on Thursday October the twenty - eighth at eight o ' clock in the morning .
-Could you wake me up at half past ten , please ?
-I would like you to wake me up at one , please .
-We are leaving on the eleventh .
-How many ?
-I have a reservation for Mr Borrás .
-Can you send the suitcases to the bus ?
-There was a mistake in my bill .
-Could I see a room , please ?
-Please make out the bill for room number nine one four .
-Could you send up our luggage to room number four seven four ?
-Do you have any quiet rooms available ?
-I have booked a room until November the first for Mr Víctor Lobo .
-Are extras included ?
-We have booked a room until next Sunday for Mr Ángel Viciano .
-Could you give us the key to my room , please ?
-Can you make out the bill for room number two one two for me , please ?
-Could you send down my luggage to the room , please ?
-Could we book two single rooms for today ?
-Do you have a quiet , single room available ?
-Give me the key to room number three one oh .
-We have booked a room for today .
-There is too much noise in the room .
-We should leave on the first in the morning .
-I would like a quiet , single room , please .
-We want a quiet , double room .
-I want you to wake me up tomorrow at a quarter to twelve .
-Could you wake us up at a quarter past one , please ?
-We are leaving on the fifteenth at a quarter to nine in the morning .
-Are taxes included ?
-Could you call a taxi for me , please ?
-Could you send the travel bags down to reception ?
-Could you make out the bill for room number seven three two for us , please ?
-I have booked a room for eighteen days for Mr and Mrs Cabo .
-Are there any rooms with a bath available ?
-Can you make out the bill for us , please ?
-I booked a quiet , double room with a tv for tonight for Miss Marina Miralles .
-I think that there was a problem in the bill for room number seven eight six .
-Do you have any rooms with a telephone available ?
-I am leaving today in the afternoon .
-We should leave today at twelve in the morning .
-We should leave on Monday evening .
-I want a room with a tv , a shower and a telephone .
-I booked a room for today for Mr Rafael Soler .
-Could I book a double room ?
-We want a room until the twenty - eighth , please .
-Do you have a quiet , single room available ?
-We would like to move to a room with a tv and a bathroom , please .
-Do you have any quiet , single rooms available ?
-Can you change our room ?
-Are all taxes included ?
-Could you ask for a taxi for me , please ?
-I have booked a room for Mr Ortiz .
-We are leaving on Sunday at nine o ' clock in the morning .
-Would you call a taxi for us , please ?
-Thank you very much !
-Could you send down our suitcase to our room ?
-I have a reservation .
-Can you wake me up tomorrow at a quarter past one ?
-Could you make out the bill for room number four one nine for us , please ?
-There is a mistake .
-We have made a reservation .
-Please send my travel bags to the room .
-Do you have a quiet room available ?
-We have booked two rooms for a night .
-Could you check my bill for me , please ?
-I have a reservation for a quiet room .
-Could you give us the keys to room number five one five , please ?
-We want to book a room with air conditioning , please .
-I have made a reservation for a room for Teresa Martínez .
-Could you call my taxi for me , please ?
-I have booked a room with a shower , a tv and a telephone for Emilio Paches .
-Could you give us the key to room number five nine , please ?
-Is everything included ?
-I have made a reservation for a room for Mr Ramos .
-I think that there is a mistake in my bill for room number three three nine .
-Is there air conditioning in the room ?
-We should leave on the fourteenth at a quarter past one in the afternoon .
-I think that there is a mistake in the bill for room number seven one nine .
-Wake us up at a quarter to one , please .
-I think that there is a mistake in the bill .
-Could you put the luggage in the taxi ?
-We want to book a double room for tonight .
-Do you accept cash ?
-Could you put the luggage in the car ?
-I have booked a room for Sergio Orenga .
-Could you call a taxi for room number one nine oh for me , please ?
-We would like you to give us the key to the room , please .
-Is there a telephone in our room ?
-Can you explain the bill for us , please ?
-Can you give us the key to my room , please ?
-Is there a single room available ?
-We should leave .
-Can you give me the key to room number two one four , please ?
-Would you mind changing my room ?
-Can you put our luggage in the car ?
-I want a quiet room .
-Wake us up tomorrow at a quarter to six , please .
-I want a room with a tv , a telephone and hot water until the twenty - seventh .
-Please wake us up at one o ' clock .
-I have booked a quiet room for Tomás Fernández .
-Can you give us the key to room number two five nine , please ?
-Please wake us up at a quarter past one .
-I have booked a room .
-Please give us the keys to room number six four one .
-I have made a reservation for a room with a tv and a telephone for Miss Calleja .
-I booked a room with a tv , a good view and a telephone .
-I would like you to wake us up tomorrow at a quarter to six , please .
-I want to change rooms .
-We want to change rooms , please .
-Do you have any double rooms available ?
-I would like a room .
-We want a room .
-I would like you to give me the key to our room , please .
-I should leave on September the thirtieth .
-Is there a room available ?
-Would you prepare the bill for me , please ?
-I would like a room with a tv and a telephone , please .
-I have booked a room with a telephone .
-Wake us up tomorrow at six o ' clock , please .
-We have booked a quiet room .
-I have a reservation .
-Could I see a quiet , single room , please ?
-How much is a single room , please ?
-Send my bags to the taxi .
-We want to change rooms .
-Can you send the bags to the station ?
-Would you mind showing me another room ?
-I want to book a room , please .
-I have made a reservation .
-What is the price for a single room for nine days , please ?
-We should leave tomorrow at one .
-Please send my bags to room number oh two nine .
-Could you send my bags to the bus ?
-We have booked a room for a night for Mr Federico Cornelles .
-I made a reservation .
-I think that there has been a problem .
-Can you prepare the bill for room number five one one , please ?
-The room is very hot .
-Could I see a quiet , single room ?
-Could you call a taxi for me , please ?
-Wake me up tomorrow at five .
-Is room service included ?
-Could you give us the keys to the room , please ?
-I am leaving on Friday May the twenty - ninth at nine o ' clock in the evening .
-I want to book a quiet , single room for this week , please .
-How much does a double room with full board cost ?
-Could you wake us up at half past seven ?
-We booked a single room .
-Send our travel bags down to reception .
-We have booked a room until February the second .
-I would like to book a room for tonight , please .
-Would you mind giving me the key to my room ?
-Would you mind waking me up at a quarter past eight , please ?
-Could you wake us up at half past six ?
-We want you to give us the key to the room .
-I have a reservation for a quiet , single room for Enrique Díaz .
-Do you have a room with hot water and air conditioning available ?
-Does the room have a telephone and air conditioning ?
-We should leave on the twenty - seventh at nine o ' clock .
-Would you call a taxi for me , please ?
-Would you mind waking us up tomorrow at a quarter to nine ?
-We booked a room with air conditioning until the day after tomorrow .
-Can you ask for a taxi for us , please ?
-We have booked a double room .
-I would like you to send my bags to my room , please .
-I want a double room .
-I leave tomorrow at twelve o ' clock in the morning .
-Are there air conditioning and a minibar in the rooms ?
-We booked two rooms .
-Is there a safe in the rooms ?
-Do you have any quiet rooms available ?
-Can you give me the keys to room number one one three , please ?
-Please send up my suitcase to my room .
-I have booked a double room with air conditioning , a telephone and a tv .
-I want to book a room .
-Could I see another room ?
-Do you have any double rooms available ?
-Are all taxes included ?
-Please wake us up tomorrow at two .
-Could you give us the key to the room , please ?
-Put our suitcases in the car .
-How much does a single room cost ?
-I am leaving on Friday April the eleventh at a quarter past eight in the evening .
-I want you to give us the key to my room , please .
-How much does a double room cost per week ?
-I made a reservation for a quiet , double room with a bathroom and a view of the town for Arturo Mira .
-I have booked a room .
-Is there a tv in the room , please ?
-I think that there has been a problem in my bill for room number six five .
-How much does a single room cost , please ?
-Could you make out the bill for room number one four seven for me , please ?
-Is there hot water in the room , please ?
-Do you have a single room available ?
-How much does a single room cost for a day ?
-Can you call a taxi for room number three six for us , please ?
-How much is a double room per day ?
-We have made a reservation .
-I have booked a quiet , double room for Paloma Montero .
-We want to move to a room with a bathroom , please .
-Could you wake me up at eleven o ' clock , please ?
-Could you call a taxi for room number nine three six for us , please ?
-We are leaving on September the twenty - sixth at a quarter past seven .
-I want you to give me the key to the room , please .
-Could you ask for a taxi for me , please ?
-Would you accept cash ?
-I have a reservation for a room for Francisco Botella .
-Could you prepare the bill for me , please ?
-I would like to book a quiet , single room with a telephone until the day after tomorrow , please .
-Could you ask for a taxi for us , please ?
-Is there a tv in the rooms ?
-How much ?
-Okay !
-Could you prepare the bill for room number two six three for us , please ?
-Is there a telephone in the rooms ?
-What time is it ?
-My name is Jesús González .
-I have made a reservation for Teresa Ibá ~ nez .
-I should leave today at eleven o ' clock in the morning .
-I would like you to send down my luggage to room number one two .
-Where ?
-Could you ask for a taxi for room number six one four for us , please ?
-Would you mind waking me up tomorrow at half past four , please ?
-We would like to move to a quieter room , please .
-I think that a mistake has been made in the bill .
-Is the phone bill included ?
-A room for Virginia Álvarez , please .
-We should leave today in the evening .
-It is very hot in the room .
-Could you prepare my bill for me , please ?
-Could I see a room , please ?
-We have booked a double room .
-Would you accept credit cards ?
-I should leave on Thursday the sixteenth at half past nine in the evening .
-Please send up my suitcase to my room .
-I want a single room .
-Are there any quiet , double rooms available ?
-We want you to send down our suitcases to the room .
-Do you have a room available ?
-We are leaving on Saturday .
-I have made a reservation for a room with a tv and a telephone for Inmaculada Colomer .
-Send up my suitcases to room number two eight , please .
-Would you mind waking us up at half past four , please ?
-There is an error in the bill for room number seven one nine .
-Would you ask for our taxi for room number two three one for us , please ?
-Could you send up our travel bag to the room , please ?
-Would you mind sending our luggage to our room ?
-Can you move me to a warmer room ?
-We have booked a room .
-Would you mind us taking a look at a room ?
-How many ?
-Give me the keys to our room .
-Could you call a taxi for me , please ?
-I would like you to send my suitcase to room number seven oh three , please .
-We have made a reservation .
-Can you move me to a warmer room ?
-Good bye .
-Please send my suitcase to the room .
-Could you send my luggage to room number seven two three , please ?
-Is there a double room available ?
-Please give us the key to the room .
-I think that there has been a mistake in the bill .
-Wake us up tomorrow at one o ' clock , please .
-When ?
-My name is Emilio Navarro .
-Would you mind sending up our bags to our room , please ?
-There is an error in our bill .
-Is there a telephone in the room ?
-I have a reservation for a room with a telephone , a tv and a bath for Isabel Cabedo .
-Could you wake me up tomorrow at twelve , please ?
-Could we see another room , please ?
-Could you make out the bill for me , please ?
-Could I book a room ?
-I should leave tomorrow at six .
-We want you to give us the key to room number nine two one , please .
-Send our bags to our room .
-Can you move us to a quieter room ?
-I think that there is a mistake in my bill .
-I should leave on September the eighth .
-I have booked a double room for Mrs Inmaculada Colomer .
-Could we book two rooms ?
-Send down our luggage to room number four one eight .
-I should leave on the thirteenth at a quarter past four .
-Do you have a single room available ?
-We booked two rooms .
-I think that there is an error .
-Would you mind moving us to a quieter room ?
-Give us the keys to room number nine nine two , please .
-I want a room , please .
-I have made a reservation for a room with a telephone , a view of the mountain , a bath and a tv for Ricardo Vilanova .
-I want you to send up my luggage to my room .
-I have made a reservation .
-Could you wake us up tomorrow at four ?
-I think that there was an error in the bill .
-I should leave tomorrow .
-Would you mind giving us the key to the room ?
-I would like a room until next Tuesday .
-Where ?
-Would you mind giving me the key to room number five two two , please ?
-I want to book a room .
-Send my luggage to the station .
-Could you carry the bags ?
-Could you give us the key to my room ?
-We would like a double room with a shower for a day .
-Do you have a double room available ?
-There has been a mistake in the bill .
-I would like to book a room for seven days .
-We have booked a single room with a tv , a telephone and a bath until tomorrow for José Herrero .
-Are extras included in the bill ?
-We have booked a double room .
-The room is very cold .
-I have booked a double room for today .
-Good morning !
-Can you send the travel bags to the car ?
-Could I see a quiet , double room with a tv , please ?
-Are all taxes included in the bill ?
-There is a mistake in the bill .
-Would you mind putting my luggage on the bus ?
-I leave on March the twenty - seventh at half past two in the afternoon .
-I booked a quiet , double room with a bath , a good view and a tv for Andrés Sanz .
-Could you call a taxi for us , please ?
-Should we sign a registration form ?
-I have made a reservation for a room for Julia Vilanova .
-Is there a quiet room available ?
-My name is Gregorio Pitarch .
-Pardon ?
-Could you call my taxi for me , please ?
-I think that there is an error in the bill .
-Do you have a room with a bath , air conditioning and a tv available ?
-Would you call a taxi for us , please ?
-Not at all .
-We booked a room for Juan Rubio .
-Could I book a room with air conditioning for this week ?
-We are leaving today at a quarter past ten in the evening .
-It is too cold in the room .
-I have a reservation .
-We are leaving tomorrow at a quarter to three in the afternoon .
-We want you to wake us up at eleven , please .
-I would like you to give me the keys to room number six three eight .
-Can you prepare the bill for us , please ?
-We booked a single room .
-We want to book a room , please .
-Would you mind sending my luggage to reception ?
-Could you call a taxi for me , please ?
-Does the room have air conditioning ?
-I should leave tomorrow at a quarter past ten in the evening .
-I have booked a single room .
-Do you have a single room available ?
-We should leave on the fourth .
-Can I pay the bill in cash ?
-Could you give us the keys to our room ?
-I want a quiet , single room for today , please .
-Should we sign the registration form ?
-We have made a reservation .
-Would you mind showing me a room with a bath , please ?
-Wake me up tomorrow at a quarter to three , please .
-I would like a room with a good view of the mountain and a shower , please .
-I have booked a room .
-Should we fill in the registration form ?
-Can you wake me up at two o ' clock , please ?
-Can you wake us up at ten , please ?
diff --git a/samples/data/smt.cfg b/samples/data/smt.cfg
deleted file mode 100644
index b438a898f..000000000
--- a/samples/data/smt.cfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# Translation model prefix
--tm tm/src_trg
-
-# Language model
--lm lm/trg.lm
-
-# W parameter (maximum number of translation options to be considered per each source phrase)
--W 10
-
-# S parameter (maximum number of hypotheses that can be stored in each stack)
--S 10
-
-# A parameter (Maximum length in words of the source phrases to be translated)
--A 7
-
-# Degree of non-monotonicity
--nomon 0
-
-# Heuristic function used
--h 6
-
-# Best-first search flag
--be
-
-# Translation model weights
--tmw 0 0.5 1 1 1 1 0 1
-
-# Set online learning parameters (ol_alg, lr_policy, l_stepsize, em_iters, e_par, r_par)
--olp 0 0 1 5 1 0
diff --git a/samples/data/sp-hc.xml b/samples/data/sp-hc.xml
deleted file mode 100644
index c1e448e2a..000000000
--- a/samples/data/sp-hc.xml
+++ /dev/null
@@ -1,282 +0,0 @@
-
-
-
-
- Spanish
-
-
- Noun
-
-
- Verb
-
-
- Article
-
-
-
- Spanish Orthography
-
-
-
- a
-
-
-
-
- e
-
-
-
-
- i
-
-
-
-
- o
-
-
-
-
- u
-
-
-
-
- á
-
-
-
-
- é
-
-
-
-
- í
-
-
-
-
- ó
-
-
-
-
- y
-
-
-
-
-
- b
-
-
-
-
- c
-
-
-
-
- d
-
-
-
-
- f
-
-
-
-
- g
-
-
-
-
- h
-
-
-
-
- j
-
-
-
-
- k
-
-
-
-
- l
-
-
-
-
- m
-
-
-
-
- n
-
-
-
-
- p
-
-
-
-
- q
-
-
-
-
- r
-
-
-
-
- s
-
-
-
-
- t
-
-
-
-
- v
-
-
-
-
- x
-
-
-
-
- z
-
-
-
-
-
-
- +
-
-
-
-
-
-
- Any
-
-
-
-
- morphophonemic
-
-
- Preterite 3SG
-
-
-
-
-
-
-
-
-
-
-
-
- +ó
-
-
-
-
- rule1
- PAST
-
-
- Plural
-
-
-
-
-
-
-
-
-
-
-
-
- +s
-
-
-
-
- rule2
- PLURAL
-
-
-
-
-
-
- dios
-
-
- le1
- god
-
-
-
-
- cre
-
-
- le2
- create
-
-
-
-
- mundo
-
-
- le3
- world
-
-
-
-
- el
-
-
- le4
- the
-
-
-
-
- cuenta
-
-
- le5
- bill
-
-
-
-
- surface
-
-
-
-
\ No newline at end of file
diff --git a/samples/data/sp.txt b/samples/data/sp.txt
deleted file mode 100644
index f50ee4410..000000000
--- a/samples/data/sp.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-¿Le importaría darnos las llaves de la habitación, por favor?
-He hecho la reserva de una habitación tranquila doble con teléfono y televisión a nombre de Rosario Cabedo.
-¿Le importaría cambiarme a otra habitación más tranquila?
-Por favor, tengo reservada una habitación.
-Me parece que existe un problema.
-¿Tiene habitaciones libres con televisión, aire acondicionado y caja fuerte?
-¿Le importaría mostrarnos una habitación con televisión?
-¿Tiene teléfono?
-Voy a marcharme el dos a las ocho de la noche.
-¿Cuánto cuesta una habitación individual por semana?
-¿Acepta dinero en efectivo?
-Mi nombre es Victoria Piquer.
-¿Les importaría subirme los bultos a la habitación tres diez?
-¿Aceptan dinero en efectivo?
-Hay una equivocación en mi cuenta.
-Por favor, me detalla la cuenta.
-Deseo reservar una habitación doble para una noche.
-¿Tiene teléfono?
-¿Nos podrían despertar a las cinco en punto, por favor?
-Me tengo que ir el martes siete de marzo por la mañana.
-Hemos hecho una reserva, por favor.
-Por favor, ¿nos podrían despertar a las doce?
-¿Nos pueden llevar nuestro equipaje al taxi?
-Tengo una reserva a nombre de Julia Calatayud.
-Por favor, tengo reservada una habitación.
-Por favor, una habitación con teléfono y vistas a nombre de la señora Ramírez.
-Por favor, ¿pueden subirnos ustedes las bolsas a la habitación?
-He reservado una habitación a nombre del señor Roda.
-¿Cuánto cuesta una habitación doble por día con media pensión?
-¿Están apuntados en la cuenta todos los gastos?
-Pienso que existe una equivocación.
-Deseamos que suba nuestra maleta a la habitación, por favor.
-Desearía una habitación.
-Prepare la cuenta.
-Quisiera una habitación doble y tranquila, por favor.
-Por favor, haga la cuenta.
-Queremos que nos lleven nuestro equipaje a nuestra habitación, por favor.
-¿Nos podrían despertar a las siete, por favor?
-¿Podríamos ver alguna habitación?
-¿Podría despertarnos mañana a las nueve menos cuarto, por favor?
-Súbame las maletas al autobús.
-Quisiera una habitación hasta el día veinte, por favor.
-¿Podríamos reservar dos habitaciones?
-¿Hay alguna habitación tranquila libre?
-Tengo reservada una habitación tranquila con televisión y una buena vista de la montaña a nombre de Rosario Cantero.
-¿Tiene libre una habitación doble?
-Hice una reserva, por favor.
-¿Está apuntado el recibo del teléfono?
-¿Puede darnos usted la llave de la habitación número dos nueve cuatro, por favor?
-¿Podría llamar a un taxi?
-La habitación es muy fría.
-He hecho una reserva.
-¿Le importaría mostrarnos otra habitación?
-Quisiéramos que subiese nuestras maletas a nuestra habitación.
-¿Podría cambiarnos de habitación?
-¿Me quieren llamar a un taxi?
-La habitación es demasiado calurosa.
-¿Le importaría subirme las bolsas de viaje a la habitación?
-Desearía reservar una habitación con aire acondicionado para veinte días, por favor.
-Por favor, ¿podría ver alguna habitación tranquila?
-Despiérteme a las dos y cuarto.
-¿Podríamos ver una habitación, por favor?
-Tengo reservada una habitación hasta el próximo viernes, por favor.
-Voy a marcharme el viernes.
-Déme la llave de la habitación número uno cuatro nueve, por favor.
-Me voy a ir hoy mismo a las ocho de la mañana.
-Tengo hecha la reserva de una habitación con buena vista de la montaña y cuarto de baño a nombre de Pilar Jiménez.
-Por favor, repase la factura.
-¿Tiene alguna habitación libre con televisión, aire acondicionado y servicio de bar?
-¿Me podrían despertar mañana a las dos en punto?
-Hemos reservado una habitación doble hasta pasado mañana.
-Por favor, ¿me podría llamar a un taxi?
-Por favor, quisiera que me despertara mañana a las cuatro.
-Quiero una habitación para una noche, por favor.
-¿Podría pedirnos un taxi?, por favor.
-Deseo reservar una habitación individual para veinticinco noches.
-Tengo una reserva.
-¿A qué día estamos?
-Por favor, haga la cuenta.
-Tengo reservada una habitación individual.
-Por favor, reservé una habitación a nombre del señor y la señora Tena.
-Hemos hecho una reserva, por favor.
-¿Está todo?
-Por favor, nos llama a un taxi.
-Lleve nuestro equipaje.
-¿Les importaría darnos la llave de la habitación?
-Hice la reserva de una habitación doble a nombre de Miguel Ramírez.
-Por favor, hemos reservado una habitación tranquila.
-Por favor, ¿me puede dar la llave de la habitación?
-¿Está apuntado el recibo del teléfono?
-Por favor, hice una reserva.
-Quiero una habitación con aire acondicionado para hoy.
-¿Le importaría cambiarme de habitación?
-Tenemos reservadas dos habitaciones con teléfono, por favor.
-Por favor, reservé una habitación doble con teléfono para hoy.
-¿Hay aire acondicionado en mi habitación, por favor?
-He reservado una habitación.
-¿Le importaría llevarnos las bolsas de viaje a la estación?
-He reservado una habitación doble tranquila a nombre de Enrique Velasco.
-¿Podría bajar mis bolsas?
-Por favor, ¿le importaría darnos la llave de nuestra habitación?
-Por favor, quisiéramos una habitación doble para una noche.
-Por favor, quisiera cambiarme a otra habitación con televisión.
-¿Tienen libre alguna habitación tranquila?
-He reservado una habitación con teléfono.
-Por favor, lléveme los bultos a mi habitación.
-¿Está apuntado el recibo del teléfono?
-Lleve mi equipaje a la estación.
-Por favor, ¿querrían llamarnos a nuestro taxi?
-¿Cuánto cuesta una habitación individual con media pensión?
-La habitación es demasiado fría.
-¿Me podrían llevar el equipaje al autobús?
-Hicimos una reserva, por favor.
-¿Podrían hacer nuestra cuenta?, por favor.
-He reservado una habitación tranquila doble a nombre de Silvia Quereda.
-Me llamo Jesús Rivera.
-Tengo hecha una reserva a nombre de Sergio Moliner.
-¿Tiene una habitación libre?
-Por favor, pídame un taxi.
-Prepárenos nuestra cuenta de la habitación seiscientos nueve.
-¿Les importaría bajar nuestro equipaje a la habitación?
-¿Me podría pedir un taxi?
-Me gustaría reservar una habitación hasta el veinticinco.
-Por favor, quiero reservar una habitación doble con teléfono.
-¿Podrían despertarme a las dos?
-Por favor, ¿pueden ustedes despertarnos a las once?
-¿Tiene alguna habitación libre?
-La habitación es demasiado fría.
-¿Podría llamarme a un taxi?, por favor.
-¿Cuánto vale una habitación individual para un día con pensión completa?
-Por favor, ¿podría despertarme a la una en punto?
-Tengo la reserva de una habitación tranquila doble con televisión y vistas.
-¿Podrían llevarnos nuestras maletas a la número ocho diecinueve, por favor?
-Perdone.
-Por favor, tengo reservada una habitación doble tranquila con tele y teléfono.
-¿Podrían ustedes despertarme a las once menos cuarto?
-Me he de ir esta tarde.
-Se ha producido una equivocación en la cuenta.
-Nos gustaría cambiarnos de habitación, por favor.
-Me parece que se produjo una equivocación en la cuenta de la habitación ocho siete cuatro.
-¿Cuánto vale una habitación individual incluyendo desayuno, por favor?
-Por favor, ¿me podría usted despertar a las tres y media?
-La habitación es muy fría.
-¿Le importaría darme la llave de la habitación?
-He reservado una habitación.
-Me gustaría cambiar mi habitación.
-Mi nombre es Sergio Iborra.
-Por favor, tengo hecha una reserva a nombre del señor Miralles.
-Tengo una reserva a nombre del señor Ortiz.
-Tenemos que marcharnos el sábado siete de marzo.
-Por favor, ¿nos puede despertar a las diez y media?
-Querría que nos bajasen el equipaje a nuestra habitación, por favor.
-¿Cuánto vale una habitación individual para una noche?
-Por favor, ¿cuánto vale por día una habitación doble?
-Quisiera una habitación doble.
-Quiero que me dé la llave de la número trescientos treinta y tres.
-Por favor, reservé una habitación.
-¿Está incluido el desayuno?
-La habitación es muy cara.
-Nos vamos a ir el día trece de septiembre a las ocho menos cuarto de la mañana.
-Por favor, ¿me puede despertar a las once y media?
-¿Le importaría llevarme mis bolsas al autobús?
-Vamos a marcharnos mañana a las cuatro.
-Pienso que se ha producido un error en la cuenta.
-¿Le importaría que echara un vistazo a alguna habitación?
-Por favor, quiero que nos bajen los bultos a la habitación.
-¿Me podrían dar las llaves de la habitación seiscientos trece, por favor?
-Por favor, ¿cuánto cuesta una habitación doble incluyendo servicio de habitaciones?
-Por favor, ¿me pueden detallar la cuenta de la habitación cero catorce?
-La habitación está bien.
-Hice una reserva.
-He hecho la reserva de una habitación doble tranquila con teléfono y ducha.
-Hemos de marcharnos mañana por la noche.
-¿Hay televisión y aire acondicionado en la habitación?
-Despiérteme mañana a las diez y media, por favor.
-Por favor, denme la llave de la habitación número nueve uno cero.
-Hemos reservado una habitación doble con baño para hoy.
-¿Tiene aire acondicionado, teléfono y televisión?
-Se han equivocado en nuestra cuenta.
-¿Podría ver alguna habitación individual con aire acondicionado?
-¿Cuánto vale una habitación doble?
-¿Podría ver alguna habitación doble, por favor?
-¿Hay alguna habitación tranquila libre?
-Hice la reserva de una habitación con tele y teléfono a nombre de Roberto Arnau.
-He reservado una habitación con televisión y baño a nombre de Gerardo Ródenas.
-Por favor, desearía una habitación.
-Tenemos reservada una habitación.
-Nos vamos a ir el jueves treinta de septiembre a las cuatro y media.
-¿Podría ver una habitación doble con televisión?
-¿Está todo?
-¿Podrían ustedes darnos la llave de la habitación, por favor?
-¿Pueden darme la llave de la habitación número setecientos setenta y tres?
-¿Querrían hacernos la factura?, por favor.
-Tenemos que irnos el jueves nueve de abril por la tarde.
-Me voy a marchar hoy a las seis de la mañana.
-Reservé una habitación doble y tranquila, por favor.
-Por favor, reservé una habitación tranquila a nombre de Amelia Peinado.
-Por favor, ¿me querría pedir un taxi para la habitación nueve ocho uno?
-¿Cuánto cuesta una habitación doble, por favor?
-Por favor, ¿querría pedirnos un taxi?
-¿Podría detallar nuestra cuenta de la habitación nueve cuatro uno?
-¿Está todo?
-Por favor, ¿me pueden preparar mi cuenta?
-He hecho la reserva de una habitación tranquila doble con vistas, ducha y teléfono a nombre de Carmelo Peris.
-Por favor, ¿me podría dar usted la llave de la habitación?
-Por favor, ¿podríamos ver otra habitación?
-¿Nos pueden llevar las bolsas de viaje?
-Por favor, desearía cambiarme a otra habitación con menos ruido.
-¿Podrían despertarnos mañana a las nueve y cuarto?
-Por favor, quisiera reservar una habitación.
-¿Podríamos reservar dos habitaciones dobles para quince días?
-¡No importa!
-¿Podríamos reservar dos habitaciones?
-¿Tienen alguna habitación doble libre?
-Por favor, prepare la factura.
-Por favor, desearía una habitación.
-¿Está incluido el servicio de habitaciones?
-Nos iremos esta noche.
-Suban nuestro equipaje a nuestra habitación.
-Me llamo Federico Viciano.
-He reservado una habitación tranquila.
-Por favor, tengo una reserva a nombre de la señora Guijarro.
-¿Les importaría despertarnos a la una y media?
-¿Tiene habitaciones individuales y tranquilas libres?
-Nos tenemos que ir mañana.
-Tengo reservada una habitación.
-Por favor, hágame la cuenta.
-¿Podría ver una habitación doble y tranquila, por favor?
-Se ha equivocado en la factura.
-Por favor, he hecho la reserva de una habitación con televisión, teléfono y vistas al mar a nombre de Asunción Espinosa.
-¿Tiene aire acondicionado y agua caliente la habitación?
-Quiero reservar una habitación hasta el próximo sábado.
-¿Nos podrían llamar a un taxi para la habitación tres trece?
-Quiero una habitación.
-¿Pueden despertarme a la una menos cuarto?
-Por favor, una habitación.
-Me parece que se produjo un error en la cuenta.
-Desearía una habitación para cinco noches.
-Hemos reservado una habitación individual con teléfono a nombre del señor y la señora Santos, por favor.
-¿Están incluidos todos los impuestos?
-¿Está incluida la cuenta del teléfono?
-Por favor, lleven nuestra bolsa de viaje a la habitación quinientos veintisiete.
-He reservado una habitación tranquila.
-Pida un taxi.
-¿Nos pueden dar ustedes la llave de la habitación?
-¿Nos podría llevar las bolsas al coche?
-Tengo hecha una reserva a nombre de Susana Padilla.
-Por favor, ¿pueden bajarnos los bultos a la habitación?
-¿Le importaría bajar nuestro equipaje a la habitación, por favor?
-Por favor, ¿cuánto cuesta una habitación doble por semana?
-Despiértenme a la una y media, por favor.
-Nos hemos de marchar mañana a las seis.
-Por favor, tengo hecha una reserva.
-La habitación es demasiado ruidosa.
-Deseo que nos dé las llaves de la habitación siete dieciséis, por favor.
-¿Está todo apuntado?
-Tengo reservada una habitación doble, por favor.
-Por favor, me gustaría reservar una habitación individual hasta el veintiuno.
-Por favor, ¿me puede usted despertar mañana a las tres menos cuarto?
-Despiértenos a la una, por favor.
-Me tengo que ir el lunes dos de julio por la tarde.
-Por favor, ¿tengo que rellenar alguna hoja de registro?
-¿Podría ver alguna habitación?
-Pienso que se produjo un error en la cuenta.
-La habitación es muy cara.
-Por favor, desearíamos que nos diera las llaves de la habitación cuatro tres.
-¿Nos podría explicar la cuenta?, por favor.
-Por favor, ¿nos podrían dar ustedes las llaves de la doscientos veintiséis?
-¿Cuánto cuesta una habitación individual, por favor?
-¿Podríamos reservar dos habitaciones para esta noche?
-¿Nos podría despertar a la una, por favor?
-Me parece que existe un problema en mi cuenta de la habitación nueve treinta y tres.
-¡No!
-Mi nombre es Marina Varela.
-Por favor, deseo cambiarme de habitación.
-Por favor, las llaves de la habitación número ocho veinte.
-¿Están apuntados en el recibo los gastos?
-Me voy hoy.
-¿Les importaría darnos las llaves de la habitación?
-Por favor, ¿tienen aire acondicionado las habitaciones?
-¿Pueden subir el equipaje al coche?
-¿Les importaría darnos la llave de la habitación?
-¿Podría bajar mis maletas a mi habitación?
-Deseo una habitación que tenga teléfono, vistas, televisión y baño a nombre de Marina Sáez.
-Por favor, tengo la reserva de una habitación tranquila doble con vistas a la ciudad y baño a nombre de Ricardo Salsas.
-Por favor, ¿tenemos que firmar la hoja de registro?
-¿Nos podrían despertar mañana a las seis y media?
-He de marcharme el viernes diecinueve de abril a las nueve de la noche.
-Pienso que se ha equivocado en la cuenta.
-Por favor, me gustaría cambiarme de habitación.
-¿Está apuntado el teléfono?
-Por favor, ¿me puede usted despertar a las dos menos cuarto?
-Vamos a marcharnos el día siete a las once y media de la noche.
-Desearía que nos despertasen a las tres y media, por favor.
-Hemos de irnos mañana a las nueve.
-¿Hay servicio de bar en la habitación?
-Reservamos una habitación hasta el próximo jueves, por favor.
-Por favor, ¿le importaría mostrarme una habitación doble con televisión?
-Creo que hay un error en la factura de la habitación ocho tres ocho.
-Por favor, háganos la cuenta de la habitación novecientos uno.
-Quisiera reservar una habitación individual y tranquila hasta el uno de noviembre, por favor.
-Por favor, he reservado una habitación tranquila individual con vistas a la montaña y televisión a nombre de la señora Gómez.
-Por favor, he hecho una reserva.
-¿Podría reservar una habitación?
-Vamos a marcharnos el lunes diecinueve de abril por la mañana.
-Tengo reservada una habitación tranquila.
-Por favor, me hace mi cuenta.
-Tengo que irme hoy a las once y media de la mañana.
-¿Podrían preparar la cuenta?, por favor.
-¿Tienen libre alguna habitación?
-Creo que se ha equivocado en nuestra cuenta de la habitación quinientos quince.
-Por favor, quisiera reservar una habitación.
-¿Tienen una habitación libre?
-¿Están anotados en el recibo los extras?
-Tengo reservada una habitación.
-Hemos hecho una reserva.
-Por favor, ¿pueden pedirme mi taxi para la habitación setecientos dieciséis?
-¿Puede despertarme a las cuatro y cuarto?
-¿Están incluidos en la factura todos los impuestos?
-¿Está incluido el desayuno?
-Reservé una habitación a nombre del señor Gerardo Paches.
-He reservado una habitación individual a nombre del señor Fernández.
-Me iré el dieciocho a las siete menos cuarto de la mañana.
-Por favor, ¿nos podría dar la llave de la seis cuatro siete?
-¿Podríamos ver una habitación, por favor?
-¿Pueden llevarnos nuestro equipaje al autobús?
-Me marcharé el viernes uno a las tres.
-¿Pueden ustedes bajarme mis bultos a la habitación?
-¿Cuánto vale una habitación doble por día, por favor?
-En la habitación hay mucho ruido.
-¿Está incluida la cuenta del teléfono?
-La habitación está bien.
-Por favor, ¿hay agua caliente en las habitaciones?
-¿Le importaría cambiarme de habitación?
-¿Me sube mis bolsas de viaje al taxi?
-Por favor, querríamos que nos despertaran a las ocho menos cuarto.
-En la habitación hace mucho calor.
-Queremos cambiar la habitación.
-Súbame mis bolsas al autobús.
-¿Tiene aire acondicionado mi habitación?
-Despiérteme a las seis.
-Voy a irme mañana a las tres menos cuarto de la tarde.
-¿Hay habitaciones libres?
-¿Podría cambiarnos a otra habitación con teléfono y televisión?
-No importa.
-¿Hay teléfono y televisión en la habitación?
-He de marcharme hoy.
-Vamos a marcharnos esta mañana.
-Por favor, ¿le importaría mostrarnos una habitación con teléfono y televisión?
-Lleve el equipaje.
-¿Hay aire acondicionado en las habitaciones?
-¿Podría subir mis bultos a mi habitación?
-No estoy de acuerdo.
-He reservado una habitación individual, por favor.
-Quisiera reservar una habitación para un día, por favor.
-¿Nos podría dar usted la llave de mi habitación?
-¿Me puede dar la llave de la habitación, por favor?
-Por favor, he hecho una reserva.
-Me tengo que marchar mañana por la mañana.
-¿Tengo que rellenar la hoja de registro, por favor?
-¿Haría el favor de cambiarme de habitación?
-Por favor, ¿puede darme las llaves de la cero tres cero?
-¿Nos puede bajar nuestras bolsas de viaje a la habitación número cuatro veintitrés, por favor?
-Deseo reservar una habitación individual y tranquila para una semana, por favor.
-Por favor, explique la cuenta.
-Por favor, ¿podrían pedirnos un taxi para la habitación siete veintinueve?
-Por favor, tengo reservada una habitación para esta noche a nombre de Manuela Valls.
-Por favor, querría que nos diera la llave de la habitación uno uno.
-Por favor, ¿pueden bajar nuestros bultos a la habitación número cuatrocientos catorce?
-Me gustaría cambiarme de habitación, por favor.
-Por favor, hemos reservado una habitación individual y tranquila.
-Por favor, suban mi bolsa de viaje a la habitación seiscientos treinta y uno.
-¿Puede pedir un taxi?
-Por favor, ¿puede pedir un taxi?
-Por favor, ¿podrían hacer la cuenta de la habitación seiscientos veintiséis?
-Dénos la llave de la número ocho catorce.
-Quiero que me suba los bultos a la habitación, por favor.
-Déme la llave de la habitación seis dieciocho, por favor.
-¿Nos podrían dar la llave de la habitación número seis cuatro cero?
-¿Podríamos ver una habitación tranquila, por favor?
-¡Sí!
-Llévenos nuestros bultos a la número ochocientos veintiséis, por favor.
-¿Nos podría bajar el equipaje a la habitación número tres seis dos?
-Por favor, he reservado una habitación tranquila hasta mañana a nombre de Gregorio Cabedo.
-Nos marchamos hoy a las seis y media de la tarde.
-Por favor, ¿le importaría llevar nuestras bolsas de viaje a la habitación número dos tres cinco?
-Hicimos una reserva.
-Por favor, ¿me podrían detallar la cuenta?
-Me gustaría cambiarme a otra habitación con servicio de bar y aire acondicionado, por favor.
-Quisiéramos que nos despertara a las once y cuarto.
-Quisiéramos que nos despertase a las nueve en punto.
-Reservé una habitación, por favor.
-¿Podría cambiarnos a otra habitación con televisión?
-Tengo que irme mañana a las diez en punto de la mañana.
-¿Pueden explicar la cuenta?
-Por favor, suba mi equipaje a mi habitación.
-¿Nos pueden llevar nuestro equipaje al autobús?
-¿Tenemos que firmar la hoja de registro?
-Desearía que me despertara mañana a las diez, por favor.
-Reservamos una habitación doble, por favor.
-Vamos a marcharnos mañana a las cinco en punto de la tarde.
-¿Hay aire acondicionado en la habitación?
-Por favor, ¿le importaría darme la llave de la habitación trescientos treinta y tres?
-Me voy a ir mañana a las cuatro y media de la tarde.
-Nos tenemos que ir el lunes cuatro de abril a las doce y media de la mañana.
-Por favor, ¿qué precio tiene una habitación doble por día con media pensión?
-En la habitación hace demasiado calor.
-¿Cuánto cuesta una habitación doble?
-Por favor, ¿le importaría mostrarnos una habitación con teléfono?
-¿Cuánto cuesta una habitación individual por día?
-He de marcharme.
-¿Me lleva mis bolsas?
-Por favor, ¿cuánto cuesta una habitación doble para dieciocho días?
-¿Nos puede despertar mañana a las cinco en punto?
-¿Están incluidos en el recibo todos los gastos?
-Tengo hecha la reserva de una habitación doble con baño y teléfono a nombre de Paloma Betoret.
-Querría que me diera las llaves de la habitación dos treinta y nueve.
-¿Podrían repasarme la cuenta?
-Quiero que suba mi equipaje a mi habitación, por favor.
-¿Nos pueden dar la llave de la habitación número uno cuatro cero, por favor?
-¿Les importaría darme las llaves de la habitación, por favor?
-¿Nos podría usted despertar a las seis menos cuarto?
-Por favor, ¿cuánto vale una habitación individual?
-¿Podríamos reservar dos habitaciones tranquilas para esta noche?
-Por favor, tengo reservada una habitación individual y tranquila.
-La habitación es muy cara.
-Me parece que se produjo un problema en la cuenta.
-Quiero una habitación doble para hoy.
-Quiero una habitación individual.
-Reservé una habitación a nombre de Alicia Morales, por favor.
-Conforme.
-Por favor, déme la llave de nuestra habitación.
-Por favor, quisiéramos una habitación.
-Me gustaría reservar dos habitaciones dobles, por favor.
-Me voy a ir mañana a las diez menos cuarto de la noche.
-Quisiera cambiarme de habitación.
-La habitación es muy calurosa.
-Hice la reserva de una habitación tranquila individual con buena vista del mar, teléfono y televisión.
-¿Le importaría cambiarnos de habitación?
-Tenemos reservada una habitación individual hasta el diecisiete.
-Por favor, tengo una reserva.
-¿Aceptan cheques de viaje?
-Tenemos reservada una habitación, por favor.
-¿Cuánto?
-Por favor, ¿cuánto vale por día una habitación individual?
-¿Tienen libre una habitación doble y tranquila?
-Por favor, ¿nos quiere preparar la factura?
-Por favor, ¿nos puede despertar a las cuatro?
-Por favor, hemos reservado una habitación doble.
-La habitación está bien.
-Por favor, ¿podría repasar la cuenta?
-Por favor, llame a mi taxi.
-Quisiera que nos diesen la llave de mi habitación.
-Quiero que nos despierte a las nueve y media.
-Por favor, desearía una habitación tranquila doble que tenga teléfono, buena vista de la montaña, baño y televisión a nombre de la señora Berrueco.
-Pídame mi taxi, por favor.
-Por favor, pídame un taxi.
-Me parece que se ha producido un error en la cuenta.
-La habitación es demasiado fría.
-Por favor, llámeme a mi taxi.
-¿Cuánto cuesta por semana una habitación individual?
-¿Le importaría que echara un vistazo a alguna habitación doble?
-La habitación está bien.
-Llévennos el equipaje a nuestra habitación.
-¿Podría llevarme mis maletas?
-Deseo una habitación para veintinueve días.
-¿Tengo que rellenar la hoja de registro?
-Deseo una habitación.
-Quisiéramos una habitación individual hasta el próximo viernes.
-Dennos la llave de la habitación número siete cero cinco.
-¿Podría pedir un taxi?
-Hemos de marcharnos el sábado catorce de mayo.
-Prepare nuestra cuenta.
-Me tengo que marchar mañana a las cinco menos cuarto de la tarde.
-Quiero una habitación.
-Existe una equivocación en la cuenta.
-¿Tienen libre una habitación individual?
-¿Hay una habitación libre?
-Tenemos reservada una habitación individual a nombre de Luis Llopis.
-Deseamos una habitación doble con ducha y aire acondicionado.
-Por favor, tenenos hecha una reserva.
-¿Está incluido el recibo del teléfono?
-Por favor, déme la llave de la habitación.
-Creo que se ha equivocado en nuestra cuenta.
-Tengo la reserva de una habitación tranquila doble con televisión, cuarto de baño y una buena vista del mar.
-¿Les importaría despertarme a las diez y media, por favor?
-Por favor, haga la cuenta.
-Tengo reservada una habitación a nombre de Jesús Barberá.
-Quisiera una habitación para un día, por favor.
-Por favor, ¿podría llamarme a un taxi?
-Por favor, deseo que lleve mis bultos a mi habitación.
-¿Hay televisión en mi habitación?
-Por favor, reservé una habitación tranquila para veintiséis noches a nombre de Celestino Puig.
-Me voy el dieciséis de septiembre a las doce menos cuarto de la mañana.
-¿Cuánto cuesta por semana una habitación individual incluyendo desayuno?
-Por favor, suban nuestra bolsa de viaje a la habitación número uno setenta y cuatro.
-Por favor, prepare la cuenta.
-Me he de ir el tres a las diez y cuarto de la mañana.
-¿Tienen libre alguna habitación?
-Por favor, tengo reservada una habitación tranquila con cuarto de baño, teléfono y televisión.
-Despiértennos a las seis y cuarto.
-¿Podríamos ver alguna habitación doble?
-¿Podrían ustedes despertarnos a las seis y media?
-Me parece que se han equivocado en la cuenta.
-Quisiera que me diese la llave de la habitación, por favor.
-Por favor, pida un taxi.
-¿Tiene habitaciones libres?
-Hemos reservado una habitación para diez semanas a nombre de Rosario Cornelles.
-Por favor, reservamos una habitación tranquila.
-¿Están incluidos en el recibo todos los extras?
-Por favor, nos gustaría cambiarnos de habitación.
-¿Podríamos ver una habitación?
-¿Cuánto cuesta por semana una habitación doble incluyendo servicio de habitaciones, por favor?
-Desearía una habitación con teléfono, por favor.
-Por favor, reservamos dos habitaciones dobles con televisión.
-¿Me pueden dar la llave de la habitación cero uno nueve?
-Déme la llave de la habitación, por favor.
-Existe un problema en la factura.
-¿Está apuntada la cuenta del teléfono?
-Voy a marcharme.
-¿Me podría dar la llave de la quinientos uno?
-Hemos de irnos hoy por la tarde.
-¿Querrían pedirme un taxi?, por favor.
-¿Podría bajar nuestro equipaje a recepción?
-Por favor, ¿pueden ustedes subir mis bultos a la siete veintiocho?
-¿Nos podría dar la llave de la habitación?
-Hemos de irnos el día catorce por la noche.
-Queremos una habitación para nueve noches, por favor.
-Dénos las llaves de la habitación.
-Deseo una habitación que tenga teléfono, televisión y ducha, por favor.
-Reservé una habitación doble.
-Por favor, me prepara la cuenta.
-Lleven nuestras maletas a la habitación nueve veintiséis, por favor.
-¿Cuánto vale una habitación individual por semana?
-Por favor, quisiera una habitación para una semana.
-Quisiera reservar una habitación, por favor.
-Hice una reserva.
-¿Podría hacer la factura?
-Suba mi equipaje a la habitación número cero tres cinco.
-La habitación es demasiado fría.
-Nos prepara nuestra cuenta de la habitación tres cuatro uno, por favor.
-Creo que hay un problema.
-Por favor, deseo que nos dé las llaves de la habitación cero uno cero.
-He hecho la reserva de una habitación individual a nombre de Dulce Gumbau.
-Reservamos una habitación.
-Por favor, ¿nos podrían dar la llave de la habitación número seis?
-Por favor, ¿nos podrían hacer la cuenta?
-¿Cuánto vale por día una habitación individual?
-Por favor, hice una reserva a nombre de Roberto Vázquez.
-¿Tienen libre alguna habitación con teléfono y televisión?
-Súbanos nuestros bultos a la tres cuatro cero, por favor.
-¿Me lleva el equipaje al coche?
-Por favor, ¿qué precio tiene una habitación doble con pensión completa?
-Quiero una habitación doble para hoy.
-Tenemos que marcharnos hoy a las doce de la mañana.
-Por favor, lleve mi bolsa de viaje a mi habitación.
-Pida un taxi.
-¿Cuánto vale una habitación individual?
-¿Nos puede usted dar las llaves de mi habitación?
-Por favor, deseo que me despierten mañana a las dos y media.
-¿Les importaría subir mi equipaje a la habitación cuatro noventa, por favor?
-¿Nos quieren hacer la factura?
-¿Me querrían preparar la cuenta?
-Por favor, he hecho una reserva.
-Quiero una habitación individual y tranquila hasta mañana.
-¿Podría usted llevarme mi maleta a mi habitación?
-¿Les importaría despertarme a las tres y cuarto, por favor?
-¿Puede darnos las llaves de la habitación número nueve dos siete?
-He reservado una habitación individual con televisión, por favor.
-Desearía que me llevasen mi bolsa a la habitación número ocho cero tres.
-¿Cuánto cuesta una habitación individual?
-¿Hay televisión en las habitaciones?
-Por favor, quiero que lleve mi equipaje a la número siete tres tres.
-Tengo una reserva.
-¿Podría cambiarme de habitación?
-¿Le importaría llevarnos nuestras maletas al taxi?
-Por favor, ¿nos pueden despertar a las nueve?
-Por favor, he reservado dos habitaciones.
-¿Me pueden dar ustedes la llave de la habitación?
-¡Adiós!
-¿Puede darnos la llave de la habitación?
-¿Pueden despertarme a la una?
-¿Les importaría darnos la llave de la habitación, por favor?
-Tenemos reservada una habitación individual y tranquila.
-Deseo que nos dé la llave de la habitación novecientos once, por favor.
-Por favor, ¿nos pueden ustedes dar la llave de mi habitación?
-Voy a marcharme.
-Tenemos que irnos esta tarde.
-¿Le importaría subir mis bolsas de viaje al autobús?
-¿Nos podrían dar la llave de la número cuatro siete uno, por favor?
-Quiero una habitación individual y tranquila hasta mañana, por favor.
-¿Podríamos reservar dos habitaciones?
-Tengo hecha la reserva de una habitación con teléfono y ducha a nombre del señor Borillo.
-Por favor, nos pide nuestro taxi.
-Tenenos hecha una reserva.
-Por favor, ¿me pueden preparar la cuenta de la habitación uno uno uno?
-¿Le importaría llevar nuestro equipaje a nuestra habitación, por favor?
-Por favor, quiero que lleve mi equipaje a la habitación seis catorce.
-¿Le importaría mostrarnos alguna habitación tranquila, por favor?
-Por favor, he hecho la reserva de una habitación con televisión, una buena vista y ducha a nombre de Virginia Pérez.
-Pienso que hay una equivocación en la factura.
-Me voy a ir el jueves por la mañana.
-Reservamos una habitación individual y tranquila para treinta días a nombre de Lidia Llorens, por favor.
-En la habitación hay mucho ruido.
-Tenemos reservadas dos habitaciones tranquilas.
-¿Le importaría mostrarnos una habitación?
-Deseo una habitación con cuarto de baño, televisión y buena vista a nombre de Jorge Balaguer, por favor.
-¿Tiene televisión?
-¿Podríamos ver alguna habitación individual y tranquila?
-Me parece que se produjo una equivocación en la cuenta.
-En la habitación hace mucho calor.
-Tengo que irme mañana a las dos y cuarto de la tarde.
-¿Hay aire acondicionado en las habitaciones?
-¿Nos pueden despertar a la una menos cuarto?
-Reservamos una habitación doble para veintinueve días.
-¿Podríamos reservar dos habitaciones individuales y tranquilas hasta el veintiocho?
-¿Pueden llamarme a un taxi?
-Deseo que me despierten a las siete y media.
-Por favor, ¿me podría repasar la cuenta?
-¿Tienen habitaciones tranquilas libres?
-Me parece que se produjo un problema en la cuenta de la habitación nueve seis cuatro.
-Denme las llaves de la habitación, por favor.
-Llámenos a nuestro taxi para la habitación dos seis ocho.
-¿Pueden darnos la llave de la habitación?
-Déme la llave de la habitación cuatro uno tres.
-¿Podrían llevarnos nuestro equipaje a recepción?
-Por favor, desearíamos una habitación.
-¿Cuánto vale por semana una habitación doble, por favor?
-Por favor, ¿nos podrían despertar mañana a las nueve y media?
-Reservamos una habitación individual para una noche a nombre de Micaela Carpio.
-Por favor, pida nuestro taxi para la habitación ciento veintiocho.
-¿Cuánto cuesta por día una habitación doble con pensión completa?
-Despiértenme a la una y cuarto.
-Por favor, tengo reservada una habitación con buena vista y teléfono.
-¿Le importaría darnos las llaves de la habitación, por favor?
-He de irme hoy a las ocho y cuarto de la mañana.
-¿Nos puede pedir un taxi para la habitación cero diecinueve?
-Creo que existe un error.
-Queremos una habitación.
-Tengo que irme el jueves veintiocho de octubre a las ocho en punto de la mañana.
-¿Podría despertarme a las diez y media, por favor?
-Quisiera que me despertara a la una, por favor.
-Nos iremos el once.
-¿Cuántas?
-Tengo una reserva a nombre del señor Borrás.
-¿Pueden llevarme las maletas al autobús?
-Se produjo una equivocación en mi cuenta.
-¿Podría ver una habitación, por favor?
-Por favor, haga la factura de la habitación nueve catorce.
-¿Podrían subir nuestros bultos a la cuatrocientos setenta y cuatro?
-¿Tienen habitaciones tranquilas libres?
-He reservado una habitación hasta el día uno de noviembre a nombre del señor Víctor Lobo, por favor.
-¿Están apuntados los extras?
-Tenemos reservada una habitación hasta el próximo domingo a nombre del señor Ángel Viciano.
-¿Nos podría dar la llave de mi habitación, por favor?
-Por favor, ¿pueden hacerme la factura de la habitación doscientos doce?
-Por favor, ¿me podría bajar el equipaje a la habitación?
-¿Podríamos reservar dos habitaciones individuales para hoy?
-¿Tiene libre alguna habitación individual y tranquila?
-Déme la llave de la habitación número tres diez.
-Hemos reservado una habitación para hoy.
-En la habitación hay demasiado ruido.
-Nos hemos de ir el día uno por la mañana.
-Desearía una habitación individual y tranquila, por favor.
-Quisiéramos una habitación doble y tranquila.
-Quiero que me despierten mañana a las doce menos cuarto.
-Por favor, ¿podría usted despertarnos a la una y cuarto?
-Vamos a irnos el día quince a las nueve menos cuarto de la mañana.
-¿Están apuntados los impuestos?
-Por favor, me llama a un taxi.
-¿Me baja las bolsas de viaje a recepción?
-Por favor, nos hace la cuenta de la habitación siete treinta y dos.
-Tengo reservada una habitación para dieciocho días a nombre del señor y la señora Cabo.
-¿Hay habitaciones libres con baño?
-Por favor, ¿pueden hacernos la cuenta?
-Reservé una habitación doble y tranquila con televisión para esta noche a nombre de la señorita Marina Miralles, por favor.
-Creo que se produjo un problema en la cuenta de la habitación siete ocho seis.
-¿Tienen habitaciones libres con teléfono?
-Voy a marcharme hoy mismo por la tarde.
-Hemos de marcharnos hoy mismo a las doce de la mañana.
-Hemos de marcharnos el lunes por la noche.
-Deseo una habitación con tele, ducha y teléfono.
-Reservé una habitación para hoy a nombre del señor Rafael Soler.
-¿Podría reservar una habitación doble?
-Por favor, deseamos una habitación hasta el día veintiocho.
-¿Tiene libre una habitación individual y tranquila?
-Por favor, desearíamos cambiarnos a otra habitación con televisión y cuarto de baño.
-¿Tiene habitaciones individuales y tranquilas libres?
-¿Podría cambiarnos de habitación?
-¿Están anotados todos los impuestos?
-Pídame un taxi.
-Tengo reservada una habitación a nombre del señor Ortiz.
-Vamos a marcharnos el domingo a las nueve en punto de la mañana.
-¿Nos querrían llamar a un taxi?
-¡Muchas gracias!
-¿Podría bajar nuestra maleta a nuestra habitación?
-Tengo una reserva.
-¿Pueden despertarme ustedes mañana a la una y cuarto?
-Por favor, nos hace la cuenta de la habitación cuatrocientos diecinueve.
-Existe una equivocación.
-Por favor, hemos hecho una reserva.
-Por favor, lleve mis bolsas de viaje a la habitación.
-¿Tiene libre una habitación tranquila?
-Tenemos reservadas dos habitaciones para una noche.
-¿Me podrían repasar mi factura?
-Por favor, tengo la reserva de una habitación tranquila.
-¿Nos podría dar las llaves de la habitación número cinco quince, por favor?
-Por favor, queremos reservar una habitación con aire acondicionado.
-Tengo hecha la reserva de una habitación a nombre de Teresa Martínez.
-Por favor, ¿me podría llamar a mi taxi?
-He reservado una habitación con ducha, tele y teléfono a nombre de Emilio Paches.
-Por favor, ¿nos podría dar la llave de la habitación cinco nueve?
-¿Está todo incluido?
-He hecho la reserva de una habitación a nombre del señor Ramos.
-Me parece que existe una equivocación en mi cuenta de la habitación tres treinta y nueve.
-¿Hay aire acondicionado en la habitación?
-Nos hemos de marchar el catorce a la una y cuarto de la tarde.
-Pienso que existe una equivocación en la cuenta de la habitación setecientos diecinueve.
-Despiértenos a la una menos cuarto, por favor.
-Pienso que existe una equivocación en la cuenta.
-¿Podría subirnos el equipaje al taxi?
-Deseamos reservar una habitación doble para esta noche.
-¿Aceptan dinero en efectivo?
-¿Me podrían subir el equipaje al coche?
-Tengo reservada una habitación a nombre de Sergio Orenga.
-Por favor, ¿podrían llamarme a un taxi para la habitación ciento noventa?
-Por favor, querríamos que nos diera la llave de la habitación.
-¿Hay teléfono en nuestra habitación?
-¿Puede detallarnos la cuenta?
-Por favor, ¿nos pueden ustedes dar la llave de mi habitación?
-¿Hay una habitación individual libre?
-Tenemos que irnos.
-Por favor, ¿me pueden dar la llave de la número doscientos catorce?
-¿Haría el favor de cambiarme de habitación?
-¿Puede subirnos nuestro equipaje al coche?
-Deseo una habitación tranquila.
-Despiértenos mañana a las seis menos cuarto, por favor.
-Quiero una habitación con televisión, teléfono y agua caliente hasta el día veintisiete.
-Por favor, despiértenos a la una en punto.
-Por favor, he reservado una habitación tranquila a nombre de Tomás Fernández.
-¿Puede darnos la llave de la habitación número dos cinco nueve, por favor?
-Por favor, despiértennos a la una y cuarto.
-Por favor, he reservado una habitación.
-Por favor, dennos las llaves de la habitación número seis cuatro uno.
-Por favor, tengo hecha la reserva de una habitación con televisión y teléfono a nombre de la señorita Calleja.
-Por favor, reservé una habitación con tele, una buena vista y teléfono.
-Querría que nos despertaran mañana a las seis menos cuarto, por favor.
-Quisiera cambiarme de habitación.
-Por favor, queremos cambiar la habitación.
-¿Tienen habitaciones dobles libres?
-Desearía una habitación.
-Quisiéramos una habitación.
-Por favor, desearía que me dieran la llave de nuestra habitación.
-Tengo que marcharme el día treinta de septiembre.
-¿Hay una habitación libre?
-Por favor, ¿me querrían preparar la factura?
-Querría una habitación con televisión y teléfono, por favor.
-Por favor, he reservado una habitación con teléfono.
-Despiértenos mañana a las seis en punto, por favor.
-Hemos reservado una habitación tranquila, por favor.
-Tengo una reserva, por favor.
-¿Podría ver alguna habitación individual y tranquila, por favor?
-Por favor, ¿cuánto vale una habitación individual?
-Lléveme las bolsas al taxi.
-Deseamos cambiar nuestra habitación.
-¿Nos puede llevar las bolsas a la estación?
-¿Le importaría mostrarme otra habitación?
-Por favor, deseo reservar una habitación.
-He hecho una reserva.
-¿Qué precio tiene una habitación individual para nueve días, por favor?
-Tenemos que irnos mañana a la una.
-Por favor, lleven mis bolsas a la habitación cero veintinueve.
-¿Me podrían llevar mis bolsas al autobús?
-Tenemos reservada una habitación para una noche a nombre del señor Federico Cornelles.
-Hice una reserva.
-Me parece que se ha producido un problema.
-¿Puede preparar la factura de la habitación cinco uno uno?, por favor.
-La habitación es muy calurosa.
-¿Podría ver alguna habitación individual y tranquila?
-Me llama a un taxi.
-Despiértenme mañana a las cinco.
-¿Está incluido el servicio de habitaciones?
-Por favor, ¿nos podría dar las llaves de la habitación?
-Me voy a marchar el viernes veintinueve de mayo a las nueve en punto de la noche.
-Quiero reservar una habitación individual y tranquila para esta semana, por favor.
-¿Cuánto cuesta una habitación doble con pensión completa?
-¿Nos podría despertar a las siete y media?
-Reservamos una habitación individual.
-Baje nuestras bolsas de viaje a recepción.
-Hemos reservado una habitación hasta el dos de febrero.
-Me gustaría reservar una habitación para esta noche, por favor.
-¿Les importaría darme la llave de mi habitación?
-Por favor, ¿le importaría despertarme a las ocho y cuarto?
-¿Nos podrían despertar a las seis y media?
-Queremos que nos den la llave de la habitación.
-Por favor, tengo la reserva de una habitación tranquila individual a nombre de Enrique Díaz.
-¿Tienen una habitación libre con agua caliente y aire acondicionado?
-¿Tiene teléfono y aire acondicionado la habitación?
-Nos tenemos que ir el día veintisiete a las nueve en punto.
-Por favor, ¿me querrían llamar a un taxi?
-¿Les importaría despertarnos mañana a las nueve menos cuarto?
-Reservamos una habitación con aire acondicionado hasta pasado mañana, por favor.
-¿Nos puede pedir un taxi?, por favor.
-Tenemos reservada una habitación doble.
-Desearía que llevase mis bolsas a mi habitación, por favor.
-Deseo una habitación doble.
-Me marcho mañana a las doce en punto de la mañana.
-¿Hay aire acondicionado y servicio de bar en las habitaciones?
-Por favor, reservamos dos habitaciones.
-¿Hay caja fuerte en las habitaciones?
-¿Tienen habitaciones tranquilas libres?
-Por favor, ¿me puede dar usted las llaves de la habitación uno uno tres?
-Por favor, suba mi maleta a mi habitación.
-Por favor, tengo reservada una habitación doble con aire acondicionado, teléfono y televisión.
-Quisiera reservar una habitación.
-¿Podría ver otra habitación?
-¿Tiene habitaciones dobles libres?
-¿Están incluidos todos los impuestos?
-Por favor, despiértenos mañana a las dos.
-¿Nos podría dar la llave de la habitación, por favor?
-Súbanos las maletas al coche.
-¿Cuánto cuesta una habitación individual?
-Me voy a ir el viernes once de abril a las ocho y cuarto de la noche.
-Por favor, quiero que nos dé la llave de mi habitación.
-¿Cuánto cuesta una habitación doble por semana?
-Por favor, hice la reserva de una habitación doble tranquila con cuarto de baño y vistas a la ciudad a nombre de Arturo Mira.
-Por favor, he reservado una habitación.
-¿Hay televisión en la habitación, por favor?
-Pienso que se ha producido un problema en mi cuenta de la habitación seis cinco.
-¿Cuánto cuesta una habitación individual, por favor?
-Me hace la cuenta de la habitación uno cuatro siete.
-Por favor, ¿hay agua caliente en la habitación?
-¿Tienen alguna habitación individual libre?
-¿Cuánto cuesta una habitación individual para un día?
-¿Nos puede llamar a un taxi para la habitación tres seis?
-¿Cuánto vale por día una habitación doble?
-Por favor, tenenos hecha una reserva.
-He reservado una habitación tranquila doble a nombre de Paloma Montero.
-Deseamos cambiarnos a otra habitación con cuarto de baño, por favor.
-¿Me podría despertar a las once en punto, por favor?
-¿Podrían llamarnos a un taxi para la habitación nueve tres seis?
-Vamos a marcharnos el día veintiséis de septiembre a las siete y cuarto.
-Por favor, deseo que me den la llave de la habitación.
-Por favor, ¿me podría pedir un taxi?
-¿Aceptaría dinero en efectivo?
-Tengo la reserva de una habitación a nombre de Francisco Botella.
-Prepáreme la factura.
-Me gustaría reservar una habitación individual y tranquila con teléfono hasta pasado mañana, por favor.
-¿Podría pedirnos un taxi?
-¿Hay televisión en las habitaciones?
-¿Cuánta?
-¡Conforme!
-Por favor, ¿podría prepararnos la cuenta de la habitación dos seis tres?
-¿Hay teléfono en las habitaciones?
-¿Qué hora es?
-Mi nombre es Jesús González.
-Por favor, tengo hecha una reserva a nombre de Teresa Ibáñez.
-He de marcharme hoy mismo a las once en punto de la mañana.
-Desearía que me bajase los bultos a la habitación doce.
-¿Dónde?
-Por favor, ¿nos podría pedir un taxi para la habitación seis catorce?
-Por favor, ¿les importaría despertarme mañana a las cuatro y media?
-Por favor, nos gustaría cambiarnos a otra habitación menos ruidosa.
-Creo que se ha equivocado en la cuenta.
-¿Está incluido el teléfono?
-Una habitación a nombre de Virginia Álvarez, por favor.
-Tenemos que marcharnos hoy mismo por la noche.
-En la habitación hace mucho calor.
-Por favor, ¿me podrían preparar mi factura?
-¿Podría ver alguna habitación, por favor?
-Hemos reservado una habitación doble.
-¿Aceptarían tarjetas de crédito?
-Me he de marchar el jueves dieciséis a las nueve y media de la noche.
-Por favor, suba mi maleta a mi habitación.
-Deseo una habitación individual.
-¿Hay habitaciones dobles y tranquilas libres?
-Deseamos que baje nuestras maletas a la habitación.
-¿Tienen libre una habitación?
-Nos vamos a marchar el sábado.
-Por favor, tengo hecha la reserva de una habitación con televisión y teléfono a nombre de Inmaculada Colomer.
-Súbanme mis maletas a la habitación número dos ocho, por favor.
-¿Les importaría despertarnos a las cuatro y media, por favor?
-Hay un error en la cuenta de la habitación setecientos diecinueve.
-¿Querría pedirnos nuestro taxi para la habitación dos tres uno?
-Por favor, ¿podrían subirnos nuestra bolsa de viaje a la habitación?
-¿Les importaría llevar nuestros bultos a nuestra habitación?
-¿Podría cambiarme a otra habitación menos fría?
-Hemos reservado una habitación.
-¿Le importaría que echáramos un vistazo a alguna habitación?
-¿Cuántas?
-Déme las llaves de nuestra habitación.
-¿Podría llamarme a un taxi?
-Desearía que me llevara mi maleta a la habitación número setecientos tres, por favor.
-Por favor, tenenos hecha una reserva.
-¿Podría cambiarme a otra habitación más cálida?
-Adiós.
-Por favor, lléveme mi maleta a la habitación.
-Por favor, ¿podrían llevarme ustedes mis bultos a la habitación setecientos veintitrés?
-¿Hay alguna habitación doble libre?
-Por favor, dénos la llave de la habitación.
-Pienso que se ha producido una equivocación en la cuenta.
-Despiértenos mañana a la una en punto, por favor.
-¿Cuándo?
-Me llamo Emilio Navarro.
-¿Le importaría subir nuestras bolsas a nuestra habitación, por favor?
-Existe un error en nuestra cuenta.
-¿Hay teléfono en la habitación?
-Por favor, tengo la reserva de una habitación con teléfono, televisión y baño a nombre de Isabel Cabedo.
-¿Me podría despertar mañana a las doce, por favor?
-Por favor, ¿podríamos ver otra habitación?
-¿Me podrían hacer la cuenta?
-¿Podría reservar una habitación?
-He de marcharme mañana a las seis.
-Queremos que nos dé la llave de la habitación número novecientos veintiuno, por favor.
-Lleve nuestras bolsas a nuestra habitación.
-¿Podría cambiarnos a otra habitación con menos ruido?
-Pienso que existe una equivocación en mi cuenta.
-He de marcharme el día ocho de septiembre.
-He reservado una habitación doble a nombre de la señora Inmaculada Colomer.
-¿Podríamos reservar dos habitaciones?
-Bajen nuestros bultos a la habitación número cuatrocientos dieciocho.
-Me tengo que marchar el trece a las cuatro y cuarto.
-¿Tiene libre una habitación individual?
-Reservamos dos habitaciones, por favor.
-Pienso que existe un error.
-¿Haría el favor de cambiarnos a otra habitación con menos ruido?
-Dennos las llaves de la habitación nueve nueve dos, por favor.
-Por favor, deseo una habitación.
-He hecho la reserva de una habitación con teléfono, vistas a la montaña, baño y tele a nombre de Ricardo Vilanova.
-Deseo que me suban los bultos a mi habitación.
-Tengo hecha una reserva, por favor.
-¿Nos podría despertar mañana a las cuatro?
-Me parece que se produjo un error en la cuenta.
-He de irme mañana.
-¿Le importaría darnos la llave de la habitación?
-Desearía una habitación hasta el próximo martes.
-¿Dónde?
-Por favor, ¿les importaría darme la llave de la habitación quinientos veintidós?
-Quiero reservar una habitación.
-Lléveme mi equipaje a la estación.
-¿Me lleva las bolsas?
-¿Podrían darnos la llave de mi habitación?
-Desearíamos una habitación doble con ducha para un día.
-¿Tiene una habitación doble libre?
-Se ha producido una equivocación en la cuenta.
-Desearía reservar una habitación para siete días.
-Tenemos reservada una habitación individual con televisión, teléfono y aseo hasta mañana a nombre de José Herrero, por favor.
-¿Están anotados en la cuenta los extras?
-Hemos reservado una habitación doble.
-La habitación es muy fría.
-Tengo reservada una habitación doble para hoy.
-¡Buenos días!
-¿Pueden llevarme las bolsas de viaje al coche?
-¿Podría ver alguna habitación doble y tranquila con televisión, por favor?
-¿Están incluidos en la cuenta todos los impuestos?
-Hay una equivocación en la cuenta.
-¿Le importaría subirme mi equipaje al autobús?
-Me marcharé el veintisiete de marzo a las dos y media de la tarde.
-Por favor, reservé una habitación tranquila doble con baño, una buena vista y televisión a nombre de Andrés Sanz.
-Por favor, llámenos a un taxi.
-¿Tenemos que firmar alguna hoja de registro?
-He hecho la reserva de una habitación a nombre de Julia Vilanova.
-¿Hay alguna habitación tranquila libre?
-Me llamo Gregorio Pitarch.
-¿Cómo?
-Llámeme a mi taxi.
-Creo que hay un error en la cuenta.
-¿Tiene libre una habitación con aseo, aire acondicionado y televisión?
-¿Querría llamarnos a un taxi?, por favor.
-De nada.
-Reservamos una habitación a nombre de Juan Rubio.
-¿Podría reservar una habitación con aire acondicionado para esta semana?
-Nos marchamos hoy mismo a las diez y cuarto de la noche.
-En la habitación hace demasiado frío.
-Por favor, tengo una reserva.
-Nos iremos mañana a las tres menos cuarto de la tarde.
-Deseamos que nos despierten a las once, por favor.
-Quisiera que me diesen las llaves de la habitación número seis tres ocho.
-¿Nos pueden preparar la factura?, por favor.
-Reservamos una habitación individual, por favor.
-Queremos reservar una habitación, por favor.
-¿Le importaría llevar mi equipaje a recepción?
-¿Me podría llamar a un taxi?
-¿Tiene aire acondicionado la habitación?
-Me he de ir mañana a las diez y cuarto de la noche.
-He reservado una habitación individual.
-¿Tiene alguna habitación individual libre?
-Nos tenemos que ir el día cuatro.
-¿Puedo pagar la cuenta en efectivo?
-¿Nos podría usted dar las llaves de nuestra habitación?
-Quiero una habitación individual y tranquila para hoy, por favor.
-¿Tenemos que firmar la hoja de registro?
-Por favor, tenenos hecha una reserva.
-¿Le importaría mostrarme alguna habitación con baño, por favor?
-Despiérteme mañana a las tres menos cuarto, por favor.
-Querría una habitación que tenga buena vista de la montaña y ducha, por favor.
-He reservado una habitación.
-¿Tenemos que rellenar la hoja de registro?
-¿Me pueden despertar a las dos en punto, por favor?
-¿Nos puede despertar a las diez, por favor?
diff --git a/samples/machine_translation.ipynb b/samples/machine_translation.ipynb
deleted file mode 100644
index 9698151cb..000000000
--- a/samples/machine_translation.ipynb
+++ /dev/null
@@ -1,467 +0,0 @@
-{
- "cells": [
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Machine Translation Tutorial\n",
- "\n",
- "Machine provides a general framework for machine translation engines. It currently provides implementations for rule-based MT, statistical MT (SMT), and neural MT (NMT). All MT engines implement the same interfaces, which provides a high level of extensibility for calling applications.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "
Installed Packages
Nito.AsyncEx, 5.1.2
SIL.Scripture, 12.0.1
Thot, 3.4.1
"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#r \"nuget:SIL.Scripture,12.0.1\"\n",
- "#r \"nuget:Thot\"\n",
- "#r \"nuget:Nito.AsyncEx\"\n",
- "#r \"../src/SIL.Machine/bin/Debug/netstandard2.0/SIL.Machine.dll\"\n",
- "#r \"../src/SIL.Machine.Morphology.HermitCrab/bin/Debug/netstandard2.0/SIL.Machine.Morphology.HermitCrab.dll\"\n",
- "#r \"../src/SIL.Machine.Translation.Thot/bin/Debug/netstandard2.0/SIL.Machine.Translation.Thot.dll\"\n",
- "\n",
- "void Write(string text)\n",
- "{\n",
- " Console.Write(text);\n",
- "}\n",
- "\n",
- "void WriteLine(string text = \"\")\n",
- "{\n",
- " Console.Write(text + \"\\n\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Statistical Machine Translation\n",
- "\n",
- "Machine provides a phrase-based statistical machine translation engine that is based on the [Thot](https://github.com/sillsdev/thot) library. The SMT engine implemented in Thot is unique, because it supports incremental training and interactive machine translation (IMT). Let's start by training an SMT model. MT models implement the `ITranslationModel` interface. SMT models are trained using a parallel text corpus, so the first step is to create a `ParallelTextCorpus`.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [],
- "source": [
- "using SIL.Machine.Corpora;\n",
- "using SIL.Machine.Tokenization;\n",
- "\n",
- "var sourceCorpus = new TextFileTextCorpus(\"data/sp.txt\");\n",
- "var targetCorpus = new TextFileTextCorpus(\"data/en.txt\");\n",
- "var parallelCorpus = sourceCorpus.AlignRows(targetCorpus);"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Trainers are responsible for training MT models. A trainer can be created either using the constructor or using the `CreateTrainer` method on the `ITranslationModel` interface. Creating a trainer by constructor is useful if you are training a new model. The `CreateTrainer` method is useful when you are retraining an existing model. In this example, we are going to construct the trainer directly. Word alignment is at the core of SMT. In this example, we are going to use HMM for word alignment.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Training model... done.\n",
- "Saving model... done.\n"
- ]
- }
- ],
- "source": [
- "using System.IO;\n",
- "using SIL.Machine.Translation.Thot;\n",
- "using SIL.Machine.Utils;\n",
- "\n",
- "var tokenizer = new LatinWordTokenizer();\n",
- "Directory.CreateDirectory(\"out/sp-en\");\n",
- "File.Copy(\"data/smt.cfg\", \"out/sp-en/smt.cfg\", overwrite: true);\n",
- "{\n",
- " using var trainer = new ThotSmtModelTrainer(ThotWordAlignmentModelType.Hmm, parallelCorpus, \"out/sp-en/smt.cfg\")\n",
- " {\n",
- " SourceTokenizer = tokenizer,\n",
- " TargetTokenizer = tokenizer,\n",
- " LowercaseSource = true,\n",
- " LowercaseTarget = true\n",
- " };\n",
- "\n",
- " Write(\"Training model...\");\n",
- " await trainer.TrainAsync();\n",
- " WriteLine($\" done.\");\n",
- " Write(\"Saving model...\");\n",
- " await trainer.SaveAsync();\n",
- " WriteLine($\" done.\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In order to fully translate a sentence, we need to perform pre-processing steps on the source sentence and post-processing steps on the target translation. Here are the steps to fully translate a sentence:\n",
- "\n",
- "1. Tokenize the source sentence.\n",
- "2. Lowercase the source tokens.\n",
- "3. Translate the sentence.\n",
- "4. Truecase the target tokens.\n",
- "5. Detokenize the target tokens into a sentence.\n",
- "\n",
- "Truecasing is the process of properly capitalizing a lowercased sentence. Luckily, Machine provides a statistical truecaser that can learn the capitalization rules for a language. The next step is train the truecaser model.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [],
- "source": [
- "using SIL.Machine.Translation;\n",
- "\n",
- "{\n",
- " var truecaser = new UnigramTruecaser(\"out/sp-en/en.truecase.txt\");\n",
- " using var trainer = truecaser.CreateTrainer(targetCorpus);\n",
- " await trainer.TrainAsync();\n",
- " await trainer.SaveAsync();\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now that we have a trained SMT model and a trained truecasing model, we are ready to translate sentences. First, We need to load the SMT model. The model can be used to translate sentences using the `TranslateAsync` method.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "I would like to book a room until tomorrow.\n"
- ]
- }
- ],
- "source": [
- "var truecaser = new UnigramTruecaser(\"out/sp-en/en.truecase.txt\");\n",
- "var detokenizer = new LatinWordDetokenizer();\n",
- "\n",
- "{ \n",
- " using var model = new ThotSmtModel(ThotWordAlignmentModelType.Hmm, \"out/sp-en/smt.cfg\")\n",
- " {\n",
- " SourceTokenizer = tokenizer,\n",
- " TargetTokenizer = tokenizer,\n",
- " TargetDetokenizer = detokenizer,\n",
- " Truecaser = truecaser,\n",
- " LowercaseSource = true,\n",
- " LowercaseTarget = true\n",
- " };\n",
- "\n",
- " var result = await model.TranslateAsync(\"Desearía reservar una habitación hasta mañana.\");\n",
- " WriteLine(result.Translation);\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "`ThotSmtModel` also supports interactive machine translation. Under this paradigm, the engine assists a human translator by providing translations suggestions based on what the user has translated so far. This paradigm can be coupled with incremental training to provide a model that is constantly learning from translator input. Models and engines must implement the `IInteractiveTranslationModel` and `IInteractiveTranslationEngine` interfaces to support IMT. The IMT paradigm is implemented in the `InteractiveTranslator` class. The `ApproveAsync` method on `InteractiveTranslator` performs incremental training using the current prefix. Suggestions are generated from translations using a class that implements the `ITranslationSuggester` interface.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Source: Hablé con recepción.\n",
- "Suggestion: [With reception]\n",
- "Suggestion: I spoke [with reception]\n",
- "Suggestion: I spoke with reception. []\n",
- "\n",
- "Source: Hablé hasta cinco en punto.\n",
- "Suggestion: [I spoke until five o'clock]\n",
- "Suggestion: I spoke until five o'clock. []\n"
- ]
- }
- ],
- "source": [
- "var suggester = new PhraseTranslationSuggester();\n",
- "string GetCurrentSuggestion(InteractiveTranslator translator)\n",
- "{\n",
- " var suggestion = suggester.GetSuggestions(1, translator).FirstOrDefault();\n",
- " var suggestionText = suggestion is null ? \"\" : detokenizer.Detokenize(suggestion.TargetWords);\n",
- " if (translator.Prefix.Length == 0)\n",
- " suggestionText = suggestionText.Capitalize();\n",
- " var prefixText = translator.Prefix.Trim();\n",
- " if (prefixText.Length > 0)\n",
- " prefixText = prefixText + \" \";\n",
- " return $\"{prefixText}[{suggestionText}]\";\n",
- "}\n",
- "\n",
- "{\n",
- " using var model = new ThotSmtModel(ThotWordAlignmentModelType.Hmm, \"out/sp-en/smt.cfg\")\n",
- " {\n",
- " SourceTokenizer = tokenizer,\n",
- " TargetTokenizer = tokenizer,\n",
- " TargetDetokenizer = detokenizer,\n",
- " Truecaser = truecaser,\n",
- " LowercaseSource = true,\n",
- " LowercaseTarget = true\n",
- " };\n",
- " var factory = new InteractiveTranslatorFactory(model)\n",
- " {\n",
- " TargetTokenizer = tokenizer,\n",
- " TargetDetokenizer = detokenizer\n",
- " };\n",
- "\n",
- " var sourceSentence = \"Hablé con recepción.\";\n",
- " WriteLine($\"Source: {sourceSentence}\");\n",
- " var translator = await factory.CreateAsync(sourceSentence);\n",
- "\n",
- " var suggestion = GetCurrentSuggestion(translator);\n",
- " WriteLine($\"Suggestion: {suggestion}\");\n",
- "\n",
- " translator.AppendToPrefix(\"I spoke \");\n",
- " suggestion = GetCurrentSuggestion(translator);\n",
- " WriteLine($\"Suggestion: {suggestion}\");\n",
- "\n",
- " translator.AppendToPrefix(\"with reception.\");\n",
- " suggestion = GetCurrentSuggestion(translator);\n",
- " WriteLine($\"Suggestion: {suggestion}\");\n",
- " await translator.ApproveAsync(alignedOnly: false);\n",
- " WriteLine();\n",
- "\n",
- " sourceSentence = \"Hablé hasta cinco en punto.\";\n",
- " WriteLine($\"Source: {sourceSentence}\");\n",
- " translator = await factory.CreateAsync(sourceSentence);\n",
- "\n",
- " suggestion = GetCurrentSuggestion(translator);\n",
- " WriteLine($\"Suggestion: {suggestion}\");\n",
- "\n",
- " translator.AppendToPrefix(\"I spoke until five o'clock.\");\n",
- " suggestion = GetCurrentSuggestion(translator);\n",
- " WriteLine($\"Suggestion: {suggestion}\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Rule-based Machine Translation\n",
- "\n",
- "Machine provides an implementation of a simple, transfer-based MT engine. Transfer-based MT consists of three steps:\n",
- "\n",
- "1. Analysis: source words are segmented into morphemes.\n",
- "2. Transfer: source morphemes are converted to the equivalent target morphemes.\n",
- "3. Synthesis: the target morphemes are combined into target words.\n",
- "\n",
- "The `TransferEngine` class implements this process. HermitCrab, a rule-based morphological parser, can be used to perform the analysis and synthesis steps. HermitCrab parser implementation is provided in the [SIL.Machine.Morphology.HermitCrab](https://www.nuget.org/packages/SIL.Machine.Morphology.HermitCrab/) package. In this example, the transfer is performed using simple gloss matching.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "God created the world.\n"
- ]
- }
- ],
- "source": [
- "using SIL.Machine.Morphology.HermitCrab;\n",
- "\n",
- "var hcTraceManager = new TraceManager();\n",
- "\n",
- "Language srcLang = XmlLanguageLoader.Load(\"data/sp-hc.xml\");\n",
- "var srcMorpher = new Morpher(hcTraceManager, srcLang);\n",
- "\n",
- "Language trgLang = XmlLanguageLoader.Load(\"data/en-hc.xml\");\n",
- "var trgMorpher = new Morpher(hcTraceManager, trgLang);\n",
- "\n",
- "var transferer = new SimpleTransferer(new GlossMorphemeMapper(trgMorpher));\n",
- "\n",
- "{\n",
- " using var transferEngine = new TransferEngine(srcMorpher, transferer, trgMorpher)\n",
- " {\n",
- " SourceTokenizer = tokenizer,\n",
- " TargetDetokenizer = detokenizer,\n",
- " Truecaser = truecaser,\n",
- " LowercaseSource = true\n",
- " };\n",
- "\n",
- " var result = await transferEngine.TranslateAsync(\"Dios creó el mundo.\");\n",
- " WriteLine(result.Translation.Capitalize());\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Hybrid Machine Translation\n",
- "\n",
- "Machine includes a hybrid machine translation approach that allows you to merge the translation results from a rule-based engine and data-driven engine. The translation from the data-drive engine is the base translation. If there are any words/phrases in the base translation that have a low score, then they will be replaced by the translations from the rule-based engine. This hybrid approach is implemented in the `HybridTranslationEngine` class.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "SMT: Please make out two cuentas.\n",
- "Transfer: Por favor, haga dos bills.\n",
- "Hybrid: Please make out two bills.\n"
- ]
- }
- ],
- "source": [
- "{\n",
- " using var smtModel = new ThotSmtModel(ThotWordAlignmentModelType.Hmm, \"out/sp-en/smt.cfg\")\n",
- " {\n",
- " SourceTokenizer = tokenizer,\n",
- " TargetTokenizer = tokenizer,\n",
- " TargetDetokenizer = detokenizer,\n",
- " Truecaser = truecaser,\n",
- " LowercaseSource = true,\n",
- " LowercaseTarget = true\n",
- " };\n",
- "\n",
- " using var transferEngine = new TransferEngine(srcMorpher, transferer, trgMorpher)\n",
- " {\n",
- " SourceTokenizer = tokenizer,\n",
- " TargetDetokenizer = detokenizer,\n",
- " Truecaser = truecaser,\n",
- " LowercaseSource = true\n",
- " };\n",
- "\n",
- " using var hybridEngine = new HybridTranslationEngine(smtModel, transferEngine)\n",
- " {\n",
- " TargetDetokenizer = detokenizer\n",
- " };\n",
- "\n",
- " var sourceSentence = \"Por favor, haga dos cuentas.\";\n",
- " var result = await smtModel.TranslateAsync(sourceSentence);\n",
- " WriteLine($\"SMT: {result.Translation.Capitalize()}\");\n",
- "\n",
- " result = await transferEngine.TranslateAsync(sourceSentence);\n",
- " WriteLine($\"Transfer: {result.Translation.Capitalize()}\");\n",
- "\n",
- " result = await hybridEngine.TranslateAsync(sourceSentence);\n",
- " WriteLine($\"Hybrid: {result.Translation.Capitalize()}\");\n",
- "}"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": ".NET (C#)",
- "language": "C#",
- "name": ".net-csharp"
- },
- "language_info": {
- "name": "C#"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/samples/tokenization.ipynb b/samples/tokenization.ipynb
deleted file mode 100644
index c84847d08..000000000
--- a/samples/tokenization.ipynb
+++ /dev/null
@@ -1,419 +0,0 @@
-{
- "cells": [
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Tokenization Tutorial\n",
- "\n",
- "There are many NLP methods that require tokenized data as input, such as machine translation and word alignment. In this notebook, we will show how to use the different tokenizers and detokenizers that are available in Machine. Tokenizers implement either the `ITokenizer` interface or the `IRangeTokenizer` interface. `ITokenizer` classes are used to segment a sequence into tokens. `IRangeTokenizer` classes return ranges that mark where each each token occurs in the sequence. Detokenizers implement the `IDetokenizer` interface.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "
Installed Packages
SIL.Scripture, 12.0.1
"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#r \"nuget:SIL.Scripture,12.0.1\"\n",
- "#r \"../src/SIL.Machine/bin/Debug/netstandard2.0/SIL.Machine.dll\"\n",
- "#r \"../src/SIL.Machine.Tokenization.SentencePiece/bin/Debug/netstandard2.0/SIL.Machine.Tokenization.SentencePiece.dll\"\n",
- "\n",
- "void WriteLine(string text = \"\")\n",
- "{\n",
- " Console.Write(text + \"\\n\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Tokenizing text\n",
- "\n",
- "Let's start with a simple, whitespace tokenizer. This tokenizer is used to split a string at whitespace. This tokenizer is useful for text that has already been tokenized.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "This | is | a | test | .\n"
- ]
- }
- ],
- "source": [
- "using SIL.Machine.Tokenization;\n",
- "\n",
- "var tokenizer = new WhitespaceTokenizer();\n",
- "var tokens = tokenizer.Tokenize(\"This is a test .\");\n",
- "WriteLine(string.Join(\" | \", tokens));"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Machine contains general tokenizers that can be used to tokenize text from languages with a Latin-based script. A word tokenizer and a sentence tokenizer are available.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Integer | scelerisque | efficitur | dui | , | eu | tincidunt | erat | posuere | in | .\n",
- "Curabitur | vel | finibus | mi | .\n"
- ]
- }
- ],
- "source": [
- "var sentenceTokenizer = new LatinSentenceTokenizer();\n",
- "var sentences = sentenceTokenizer.Tokenize(\n",
- " \"Integer scelerisque efficitur dui, eu tincidunt erat posuere in. Curabitur vel finibus mi.\");\n",
- "var wordTokenizer = new LatinWordTokenizer();\n",
- "WriteLine(string.Join(\"\\n\", sentences.Select(s => string.Join(\" | \", wordTokenizer.Tokenize(s)))));"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Most tokenizers implement the `IRangeTokenizer` interface. These tokenizers have an additional method, `TokenizeAsRanges`, that returns ranges that mark the position of all tokens in the original string.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[\"][This] [is] [a] [test][,] [also][.][\"]\n"
- ]
- }
- ],
- "source": [
- "var wordTokenizer = new LatinWordTokenizer();\n",
- "var sentence = \"\\\"This is a test, also.\\\"\";\n",
- "var ranges = wordTokenizer.TokenizeAsRanges(sentence);\n",
- "var output = \"\";\n",
- "var prev_end = 0;\n",
- "foreach (var range in ranges)\n",
- "{\n",
- " output += sentence.Substring(prev_end, range.Start - prev_end);\n",
- " output += $\"[{sentence.Substring(range.Start, range.Length)}]\";\n",
- " prev_end = range.End;\n",
- "}\n",
- "WriteLine(output + sentence.Substring(prev_end));"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "There are some languages that do not delimit words with spaces, but instead delimit sentences with spaces. In these cases, it is common practice to use zero-width spaces to explicitly mark word boundaries. This is often done for Bible translations. Machine contains a word tokenizer that is designed to properly deal with text use zero-width space to delimit words and spaces to delimit sentences. Notice that the space is preserved, since it is being used as punctuation to delimit sentences.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Lorem | Ipsum | Dolor | Sit | Amet | Consectetur | | Adipiscing | Elit | Sed\n"
- ]
- }
- ],
- "source": [
- "var wordTokenizer = new ZwspWordTokenizer();\n",
- "var tokens = wordTokenizer.Tokenize(\"LoremIpsumDolorSitAmetConsectetur AdipiscingElitSed\");\n",
- "WriteLine(string.Join(\" | \", tokens));"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Subword tokenization has become popular for use with deep learning models. Machine provides a [SentencePiece](https://github.com/google/sentencepiece) tokenizer that can perform both BPE and unigram subword tokenization. Another advantage of subword tokenization is that it is language-independent and allows one to specify the size of the vocabulary. This helps to deal with out-of-vocabulary issues. First, let's train a SentencePiece model. SentencePiece classes are implemented in the [SIL.Machine.Tokenization.SentencePiece](https://www.nuget.org/packages/SIL.Machine.Tokenization.SentencePiece/) package.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [],
- "source": [
- "using System.IO;\n",
- "using SIL.Machine.Tokenization.SentencePiece;\n",
- "\n",
- "Directory.CreateDirectory(\"out\");\n",
- "var trainer = new SentencePieceTrainer\n",
- "{\n",
- " VocabSize = 400,\n",
- " ModelType = SentencePieceModelType.Unigram\n",
- "};\n",
- "trainer.Train(\"data/en.txt\", \"out/en-sp\")"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now that we have a SentencePiece model, we can split the text into subwords.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "▁Th | is | ▁ | is | ▁a | ▁ | t | es | t | .\n"
- ]
- }
- ],
- "source": [
- "{\n",
- " using var tokenizer = new SentencePieceTokenizer(\"out/en-sp.model\");\n",
- " var tokens = tokenizer.Tokenize(\"This is a test.\");\n",
- " WriteLine(string.Join(\" | \", tokens));\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Detokenizing text\n",
- "\n",
- "For many NLP pipelines, tokens will need to be merged back into detokenized text. This is very common for machine translation. Many of the tokenizers in Machine also have a corresponding detokenizer that can be used to convert tokens back into a correct sequence. Once again, let's start with a simple, whitespace detokenizer.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "This is a test .\n"
- ]
- }
- ],
- "source": [
- "var detokenizer = new WhitespaceDetokenizer();\n",
- "var sentence = detokenizer.Detokenize(new[] { \"This\", \"is\", \"a\", \"test\", \".\" });\n",
- "WriteLine(sentence);"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Machine has a general detokenizer that works well with languages with a Latin-based script.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\"This is a test, also.\"\n"
- ]
- }
- ],
- "source": [
- "var wordDetokenizer = new LatinWordDetokenizer();\n",
- "var sentence = wordDetokenizer.Detokenize(new[] { \"\\\"\", \"This\", \"is\", \"a\", \"test\", \",\", \"also\", \".\", \"\\\"\" });\n",
- "WriteLine(sentence);"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Machine has a detokenizer that properly deals with text that uses zero-width space to delimit words and spaces to delimit sentences.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "LoremIpsumDolorSitAmetConsectetur AdipiscingElitSed\n"
- ]
- }
- ],
- "source": [
- "var wordDetokenizer = new ZwspWordDetokenizer();\n",
- "var sentence = wordDetokenizer.Detokenize(\n",
- " new[] { \"Lorem\", \"Ipsum\", \"Dolor\", \"Sit\", \"Amet\", \"Consectetur\", \" \", \"Adipiscing\", \"Elit\", \"Sed\" });\n",
- "WriteLine(sentence);"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Machine contains a detokenizer for SentencePiece encoded text. SentencePiece encodes spaces in the tokens, so that it can be detokenized without any ambiguities.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "This is a test.\n"
- ]
- }
- ],
- "source": [
- "var detokenizer = new SentencePieceDetokenizer();\n",
- "var sentence = detokenizer.Detokenize(new[] { \"▁Th\", \"is\", \"▁\", \"is\", \"▁a\", \"▁\", \"t\", \"es\", \"t\", \".\" });\n",
- "WriteLine(sentence);"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": ".NET (C#)",
- "language": "C#",
- "name": ".net-csharp"
- },
- "language_info": {
- "name": "C#"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/samples/word_alignment.ipynb b/samples/word_alignment.ipynb
deleted file mode 100644
index e0880eb0f..000000000
--- a/samples/word_alignment.ipynb
+++ /dev/null
@@ -1,435 +0,0 @@
-{
- "cells": [
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Word Alignment Tutorial\n",
- "\n",
- "In this notebook, we will demonstrate how to use machine to train statistical word alignment models and then use them to predict alignments between sentences. Machine uses the [Thot](https://github.com/sillsdev/thot) library to implement word alignment models. The implementations are contained in the [SIL.Machine.Translation.Thot](https://www.nuget.org/packages/SIL.Machine.Translation.Thot/) package.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "
Installed Packages
SIL.Scripture, 12.0.1
Thot, 3.4.1
"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#r \"nuget:SIL.Scripture,12.0.1\"\n",
- "#r \"nuget:Thot\"\n",
- "#r \"../src/SIL.Machine.Translation.Thot/bin/Debug/netstandard2.0/SIL.Machine.dll\"\n",
- "#r \"../src/SIL.Machine.Translation.Thot/bin/Debug/netstandard2.0/SIL.Machine.Translation.Thot.dll\"\n",
- "\n",
- "void WriteLine(string text = \"\")\n",
- "{\n",
- " Console.Write(text + \"\\n\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Training models\n",
- "\n",
- "The first step in training a statistical word alignment model is setting up a parallel text corpus. Word alignment models are unsupervised, so they only require a parallel text corpus to train. Manually created alignments are not necessary. So let's create a parallel corpus from the source and target monolingual corpora.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [],
- "source": [
- "using SIL.Machine.Corpora;\n",
- "using SIL.Machine.Tokenization;\n",
- "\n",
- "var sourceCorpus = new ParatextTextCorpus(\"data/VBL-PT\");\n",
- "var targetCorpus = new ParatextTextCorpus(\"data/WEB-PT\");\n",
- "var parallelCorpus = sourceCorpus.AlignRows(targetCorpus).Tokenize();"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Machine has implementations of all common statistical models, including the famous IBM models (1-4), HMM, and FastAlign. All alignment models implement the `IWordAlignmentModel` interface. This makes it easier to swap out different models in your code.\n"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In this tutorial, we are going to start by training an IBM-1 model. There are two possible ways to train a model. First, we will demonstrate training a model from a class that implements `IWordAlignmentModel`. We use the `CreateTrainer` method to create a trainer object that is used to train the model. If we do not specify a file path when creating the model object, then the model will only exist in memory. When we call the `SaveAsync` method, the model instance is updated with the trained model parameters, but the model is not written to disk. We are going to use the `Lowercase` token processor to pre-process that data, since that generally gives better results.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Training IBM-1 model: 0.00%\n",
- "Training IBM-1 model: 16.67%\n",
- "Training IBM-1 model: 33.33%\n",
- "Training IBM-1 model: 50.00%\n",
- "Training IBM-1 model: 66.67%\n",
- "Training IBM-1 model: 83.33%\n",
- "Training IBM-1 model: 100.00%\n"
- ]
- }
- ],
- "source": [
- "using SIL.Machine.Translation.Thot;\n",
- "using SIL.Machine.Utils;\n",
- "\n",
- "{\n",
- " using var model = new ThotIbm1WordAlignmentModel();\n",
- " using var trainer = model.CreateTrainer(parallelCorpus.Lowercase());\n",
- " await trainer.TrainAsync(new DelegateProgress(status => WriteLine($\"Training IBM-1 model: {status.PercentCompleted:P}\")));\n",
- " await trainer.SaveAsync();\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The other option for training a model is to construct a trainer object directly. This method is useful for when you are only interested in training the model and saving it to disk for later use. We need to specify where the model will be saved after it is trained and we call the `SaveAsync` method.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Training IBM-1 model: 0.00%\n",
- "Training IBM-1 model: 16.67%\n",
- "Training IBM-1 model: 33.33%\n",
- "Training IBM-1 model: 50.00%\n",
- "Training IBM-1 model: 66.67%\n",
- "Training IBM-1 model: 83.33%\n",
- "Training IBM-1 model: 100.00%\n",
- "IBM-1 model saved\n"
- ]
- }
- ],
- "source": [
- "using System.IO;\n",
- "\n",
- "Directory.CreateDirectory(\"out/VBL-WEB-IBM1\");\n",
- "{\n",
- " using var trainer = new ThotWordAlignmentModelTrainer(ThotWordAlignmentModelType.Ibm1, parallelCorpus.Lowercase(),\n",
- " \"out/VBL-WEB-IBM1/src_trg\");\n",
- " await trainer.TrainAsync(new DelegateProgress(status => WriteLine($\"Training IBM-1 model: {status.PercentCompleted:P}\")));\n",
- " await trainer.SaveAsync();\n",
- " WriteLine(\"IBM-1 model saved\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Aligning parallel sentences\n",
- "\n",
- "Now that we have a trained alignment model, we can find the best alignment for a parallel sentence. We call `Align` method to find the best alignment. The results are returned as a `WordAlignmentMatrix` object.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1JN 1:1\n",
- "Source: Esta carta trata sobre la Palabra de vida que existía desde el principio , que hemos escuchado , que hemos visto con nuestros propios ojos y le hemos contemplado , y que hemos tocado con nuestras manos .\n",
- "Target: That which was from the beginning , that which we have heard , that which we have seen with our eyes , that which we saw , and our hands touched , concerning the Word of life\n",
- "Alignment: 2-2 2-20 2-25 2-29 2-30 3-32 4-4 4-33 5-34 6-35 7-36 12-3 12-5 13-6 13-12 13-21 13-26 13-31 15-0 15-7 15-10 15-13 15-16 15-22 16-1 16-8 16-11 16-14 16-23 20-17 21-18 22-19 22-28 25-27 35-9 35-15 35-24\n",
- "1JN 1:2\n",
- "Source: Esta Vida nos fue revelada . La vimos y damos testimonio de ella . Estamos hablándoles de Aquél que es la Vida Eterna , que estaba con el Padre , y que nos fue revelado .\n",
- "Target: ( and the life was revealed , and we have seen , and testify , and declare to you the life , the eternal life , which was with the Father , and was revealed to us ) ;\n",
- "Alignment: 0-17 0-35 1-3 1-20 1-24 2-36 3-4 3-27 3-33 4-0 4-10 4-13 4-16 4-37 8-1 8-7 8-12 8-15 8-32 10-26 12-18 14-8 22-23 23-6 23-11 23-14 23-21 23-25 23-31 26-28 28-2 28-9 28-19 28-22 28-29 28-30 34-5 34-34 34-38\n",
- "1JN 1:3\n",
- "Source: Los que hemos visto y oído eso mismo les contamos , para que también puedan participar de esta amistad junto a nosotros . Esta amistad con el Padre y su Hijo Jesucristo .\n",
- "Target: that which we have seen and heard we declare to you , that you also may have fellowship with us . Yes , and our fellowship is with the Father and with his Son , Jesus Christ .\n",
- "Alignment: 2-0 2-1 2-2 2-3 2-7 2-12 2-16 3-4 4-5 4-23 4-30 5-21 6-9 8-10 8-13 10-11 10-22 10-34 13-14 14-15 18-6 18-8 18-17 18-24 18-25 21-19 22-20 22-37 25-18 25-27 25-31 26-26 27-28 27-29 29-32 30-33 31-35 31-36\n",
- "1JN 1:4\n",
- "Source: Escribimos para decirles esto , a fin de que nuestra felicidad sea completa .\n",
- "Target: And we write these things to you , that our joy may be fulfilled .\n",
- "Alignment: 0-9 0-10 0-13 1-8 2-3 2-4 3-5 3-6 4-7 6-0 6-2 9-12 12-1 12-11 13-14\n",
- "1JN 1:5\n",
- "Source: Este es el mensaje que recibimos de él y que nosotros les declaramos a ustedes : Dios es luz , y no hay ningún vestigio de oscuridad en él .\n",
- "Target: This is the message which we have heard from him and announce to you , that God is light , and in him is no darkness at all .\n",
- "Alignment: 0-8 1-1 1-17 1-23 2-2 3-3 3-4 3-7 4-15 5-11 5-26 5-27 7-9 7-22 8-10 8-20 10-5 14-6 14-13 15-0 16-16 18-18 19-14 19-19 22-12 22-24 26-25 27-21 29-28\n"
- ]
- }
- ],
- "source": [
- "{\n",
- " using var model = new ThotIbm1WordAlignmentModel(\"out/VBL-WEB-IBM1/src_trg\");\n",
- " foreach (var row in parallelCorpus.Take(5))\n",
- " {\n",
- " var alignment = model.Align(row.SourceSegment.Lowercase(), row.TargetSegment.Lowercase());\n",
- "\n",
- " WriteLine($\"{row.Ref}\");\n",
- " WriteLine($\"Source: {row.SourceText}\");\n",
- " WriteLine($\"Target: {row.TargetText}\");\n",
- " WriteLine($\"Alignment: {alignment}\");\n",
- " }\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Getting model probabilities\n",
- "\n",
- "A statistical word alignment model consists of one or more conditional probability distributions that are estimated from the training data. For example, most models estimate a word translation probability distribution that can be queried to obtain the probability that a source word is a translation of a target word. Each model class has methods to obtain these probabilities. Let's try getting some translation probabilities from the IBM-1 model that we trained by calling the `GetTranslationProbability` method. In order to get the probability that a word does not translate to anything, you can pass `null` instead of the word string.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "es -> is: 0.2720\n",
- "NULL -> that: 0.0516\n"
- ]
- }
- ],
- "source": [
- "{\n",
- " using var model = new ThotIbm1WordAlignmentModel(\"out/VBL-WEB-IBM1/src_trg\");\n",
- " double prob = model.GetTranslationProbability(\"es\", \"is\");\n",
- " WriteLine($\"es -> is: {prob:0.0000}\");\n",
- " prob = model.GetTranslationProbability(null, \"that\");\n",
- " WriteLine($\"NULL -> that: {prob:0.0000}\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Symmetrized alignment models\n",
- "\n",
- "Most statistical word alignment models are directional and asymmetric. This means that it can only model one-to-one and one-to-many alignments in one direction. They are not capable of modeling many-to-many alignments, which can occur in some language pairs. One way to get around this limitation is to train models in both directions (source-to-target and target-to-source), and then merge the resulting alignments from the two models into a single alignment. This is called symmetrization and is a common practice when using statistical word alignment models. In addition, researchers have found that symmetrized alignments are better quality.\n"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Machine provides a special word alignment model class to support symmetrization called `SymmetrizedWordAlignmentModel`. Let's demonstrate how to use this class. First, we will train the symmetrized model using the `SymmetrizedWordAlignmentModelTrainer` class.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Training direct alignment model: 0.00%\n",
- "Training direct alignment model: 0.00%\n",
- "Training direct alignment model: 8.33%\n",
- "Training direct alignment model: 16.67%\n",
- "Training direct alignment model: 25.00%\n",
- "Training direct alignment model: 33.33%\n",
- "Training direct alignment model: 41.67%\n",
- "Training direct alignment model: 50.00%\n",
- "Training inverse alignment model: 50.00%\n",
- "Training inverse alignment model: 50.00%\n",
- "Training inverse alignment model: 58.33%\n",
- "Training inverse alignment model: 66.67%\n",
- "Training inverse alignment model: 75.00%\n",
- "Training inverse alignment model: 83.33%\n",
- "Training inverse alignment model: 91.67%\n",
- "Training inverse alignment model: 100.00%\n",
- "Symmetrized IBM-1 model saved\n"
- ]
- }
- ],
- "source": [
- "using SIL.Machine.Translation;\n",
- "\n",
- "{\n",
- " using var srcTrgTrainer = new ThotWordAlignmentModelTrainer(ThotWordAlignmentModelType.Ibm1,\n",
- " parallelCorpus.Lowercase(), \"out/VBL-WEB-IBM1/src_trg\");\n",
- " using var trgSrcTrainer = new ThotWordAlignmentModelTrainer(ThotWordAlignmentModelType.Ibm1,\n",
- " parallelCorpus.Invert().Lowercase(), \"out/VBL-WEB-IBM1/trg_src\");\n",
- " using var symmetrizedTrainer = new SymmetrizedWordAlignmentModelTrainer(srcTrgTrainer, trgSrcTrainer);\n",
- " await symmetrizedTrainer.TrainAsync(new DelegateProgress(status =>\n",
- " WriteLine($\"{status.Message}: {status.PercentCompleted:P}\")));\n",
- " await symmetrizedTrainer.SaveAsync();\n",
- " WriteLine(\"Symmetrized IBM-1 model saved\");\n",
- "}"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The model can also be trained using the `CreateTrainer` method on `SymmetrizedWordAlignmentModel`. Now that we've trained the symmetrized model, let's obtain some alignments. Machine supports many different symmetrization heuristics. The symmetrization heuristic to use when merging alignments can be specified using the `Heuristic` property. In this case, we will use the `GrowDiagFinalAnd` heuristic.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "dotnet_interactive": {
- "language": "csharp"
- },
- "vscode": {
- "languageId": "polyglot-notebook"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1JN 1:1\n",
- "Source: Esta carta trata sobre la Palabra de vida que existía desde el principio , que hemos escuchado , que hemos visto con nuestros propios ojos y le hemos contemplado , y que hemos tocado con nuestras manos .\n",
- "Target: That which was from the beginning , that which we have heard , that which we have seen with our eyes , that which we saw , and our hands touched , concerning the Word of life\n",
- "Alignment: 1-25 2-25 3-32 4-4 4-33 5-34 6-35 7-36 8-0 12-5 13-6 15-10 16-11 19-20 20-17 21-18 22-19 25-27 35-9\n",
- "1JN 1:2\n",
- "Source: Esta Vida nos fue revelada . La vimos y damos testimonio de ella . Estamos hablándoles de Aquél que es la Vida Eterna , que estaba con el Padre , y que nos fue revelado .\n",
- "Target: ( and the life was revealed , and we have seen , and testify , and declare to you the life , the eternal life , which was with the Father , and was revealed to us ) ;\n",
- "Alignment: 0-17 1-3 2-36 3-4 4-0 6-38 7-0 8-1 9-0 10-0 11-13 12-18 14-8 18-9 22-23 23-6 26-28 27-2 28-29 28-30 33-4 34-5\n",
- "1JN 1:3\n",
- "Source: Los que hemos visto y oído eso mismo les contamos , para que también puedan participar de esta amistad junto a nosotros . Esta amistad con el Padre y su Hijo Jesucristo .\n",
- "Target: that which we have seen and heard we declare to you , that you also may have fellowship with us . Yes , and our fellowship is with the Father and with his Son , Jesus Christ .\n",
- "Alignment: 1-0 2-1 2-2 2-3 3-4 4-5 5-21 6-9 8-10 10-11 13-14 14-15 17-8 18-17 19-17 21-19 22-20 24-17 25-18 26-26 27-28 27-29 29-32 30-33 31-35 31-36\n",
- "1JN 1:4\n",
- "Source: Escribimos para decirles esto , a fin de que nuestra felicidad sea completa .\n",
- "Target: And we write these things to you , that our joy may be fulfilled .\n",
- "Alignment: 0-13 1-8 2-4 3-3 3-5 3-6 4-7 6-0 9-12 10-13 11-13 12-13 13-14\n",
- "1JN 1:5\n",
- "Source: Este es el mensaje que recibimos de él y que nosotros les declaramos a ustedes : Dios es luz , y no hay ningún vestigio de oscuridad en él .\n",
- "Target: This is the message which we have heard from him and announce to you , that God is light , and in him is no darkness at all .\n",
- "Alignment: 0-8 1-0 1-1 2-2 3-3 3-4 4-15 5-11 6-27 7-9 8-10 10-5 12-11 13-12 14-13 16-16 18-18 19-14 19-19 21-24 22-24 26-25 27-21 29-28\n"
- ]
- }
- ],
- "source": [
- "{\n",
- " using var srcTrgModel = new ThotIbm1WordAlignmentModel(\"out/VBL-WEB-IBM1/src_trg\");\n",
- " using var trgSrcModel = new ThotIbm1WordAlignmentModel(\"out/VBL-WEB-IBM1/trg_src\");\n",
- " using var symmetrizedModel = new SymmetrizedWordAlignmentModel(srcTrgModel, trgSrcModel)\n",
- " {\n",
- " Heuristic = SymmetrizationHeuristic.GrowDiagFinalAnd\n",
- " };\n",
- " foreach (var row in parallelCorpus.Take(5))\n",
- " {\n",
- " var alignment = symmetrizedModel.Align(row.SourceSegment.Lowercase(), row.TargetSegment.Lowercase());\n",
- "\n",
- " WriteLine($\"{row.Ref}\");\n",
- " WriteLine($\"Source: {row.SourceText}\");\n",
- " WriteLine($\"Target: {row.TargetText}\");\n",
- " WriteLine($\"Alignment: {alignment}\");\n",
- " }\n",
- "}"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": ".NET (C#)",
- "language": "C#",
- "name": ".net-csharp"
- },
- "language_info": {
- "name": "C#"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/BuildJobOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/BuildJobOptions.cs
deleted file mode 100644
index b6dc8c328..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/BuildJobOptions.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class BuildJobOptions
-{
- public const string Key = "BuildJob";
-
- public IList ClearML { get; set; } = new List();
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/ClearMLBuildQueue.cs b/src/SIL.Machine.AspNetCore/Configuration/ClearMLBuildQueue.cs
deleted file mode 100644
index 9ffe279d8..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/ClearMLBuildQueue.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class ClearMLBuildQueue
-{
- public TranslationEngineType TranslationEngineType { get; set; }
- public string ModelType { get; set; } = "";
- public string Queue { get; set; } = "default";
- public string DockerImage { get; set; } = "";
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/ClearMLOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/ClearMLOptions.cs
deleted file mode 100644
index fdc9e0238..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/ClearMLOptions.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class ClearMLOptions
-{
- public const string Key = "ClearML";
-
- public string AccessKey { get; set; } = "";
- public string SecretKey { get; set; } = "";
- public bool BuildPollingEnabled { get; set; } = false;
- public TimeSpan BuildPollingTimeout { get; set; } = TimeSpan.FromSeconds(10);
- public string RootProject { get; set; } = "Machine";
- public string Project { get; set; } = "dev";
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/IEndpointRouteBuilderExtensions.cs b/src/SIL.Machine.AspNetCore/Configuration/IEndpointRouteBuilderExtensions.cs
deleted file mode 100644
index 694dd67eb..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/IEndpointRouteBuilderExtensions.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Microsoft.AspNetCore.Builder;
-
-public static class IEndpointRouteBuilderExtensions
-{
- public static IEndpointRouteBuilder MapServalTranslationEngineService(this IEndpointRouteBuilder builder)
- {
- builder.MapGrpcService();
-
- return builder;
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/IMachineBuilder.cs b/src/SIL.Machine.AspNetCore/Configuration/IMachineBuilder.cs
deleted file mode 100644
index f8dfbcd5a..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/IMachineBuilder.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Microsoft.Extensions.DependencyInjection;
-
-public interface IMachineBuilder
-{
- IServiceCollection Services { get; }
- IConfiguration? Configuration { get; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/IMachineBuilderExtensions.cs b/src/SIL.Machine.AspNetCore/Configuration/IMachineBuilderExtensions.cs
deleted file mode 100644
index 3d10565f6..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/IMachineBuilderExtensions.cs
+++ /dev/null
@@ -1,437 +0,0 @@
-using Serval.Translation.V1;
-
-namespace Microsoft.Extensions.DependencyInjection;
-
-public static class IMachineBuilderExtensions
-{
- public static IMachineBuilder AddServiceOptions(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- return builder;
- }
-
- public static IMachineBuilder AddServiceOptions(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- return builder;
- }
-
- public static IMachineBuilder AddSmtTransferEngineOptions(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- return builder;
- }
-
- public static IMachineBuilder AddSmtTransferEngineOptions(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- return builder;
- }
-
- public static IMachineBuilder AddClearMLOptions(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- return builder;
- }
-
- public static IMachineBuilder AddClearMLOptions(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- return builder;
- }
-
- public static IMachineBuilder AddMessageOutboxOptions(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- return builder;
- }
-
- public static IMachineBuilder AddMessageOutboxOptions(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- return builder;
- }
-
- public static IMachineBuilder AddSharedFileOptions(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- return builder;
- }
-
- public static IMachineBuilder AddSharedFileOptions(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- return builder;
- }
-
- public static IMachineBuilder AddBuildJobOptions(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- return builder;
- }
-
- public static IMachineBuilder AddBuildJobOptions(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- return builder;
- }
-
- public static IMachineBuilder AddThotSmtModel(this IMachineBuilder builder)
- {
- if (builder.Configuration is null)
- return builder.AddThotSmtModel(o => { });
- else
- return builder.AddThotSmtModel(builder.Configuration.GetSection(ThotSmtModelOptions.Key));
- }
-
- public static IMachineBuilder AddThotSmtModel(
- this IMachineBuilder builder,
- Action configureOptions
- )
- {
- builder.Services.Configure(configureOptions);
- builder.Services.AddSingleton();
- return builder;
- }
-
- public static IMachineBuilder AddThotSmtModel(this IMachineBuilder builder, IConfiguration config)
- {
- builder.Services.Configure(config);
- builder.Services.AddSingleton();
- return builder;
- }
-
- public static IMachineBuilder AddTransferEngine(this IMachineBuilder builder)
- {
- builder.Services.AddSingleton();
- return builder;
- }
-
- public static IMachineBuilder AddUnigramTruecaser(this IMachineBuilder builder)
- {
- builder.Services.AddSingleton();
- return builder;
- }
-
- public static IMachineBuilder AddClearMLService(this IMachineBuilder builder, string? connectionString = null)
- {
- connectionString ??= builder.Configuration?.GetConnectionString("ClearML");
- if (connectionString is null)
- throw new InvalidOperationException("ClearML connection string is required");
-
- builder
- .Services.AddHttpClient("ClearML")
- .ConfigureHttpClient(httpClient => httpClient.BaseAddress = new Uri(connectionString!))
- // Add retry policy; fail after approx. 2 + 4 + 8 = 14 seconds
- .AddTransientHttpErrorPolicy(b =>
- b.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)))
- );
-
- builder.Services.AddSingleton();
-
- // workaround register satisfying the interface and as a hosted service.
- builder.Services.AddSingleton();
- builder.Services.AddHostedService(p => p.GetRequiredService());
-
- builder
- .Services.AddHttpClient("ClearML-NoRetry")
- .ConfigureHttpClient(httpClient => httpClient.BaseAddress = new Uri(connectionString!));
- builder.Services.AddSingleton();
-
- builder.Services.AddHealthChecks().AddCheck("ClearML Health Check");
-
- return builder;
- }
-
- private static MongoStorageOptions GetMongoStorageOptions()
- {
- var mongoStorageOptions = new MongoStorageOptions
- {
- MigrationOptions = new MongoMigrationOptions
- {
- MigrationStrategy = new MigrateMongoMigrationStrategy(),
- BackupStrategy = new CollectionMongoBackupStrategy()
- },
- CheckConnection = true,
- CheckQueuedJobsStrategy = CheckQueuedJobsStrategy.TailNotificationsCollection,
- };
- return mongoStorageOptions;
- }
-
- public static IMachineBuilder AddMongoHangfireJobClient(
- this IMachineBuilder builder,
- string? connectionString = null
- )
- {
- connectionString ??= builder.Configuration?.GetConnectionString("Hangfire");
- if (connectionString is null)
- throw new InvalidOperationException("Hangfire connection string is required");
-
- builder.Services.AddHangfire(c =>
- c.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
- .UseSimpleAssemblyNameTypeSerializer()
- .UseRecommendedSerializerSettings()
- .UseMongoStorage(connectionString, GetMongoStorageOptions())
- .UseFilter(new AutomaticRetryAttribute { Attempts = 0 })
- );
- builder.Services.AddHealthChecks().AddCheck(name: "Hangfire");
- return builder;
- }
-
- public static IMachineBuilder AddHangfireJobServer(
- this IMachineBuilder builder,
- IEnumerable? engineTypes = null
- )
- {
- engineTypes ??=
- builder.Configuration?.GetSection("TranslationEngines").Get()
- ?? [TranslationEngineType.SmtTransfer, TranslationEngineType.Nmt];
- var queues = new List();
- foreach (TranslationEngineType engineType in engineTypes.Distinct())
- {
- switch (engineType)
- {
- case TranslationEngineType.SmtTransfer:
- builder.Services.AddSingleton();
- builder.AddThotSmtModel().AddTransferEngine().AddUnigramTruecaser();
- queues.Add("smt_transfer");
- break;
- case TranslationEngineType.Nmt:
- queues.Add("nmt");
- break;
- }
- }
-
- builder.Services.AddHangfireServer(o =>
- {
- o.Queues = queues.ToArray();
- });
- return builder;
- }
-
- public static IMachineBuilder AddMemoryDataAccess(this IMachineBuilder builder)
- {
- builder.Services.AddMemoryDataAccess(o =>
- {
- o.AddRepository();
- o.AddRepository();
- o.AddRepository();
- o.AddRepository();
- o.AddRepository();
- });
-
- return builder;
- }
-
- public static IMachineBuilder AddMongoDataAccess(this IMachineBuilder builder, string? connectionString = null)
- {
- connectionString ??= builder.Configuration?.GetConnectionString("Mongo");
- if (connectionString is null)
- throw new InvalidOperationException("Mongo connection string is required");
- builder.Services.AddMongoDataAccess(
- connectionString!,
- "SIL.Machine.AspNetCore.Models",
- o =>
- {
- o.AddRepository(
- "translation_engines",
- mapSetup: m => m.SetIgnoreExtraElements(true),
- init: async c =>
- {
- await c.Indexes.CreateOrUpdateAsync(
- new CreateIndexModel(
- Builders
- .IndexKeys.Ascending(e => e.EngineId)
- .Ascending("currentBuild._id")
- )
- );
- await c.Indexes.CreateOrUpdateAsync(
- new CreateIndexModel(
- Builders.IndexKeys.Ascending(e => e.CurrentBuild!.BuildJobRunner)
- )
- );
- }
- );
- o.AddRepository("locks");
- o.AddRepository(
- "train_segment_pairs",
- init: c =>
- c.Indexes.CreateOrUpdateAsync(
- new CreateIndexModel(
- Builders.IndexKeys.Ascending(p => p.TranslationEngineRef)
- )
- )
- );
- o.AddRepository(
- "outbox_messages",
- mapSetup: m => m.MapProperty(m => m.OutboxRef).SetSerializer(new StringSerializer())
- );
- o.AddRepository(
- "outboxes",
- mapSetup: m => m.MapIdProperty(o => o.Id).SetSerializer(new StringSerializer())
- );
- }
- );
- builder.Services.AddHealthChecks().AddMongoDb(connectionString!, name: "Mongo");
-
- return builder;
- }
-
- public static IMachineBuilder AddServalPlatformService(
- this IMachineBuilder builder,
- string? connectionString = null
- )
- {
- connectionString ??= builder.Configuration?.GetConnectionString("Serval");
- if (connectionString is null)
- throw new InvalidOperationException("Serval connection string is required");
-
- builder.Services.AddScoped();
-
- builder.Services.AddSingleton();
-
- builder.Services.AddScoped();
-
- builder
- .Services.AddGrpcClient(o =>
- {
- o.Address = new Uri(connectionString);
- })
- .ConfigureChannel(o =>
- {
- o.MaxRetryAttempts = null;
- o.ServiceConfig = new ServiceConfig
- {
- MethodConfigs =
- {
- new MethodConfig
- {
- Names = { MethodName.Default },
- RetryPolicy = new Grpc.Net.Client.Configuration.RetryPolicy
- {
- MaxAttempts = 10,
- InitialBackoff = TimeSpan.FromSeconds(1),
- MaxBackoff = TimeSpan.FromSeconds(5),
- BackoffMultiplier = 1.5,
- RetryableStatusCodes = { StatusCode.Unavailable }
- }
- },
- new MethodConfig
- {
- Names =
- {
- new MethodName
- {
- Service = "serval.translation.v1.TranslationPlatformApi",
- Method = "UpdateBuildStatus"
- }
- }
- },
- }
- };
- });
-
- return builder;
- }
-
- public static IMachineBuilder AddServalTranslationEngineService(
- this IMachineBuilder builder,
- string? connectionString = null,
- IEnumerable? engineTypes = null
- )
- {
- builder.Services.AddGrpc(options =>
- {
- options.Interceptors.Add();
- options.Interceptors.Add();
- });
- builder.AddServalPlatformService(connectionString);
-
- engineTypes ??=
- builder.Configuration?.GetSection("TranslationEngines").Get()
- ?? [TranslationEngineType.SmtTransfer, TranslationEngineType.Nmt];
- foreach (TranslationEngineType engineType in engineTypes.Distinct())
- {
- switch (engineType)
- {
- case TranslationEngineType.SmtTransfer:
- builder.Services.AddSingleton();
- builder.Services.AddHostedService();
- builder.AddThotSmtModel().AddTransferEngine().AddUnigramTruecaser();
- builder.Services.AddScoped();
- break;
- case TranslationEngineType.Nmt:
- builder.Services.AddScoped();
- break;
- }
- }
-
- return builder;
- }
-
- public static IMachineBuilder AddBuildJobService(this IMachineBuilder builder, string? smtTransferEngineDir = null)
- {
- builder.Services.AddScoped();
-
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddSingleton();
- builder.Services.AddSingleton(x => x.GetRequiredService());
- builder.Services.AddHostedService(p => p.GetRequiredService());
-
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
-
- if (smtTransferEngineDir is null)
- {
- var smtTransferEngineOptions = new SmtTransferEngineOptions();
- builder.Configuration?.GetSection(SmtTransferEngineOptions.Key).Bind(smtTransferEngineOptions);
- smtTransferEngineDir = smtTransferEngineOptions.EnginesDir;
- }
- string? driveLetter = Path.GetPathRoot(smtTransferEngineDir)?[..1];
- if (driveLetter is null)
- throw new InvalidOperationException("SMT Engine directory is required");
- // add health check for disk storage capacity
- builder
- .Services.AddHealthChecks()
- .AddDiskStorageHealthCheck(
- x => x.AddDrive(driveLetter, 1_000), // 1GB
- "SMT Engine Storage Capacity",
- HealthStatus.Degraded
- );
-
- return builder;
- }
-
- public static IMachineBuilder AddModelCleanupService(this IMachineBuilder builder)
- {
- builder.Services.AddHostedService();
- return builder;
- }
-
- public static IMachineBuilder AddMessageOutboxDeliveryService(this IMachineBuilder builder)
- {
- builder.Services.AddHostedService();
- return builder;
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/IServiceCollectionExtensions.cs b/src/SIL.Machine.AspNetCore/Configuration/IServiceCollectionExtensions.cs
deleted file mode 100644
index 7463e6acd..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/IServiceCollectionExtensions.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-namespace Microsoft.Extensions.DependencyInjection;
-
-public static class IServiceCollectionExtensions
-{
- public static IMachineBuilder AddMachine(this IServiceCollection services, IConfiguration? configuration = null)
- {
- if (!Sldr.IsInitialized)
- Sldr.Initialize();
-
- services.AddSingleton();
- services.AddSingleton();
- services.AddHealthChecks().AddCheck("S3 Bucket");
-
- services.AddSingleton();
- services.AddTransient();
-
- services.AddScoped();
- services.AddSingleton();
- services.AddStartupTask(
- (sp, cancellationToken) =>
- sp.GetRequiredService().InitAsync(cancellationToken)
- );
-
- var builder = new MachineBuilder(services, configuration);
- if (configuration is null)
- {
- builder.AddServiceOptions(o => { });
- builder.AddSharedFileOptions(o => { });
- builder.AddSmtTransferEngineOptions(o => { });
- builder.AddClearMLOptions(o => { });
- builder.AddBuildJobOptions(o => { });
- builder.AddMessageOutboxOptions(o => { });
- }
- else
- {
- builder.AddServiceOptions(configuration.GetSection(ServiceOptions.Key));
- builder.AddSharedFileOptions(configuration.GetSection(SharedFileOptions.Key));
- builder.AddSmtTransferEngineOptions(configuration.GetSection(SmtTransferEngineOptions.Key));
- builder.AddClearMLOptions(configuration.GetSection(ClearMLOptions.Key));
- builder.AddBuildJobOptions(configuration.GetSection(BuildJobOptions.Key));
- builder.AddMessageOutboxOptions(configuration.GetSection(MessageOutboxOptions.Key));
- }
- return builder;
- }
-
- public static IServiceCollection AddStartupTask(
- this IServiceCollection services,
- Func startupTask
- )
- {
- services.AddHostedService(sp => new StartupTask(sp, startupTask));
- return services;
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/MachineBuilder.cs b/src/SIL.Machine.AspNetCore/Configuration/MachineBuilder.cs
deleted file mode 100644
index 58ddf5c15..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/MachineBuilder.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Microsoft.Extensions.DependencyInjection;
-
-internal class MachineBuilder(IServiceCollection services, IConfiguration? configuration) : IMachineBuilder
-{
- public IServiceCollection Services { get; } = services;
- public IConfiguration? Configuration { get; } = configuration;
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/MessageOutboxOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/MessageOutboxOptions.cs
deleted file mode 100644
index e4b9946bf..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/MessageOutboxOptions.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class MessageOutboxOptions
-{
- public const string Key = "MessageOutbox";
-
- public string OutboxDir { get; set; } = "outbox";
- public TimeSpan MessageExpirationTimeout { get; set; } = TimeSpan.FromHours(48);
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/ServiceOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/ServiceOptions.cs
deleted file mode 100644
index 37bc17d9d..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/ServiceOptions.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class ServiceOptions
-{
- public const string Key = "Service";
-
- public string ServiceId { get; set; } = "machine_api";
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/SharedFileOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/SharedFileOptions.cs
deleted file mode 100644
index a732296f9..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/SharedFileOptions.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class SharedFileOptions
-{
- public const string Key = "SharedFile";
-
- public string Uri { get; set; } = "file:///var/lib/machine/";
- public string S3AccessKeyId { get; set; } = "";
- public string S3SecretAccessKey { get; set; } = "";
- public string S3Region { get; set; } = "us-east-1";
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/SmtTransferEngineOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/SmtTransferEngineOptions.cs
deleted file mode 100644
index 67df3d1d5..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/SmtTransferEngineOptions.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class SmtTransferEngineOptions
-{
- public const string Key = "SmtTransferEngine";
-
- public string EnginesDir { get; set; } = "translation_engines";
- public TimeSpan EngineCommitFrequency { get; set; } = TimeSpan.FromMinutes(5);
- public TimeSpan InactiveEngineTimeout { get; set; } = TimeSpan.FromMinutes(10);
-}
diff --git a/src/SIL.Machine.AspNetCore/Configuration/ThotSmtModelOptions.cs b/src/SIL.Machine.AspNetCore/Configuration/ThotSmtModelOptions.cs
deleted file mode 100644
index 5941cac46..000000000
--- a/src/SIL.Machine.AspNetCore/Configuration/ThotSmtModelOptions.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace SIL.Machine.AspNetCore.Configuration;
-
-public class ThotSmtModelOptions
-{
- public const string Key = "ThotSmtModel";
-
- public ThotSmtModelOptions()
- {
- string installDir = Path.GetDirectoryName(Assembly.GetEntryAssembly()!.Location)!;
- NewModelFile = Path.Combine(installDir, "thot-new-model.zip");
- }
-
- public string NewModelFile { get; set; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/Build.cs b/src/SIL.Machine.AspNetCore/Models/Build.cs
deleted file mode 100644
index 89a4bdc83..000000000
--- a/src/SIL.Machine.AspNetCore/Models/Build.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public enum BuildJobState
-{
- None,
- Pending,
- Active,
- Canceling
-}
-
-public enum BuildJobRunnerType
-{
- Hangfire,
- ClearML
-}
-
-public enum BuildStage
-{
- Preprocess,
- Train,
- Postprocess
-}
-
-public record Build
-{
- public required string BuildId { get; init; }
- public required BuildJobState JobState { get; init; }
- public required string JobId { get; init; }
- public required BuildJobRunnerType BuildJobRunner { get; init; }
- public required BuildStage Stage { get; init; }
- public string? Options { get; set; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/ClearMLMetricsEvent.cs b/src/SIL.Machine.AspNetCore/Models/ClearMLMetricsEvent.cs
deleted file mode 100644
index 69d56946d..000000000
--- a/src/SIL.Machine.AspNetCore/Models/ClearMLMetricsEvent.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record ClearMLMetricsEvent
-{
- public string? Metric { get; init; }
- public string? Variant { get; init; }
- public required double Value { get; init; }
- public double? MinValue { get; init; }
- public int? MinValueIteration { get; init; }
- public double? MaxValue { get; init; }
- public int? MaxValueIteration { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/ClearMLProject.cs b/src/SIL.Machine.AspNetCore/Models/ClearMLProject.cs
deleted file mode 100644
index ca6cf6883..000000000
--- a/src/SIL.Machine.AspNetCore/Models/ClearMLProject.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record ClearMLProject
-{
- public required string Id { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/ClearMLTask.cs b/src/SIL.Machine.AspNetCore/Models/ClearMLTask.cs
deleted file mode 100644
index 9a05325ce..000000000
--- a/src/SIL.Machine.AspNetCore/Models/ClearMLTask.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public enum ClearMLTaskStatus
-{
- Created,
- Queued,
- InProgress,
- Stopped,
- Published,
- Publishing,
- Closed,
- Failed,
- Completed,
- Unknown
-}
-
-public record ClearMLTask
-{
- public required string Id { get; init; }
- public required string Name { get; init; }
- public required ClearMLProject Project { get; init; }
- public required ClearMLTaskStatus Status { get; init; }
- public string? StatusReason { get; init; }
- public string? StatusMessage { get; init; }
- public required DateTime Created { get; init; }
- public int? LastIteration { get; init; }
- public int ActiveDuration { get; init; }
- public required IReadOnlyDictionary<
- string,
- IReadOnlyDictionary
- > LastMetrics { get; init; }
-
- [JsonConverter(typeof(DictionaryStringStringConverter))]
- public required IReadOnlyDictionary Runtime { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/Corpus.cs b/src/SIL.Machine.AspNetCore/Models/Corpus.cs
deleted file mode 100644
index a6847555d..000000000
--- a/src/SIL.Machine.AspNetCore/Models/Corpus.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record Corpus
-{
- public required string Id { get; init; }
- public required string SourceLanguage { get; init; }
- public required string TargetLanguage { get; init; }
- public IReadOnlyDictionary>? TrainOnChapters { get; init; }
- public IReadOnlyDictionary>? PretranslateChapters { get; init; }
- public required HashSet? TrainOnTextIds { get; init; }
- public required HashSet? PretranslateTextIds { get; init; }
- public required IReadOnlyList SourceFiles { get; init; }
- public required IReadOnlyList TargetFiles { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/CorpusFile.cs b/src/SIL.Machine.AspNetCore/Models/CorpusFile.cs
deleted file mode 100644
index 4df8dd8c1..000000000
--- a/src/SIL.Machine.AspNetCore/Models/CorpusFile.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public enum FileFormat
-{
- Text = 0,
- Paratext = 1
-}
-
-public record CorpusFile
-{
- public required string Location { get; init; }
- public required FileFormat Format { get; init; }
- public required string TextId { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/Lock.cs b/src/SIL.Machine.AspNetCore/Models/Lock.cs
deleted file mode 100644
index 3ea408614..000000000
--- a/src/SIL.Machine.AspNetCore/Models/Lock.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record Lock
-{
- public required string Id { get; init; }
- public DateTime? ExpiresAt { get; init; }
- public required string HostId { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/ModelDownloadUrl.cs b/src/SIL.Machine.AspNetCore/Models/ModelDownloadUrl.cs
deleted file mode 100644
index a00da8f57..000000000
--- a/src/SIL.Machine.AspNetCore/Models/ModelDownloadUrl.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record ModelDownloadUrl
-{
- public required string Url { get; init; }
- public required int ModelRevision { get; init; }
- public required DateTime ExpiresAt { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/Outbox.cs b/src/SIL.Machine.AspNetCore/Models/Outbox.cs
deleted file mode 100644
index 63e9441e4..000000000
--- a/src/SIL.Machine.AspNetCore/Models/Outbox.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record Outbox : IEntity
-{
- public string Id { get; set; } = "";
-
- public int Revision { get; set; }
-
- public int CurrentIndex { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/OutboxMessage.cs b/src/SIL.Machine.AspNetCore/Models/OutboxMessage.cs
deleted file mode 100644
index 8ec9462cd..000000000
--- a/src/SIL.Machine.AspNetCore/Models/OutboxMessage.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record OutboxMessage : IEntity
-{
- public string Id { get; set; } = "";
- public int Revision { get; set; } = 1;
- public required int Index { get; init; }
- public required string OutboxRef { get; init; }
- public required string Method { get; init; }
- public required string GroupId { get; init; }
- public string? Content { get; init; }
- public required bool HasContentStream { get; init; }
- public DateTimeOffset Created { get; init; } = DateTimeOffset.UtcNow;
- public int Attempts { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/Pretranslation.cs b/src/SIL.Machine.AspNetCore/Models/Pretranslation.cs
deleted file mode 100644
index 31d895184..000000000
--- a/src/SIL.Machine.AspNetCore/Models/Pretranslation.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record Pretranslation
-{
- public required string CorpusId { get; init; }
- public required string TextId { get; init; }
- public required IReadOnlyList Refs { get; init; }
- public required string Translation { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/RWLock.cs b/src/SIL.Machine.AspNetCore/Models/RWLock.cs
deleted file mode 100644
index 6475e29f5..000000000
--- a/src/SIL.Machine.AspNetCore/Models/RWLock.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record RWLock : IEntity
-{
- public string Id { get; set; } = "";
- public int Revision { get; set; } = 1;
- public Lock? WriterLock { get; init; }
- public required IReadOnlyList ReaderLocks { get; init; }
- public required IReadOnlyList WriterQueue { get; init; }
-
- public bool IsAvailableForReading()
- {
- var now = DateTime.UtcNow;
- return (WriterLock is null || WriterLock.ExpiresAt is not null && WriterLock.ExpiresAt <= now)
- && WriterQueue.Count == 0;
- }
-
- public bool IsAvailableForWriting(string? lockId = null)
- {
- var now = DateTime.UtcNow;
- return (WriterLock is null || WriterLock.ExpiresAt is not null && WriterLock.ExpiresAt <= now)
- && !ReaderLocks.Any(l => l.ExpiresAt is null || l.ExpiresAt > now)
- && (lockId is null || WriterQueue.FirstOrDefault()?.Id == lockId);
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/TrainSegmentPair.cs b/src/SIL.Machine.AspNetCore/Models/TrainSegmentPair.cs
deleted file mode 100644
index 471b5296d..000000000
--- a/src/SIL.Machine.AspNetCore/Models/TrainSegmentPair.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record TrainSegmentPair : IEntity
-{
- public string Id { get; set; } = "";
- public int Revision { get; set; } = 1;
- public required string TranslationEngineRef { get; init; }
- public required string Source { get; init; }
- public required string Target { get; init; }
- public required bool SentenceStart { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Models/TranslationEngine.cs b/src/SIL.Machine.AspNetCore/Models/TranslationEngine.cs
deleted file mode 100644
index cedb504c6..000000000
--- a/src/SIL.Machine.AspNetCore/Models/TranslationEngine.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace SIL.Machine.AspNetCore.Models;
-
-public record TranslationEngine : IEntity
-{
- public string Id { get; set; } = "";
- public int Revision { get; set; } = 1;
- public required string EngineId { get; init; }
- public required TranslationEngineType Type { get; init; }
- public required string SourceLanguage { get; init; }
- public required string TargetLanguage { get; init; }
- public required bool IsModelPersisted { get; init; }
- public int BuildRevision { get; init; }
- public Build? CurrentBuild { get; init; }
-}
diff --git a/src/SIL.Machine.AspNetCore/Properties/AssemblyInfo.cs b/src/SIL.Machine.AspNetCore/Properties/AssemblyInfo.cs
deleted file mode 100644
index a6d427972..000000000
--- a/src/SIL.Machine.AspNetCore/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,2 +0,0 @@
-[assembly: InternalsVisibleTo("SIL.Machine.AspNetCore.Tests")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
diff --git a/src/SIL.Machine.AspNetCore/SIL.Machine.AspNetCore.csproj b/src/SIL.Machine.AspNetCore/SIL.Machine.AspNetCore.csproj
deleted file mode 100644
index 159e7bab9..000000000
--- a/src/SIL.Machine.AspNetCore/SIL.Machine.AspNetCore.csproj
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
- net8.0
- An ASP.NET Core web API middleware for the Machine library.
- enable
- enable
- true
- true
- true
- $(NoWarn);CS1591;CS1573
-
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/SIL.Machine.AspNetCore/Services/BuildJobService.cs b/src/SIL.Machine.AspNetCore/Services/BuildJobService.cs
deleted file mode 100644
index 406474283..000000000
--- a/src/SIL.Machine.AspNetCore/Services/BuildJobService.cs
+++ /dev/null
@@ -1,211 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class BuildJobService(IEnumerable runners, IRepository engines)
- : IBuildJobService
-{
- private readonly Dictionary _runners = runners.ToDictionary(r => r.Type);
- private readonly IRepository _engines = engines;
-
- public Task IsEngineBuilding(string engineId, CancellationToken cancellationToken = default)
- {
- return _engines.ExistsAsync(e => e.EngineId == engineId && e.CurrentBuild != null, cancellationToken);
- }
-
- public Task> GetBuildingEnginesAsync(
- BuildJobRunnerType runner,
- CancellationToken cancellationToken = default
- )
- {
- return _engines.GetAllAsync(
- e => e.CurrentBuild != null && e.CurrentBuild.BuildJobRunner == runner,
- cancellationToken
- );
- }
-
- public async Task GetBuildAsync(
- string engineId,
- string buildId,
- CancellationToken cancellationToken = default
- )
- {
- TranslationEngine? engine = await _engines.GetAsync(
- e => e.EngineId == engineId && e.CurrentBuild != null && e.CurrentBuild.BuildId == buildId,
- cancellationToken
- );
- return engine?.CurrentBuild;
- }
-
- public async Task CreateEngineAsync(
- string engineId,
- string? name = null,
- CancellationToken cancellationToken = default
- )
- {
- foreach (BuildJobRunnerType runnerType in _runners.Keys)
- {
- IBuildJobRunner runner = _runners[runnerType];
- await runner.CreateEngineAsync(engineId, name, cancellationToken);
- }
- }
-
- public async Task DeleteEngineAsync(string engineId, CancellationToken cancellationToken = default)
- {
- foreach (BuildJobRunnerType runnerType in _runners.Keys)
- {
- IBuildJobRunner runner = _runners[runnerType];
- await runner.DeleteEngineAsync(engineId, cancellationToken);
- }
- }
-
- public async Task StartBuildJobAsync(
- BuildJobRunnerType runnerType,
- string engineId,
- string buildId,
- BuildStage stage,
- object? data = null,
- string? buildOptions = null,
- CancellationToken cancellationToken = default
- )
- {
- TranslationEngine? engine = await _engines.GetAsync(
- e =>
- e.EngineId == engineId
- && (e.CurrentBuild == null || e.CurrentBuild.JobState != BuildJobState.Canceling),
- cancellationToken
- );
- if (engine is null)
- return false;
-
- IBuildJobRunner runner = _runners[runnerType];
- string jobId = await runner.CreateJobAsync(
- engine.Type,
- engineId,
- buildId,
- stage,
- data,
- buildOptions,
- cancellationToken
- );
- try
- {
- await _engines.UpdateAsync(
- e => e.EngineId == engineId,
- u =>
- u.Set(
- e => e.CurrentBuild,
- new Build
- {
- BuildId = buildId,
- JobId = jobId,
- BuildJobRunner = runner.Type,
- Stage = stage,
- JobState = BuildJobState.Pending,
- Options = buildOptions
- }
- ),
- cancellationToken: cancellationToken
- );
- await runner.EnqueueJobAsync(jobId, engine.Type, cancellationToken);
- return true;
- }
- catch
- {
- await runner.DeleteJobAsync(jobId, CancellationToken.None);
- throw;
- }
- }
-
- public async Task<(string? BuildId, BuildJobState State)> CancelBuildJobAsync(
- string engineId,
- CancellationToken cancellationToken = default
- )
- {
- TranslationEngine? engine = await _engines.GetAsync(
- e => e.EngineId == engineId && e.CurrentBuild != null,
- cancellationToken
- );
- if (engine is null || engine.CurrentBuild is null)
- return (null, BuildJobState.None);
-
- IBuildJobRunner runner = _runners[engine.CurrentBuild.BuildJobRunner];
-
- if (engine.CurrentBuild.JobState is BuildJobState.Pending)
- {
- // cancel a job that hasn't started yet
- engine = await _engines.UpdateAsync(
- e => e.EngineId == engineId && e.CurrentBuild != null,
- u => u.Unset(b => b.CurrentBuild),
- returnOriginal: true,
- cancellationToken: cancellationToken
- );
- if (engine is not null && engine.CurrentBuild is not null)
- {
- // job will be deleted from the queue
- await runner.StopJobAsync(engine.CurrentBuild.JobId, CancellationToken.None);
- return (engine.CurrentBuild.BuildId, BuildJobState.None);
- }
- }
- else if (engine.CurrentBuild.JobState is BuildJobState.Active)
- {
- // cancel a job that is already running
- engine = await _engines.UpdateAsync(
- e => e.EngineId == engineId && e.CurrentBuild != null,
- u => u.Set(e => e.CurrentBuild!.JobState, BuildJobState.Canceling),
- cancellationToken: cancellationToken
- );
- if (engine is not null && engine.CurrentBuild is not null)
- {
- await runner.StopJobAsync(engine.CurrentBuild.JobId, CancellationToken.None);
- return (engine.CurrentBuild.BuildId, BuildJobState.Canceling);
- }
- }
-
- return (null, BuildJobState.None);
- }
-
- public async Task BuildJobStartedAsync(
- string engineId,
- string buildId,
- CancellationToken cancellationToken = default
- )
- {
- TranslationEngine? engine = await _engines.UpdateAsync(
- e =>
- e.EngineId == engineId
- && e.CurrentBuild != null
- && e.CurrentBuild.BuildId == buildId
- && e.CurrentBuild.JobState == BuildJobState.Pending,
- u => u.Set(e => e.CurrentBuild!.JobState, BuildJobState.Active),
- cancellationToken: cancellationToken
- );
- return engine is not null;
- }
-
- public Task BuildJobFinishedAsync(
- string engineId,
- string buildId,
- bool buildComplete,
- CancellationToken cancellationToken = default
- )
- {
- return _engines.UpdateAsync(
- e => e.EngineId == engineId && e.CurrentBuild != null && e.CurrentBuild.BuildId == buildId,
- u =>
- {
- u.Unset(e => e.CurrentBuild);
- if (buildComplete)
- u.Inc(e => e.BuildRevision);
- },
- cancellationToken: cancellationToken
- );
- }
-
- public Task BuildJobRestartingAsync(string engineId, string buildId, CancellationToken cancellationToken = default)
- {
- return _engines.UpdateAsync(
- e => e.EngineId == engineId && e.CurrentBuild != null && e.CurrentBuild.BuildId == buildId,
- u => u.Set(e => e.CurrentBuild!.JobState, BuildJobState.Pending),
- cancellationToken: cancellationToken
- );
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/BuildProgress.cs b/src/SIL.Machine.AspNetCore/Services/BuildProgress.cs
deleted file mode 100644
index 44de1c7de..000000000
--- a/src/SIL.Machine.AspNetCore/Services/BuildProgress.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class BuildProgress(IPlatformService platformService, string buildId) : IProgress
-{
- private readonly IPlatformService _platformService = platformService;
- private readonly string _buildId = buildId;
- private ProgressStatus _prevStatus;
-
- private DateTime _lastReportTime = DateTime.Now;
-
- private const float ThrottleTimeSeconds = 1;
-
- public void Report(ProgressStatus value)
- {
- if (_prevStatus.Equals(value))
- return;
-
- if (DateTime.Now < _lastReportTime.AddSeconds(ThrottleTimeSeconds))
- return;
-
- _lastReportTime = DateTime.Now;
- _platformService.UpdateBuildStatusAsync(_buildId, value);
- _prevStatus = value;
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/CancellationInterceptor.cs b/src/SIL.Machine.AspNetCore/Services/CancellationInterceptor.cs
deleted file mode 100644
index 81b765054..000000000
--- a/src/SIL.Machine.AspNetCore/Services/CancellationInterceptor.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class CancellationInterceptor(ILogger logger) : Interceptor
-{
- private readonly ILogger _logger = logger;
-
- public override async Task UnaryServerHandler(
- TRequest request,
- ServerCallContext context,
- UnaryServerMethod continuation
- )
- {
- try
- {
- return await continuation(request, context);
- }
- catch (Exception ex)
- {
- if (ex is OperationCanceledException)
- {
- _logger.LogInformation("An operation was canceled.");
- throw new RpcException(new Status(StatusCode.Cancelled, "An operation was canceled."));
- }
- else
- {
- throw;
- }
- }
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs b/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs
deleted file mode 100644
index 68c72a081..000000000
--- a/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class ClearMLAuthenticationService(
- IServiceProvider services,
- IHttpClientFactory httpClientFactory,
- IOptionsMonitor options,
- ILogger logger
-) : RecurrentTask("ClearML authentication service", services, RefreshPeriod, logger), IClearMLAuthenticationService
-{
- private readonly HttpClient _httpClient = httpClientFactory.CreateClient("ClearML");
- private readonly IOptionsMonitor _options = options;
- private readonly ILogger _logger = logger;
- private readonly AsyncLock _lock = new();
-
- // technically, the token should be good for 30 days, but let's refresh each hour
- // to know well ahead of time if something is wrong.
- private static readonly TimeSpan RefreshPeriod = TimeSpan.FromSeconds(3600);
- private string _authToken = "";
-
- public async Task GetAuthTokenAsync(CancellationToken cancellationToken = default)
- {
- using (await _lock.LockAsync(cancellationToken))
- {
- if (_authToken is "")
- {
- //Should only happen once, so no different in cost than previous solution
- _logger.LogInformation("Token was empty; refreshing");
- await AuthorizeAsync(cancellationToken);
- }
- }
- return _authToken;
- }
-
- protected override async Task DoWorkAsync(IServiceScope scope, CancellationToken cancellationToken)
- {
- try
- {
- using (await _lock.LockAsync(cancellationToken))
- await AuthorizeAsync(cancellationToken);
- }
- catch (Exception e)
- {
- if (_authToken is "")
- {
- _logger.LogError(e, "Error occurred while acquiring ClearML authentication token for the first time.");
- // The ClearML token never was set. We can't continue without it.
- throw;
- }
- else
- {
- _logger.LogError(e, "Error occurred while refreshing ClearML authentication token.");
- }
- }
- }
-
- private async Task AuthorizeAsync(CancellationToken cancellationToken)
- {
- var request = new HttpRequestMessage(HttpMethod.Post, "auth.login")
- {
- Content = new StringContent("{}", Encoding.UTF8, "application/json")
- };
- var authenticationString = $"{_options.CurrentValue.AccessKey}:{_options.CurrentValue.SecretKey}";
- var base64EncodedAuthenticationString = Convert.ToBase64String(Encoding.ASCII.GetBytes(authenticationString));
- request.Headers.Add("Authorization", $"Basic {base64EncodedAuthenticationString}");
- HttpResponseMessage response = await _httpClient.SendAsync(request, cancellationToken);
- string result = await response.Content.ReadAsStringAsync(cancellationToken);
- string? refreshedToken = (string?)((JsonObject?)JsonNode.Parse(result))?["data"]?["token"];
- if (refreshedToken is null || refreshedToken is "")
- throw new Exception($"ClearML authentication failed - {response.StatusCode}: {response.ReasonPhrase}");
- _authToken = refreshedToken;
- _logger.LogInformation("ClearML Authentication Token Refresh Successful.");
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/ClearMLBuildJobRunner.cs b/src/SIL.Machine.AspNetCore/Services/ClearMLBuildJobRunner.cs
deleted file mode 100644
index 234f05e3b..000000000
--- a/src/SIL.Machine.AspNetCore/Services/ClearMLBuildJobRunner.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class ClearMLBuildJobRunner(
- IClearMLService clearMLService,
- IEnumerable buildJobFactories,
- IOptionsMonitor options
-) : IBuildJobRunner
-{
- private readonly IClearMLService _clearMLService = clearMLService;
- private readonly Dictionary _buildJobFactories =
- buildJobFactories.ToDictionary(f => f.EngineType);
-
- private readonly Dictionary _options =
- options.CurrentValue.ClearML.ToDictionary(o => o.TranslationEngineType);
-
- public BuildJobRunnerType Type => BuildJobRunnerType.ClearML;
-
- public async Task CreateEngineAsync(
- string engineId,
- string? name = null,
- CancellationToken cancellationToken = default
- )
- {
- await _clearMLService.CreateProjectAsync(engineId, name, cancellationToken);
- }
-
- public async Task DeleteEngineAsync(string engineId, CancellationToken cancellationToken = default)
- {
- string? projectId = await _clearMLService.GetProjectIdAsync(engineId, cancellationToken);
- if (projectId is not null)
- await _clearMLService.DeleteProjectAsync(projectId, cancellationToken);
- }
-
- public async Task CreateJobAsync(
- TranslationEngineType engineType,
- string engineId,
- string buildId,
- BuildStage stage,
- object? data = null,
- string? buildOptions = null,
- CancellationToken cancellationToken = default
- )
- {
- string? projectId = await _clearMLService.GetProjectIdAsync(engineId, cancellationToken);
- projectId ??= await _clearMLService.CreateProjectAsync(engineId, cancellationToken: cancellationToken);
-
- ClearMLTask? task = await _clearMLService.GetTaskByNameAsync(buildId, cancellationToken);
- if (task is not null)
- return task.Id;
-
- IClearMLBuildJobFactory buildJobFactory = _buildJobFactories[engineType];
- string script = await buildJobFactory.CreateJobScriptAsync(
- engineId,
- buildId,
- _options[engineType].ModelType,
- stage,
- data,
- buildOptions,
- cancellationToken
- );
- return await _clearMLService.CreateTaskAsync(
- buildId,
- projectId,
- script,
- _options[engineType].DockerImage,
- cancellationToken
- );
- }
-
- public Task DeleteJobAsync(string jobId, CancellationToken cancellationToken = default)
- {
- return _clearMLService.DeleteTaskAsync(jobId, cancellationToken);
- }
-
- public Task EnqueueJobAsync(
- string jobId,
- TranslationEngineType engineType,
- CancellationToken cancellationToken = default
- )
- {
- return _clearMLService.EnqueueTaskAsync(jobId, _options[engineType].Queue, cancellationToken);
- }
-
- public Task StopJobAsync(string jobId, CancellationToken cancellationToken = default)
- {
- return _clearMLService.StopTaskAsync(jobId, cancellationToken);
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/ClearMLHealthCheck.cs b/src/SIL.Machine.AspNetCore/Services/ClearMLHealthCheck.cs
deleted file mode 100644
index 0cce9b7d1..000000000
--- a/src/SIL.Machine.AspNetCore/Services/ClearMLHealthCheck.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class ClearMLHealthCheck(
- IClearMLAuthenticationService clearMLAuthenticationService,
- IHttpClientFactory httpClientFactory,
- IOptionsMonitor buildJobOptions
-) : IHealthCheck
-{
- private readonly HttpClient _httpClient = httpClientFactory.CreateClient("ClearML-NoRetry");
- private readonly IClearMLAuthenticationService _clearMLAuthenticationService = clearMLAuthenticationService;
- private readonly ISet _queuesMonitored = buildJobOptions
- .CurrentValue.ClearML.Select(x => x.Queue)
- .ToHashSet();
-
- private int _numConsecutiveFailures = 0;
- private readonly AsyncLock _lock = new AsyncLock();
-
- public async Task CheckHealthAsync(
- HealthCheckContext context,
- CancellationToken cancellationToken = default
- )
- {
- try
- {
- if (!await PingAsync(cancellationToken))
- return HealthCheckResult.Unhealthy("ClearML is unresponsive");
- IReadOnlySet queuesWithoutWorkers = await QueuesWithoutWorkers(cancellationToken);
- if (queuesWithoutWorkers.Count > 0)
- {
- return HealthCheckResult.Unhealthy(
- $"No ClearML agents are available for configured queues: {string.Join(", ", queuesWithoutWorkers)}"
- );
- }
-
- using (await _lock.LockAsync())
- _numConsecutiveFailures = 0;
- return HealthCheckResult.Healthy("ClearML is available");
- }
- catch (Exception e)
- {
- using (await _lock.LockAsync())
- {
- _numConsecutiveFailures++;
- return _numConsecutiveFailures > 3
- ? HealthCheckResult.Unhealthy(exception: e)
- : HealthCheckResult.Degraded(exception: e);
- }
- }
- }
-
- private async Task CallAsync(
- string service,
- string action,
- JsonNode body,
- CancellationToken cancellationToken = default
- )
- {
- var request = new HttpRequestMessage(HttpMethod.Post, $"{service}.{action}")
- {
- Content = new StringContent(body.ToJsonString(), Encoding.UTF8, "application/json")
- };
- request.Headers.Add(
- "Authorization",
- $"Bearer {await _clearMLAuthenticationService.GetAuthTokenAsync(cancellationToken)}"
- );
- HttpResponseMessage response = await _httpClient.SendAsync(request, cancellationToken);
- string result = await response.Content.ReadAsStringAsync(cancellationToken);
- return (JsonObject?)JsonNode.Parse(result);
- }
-
- public async Task PingAsync(CancellationToken cancellationToken = default)
- {
- JsonObject? result = await CallAsync("debug", "ping", new JsonObject(), cancellationToken);
- return result is not null;
- }
-
- public async Task> QueuesWithoutWorkers(CancellationToken cancellationToken = default)
- {
- HashSet queuesWithoutWorkers = _queuesMonitored.ToHashSet();
- JsonObject? result = await CallAsync("workers", "get_all", new JsonObject(), cancellationToken);
- JsonNode? workers_node = result?["data"]?["workers"];
- if (workers_node is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- JsonArray workers = (JsonArray)workers_node;
- foreach (var worker in workers)
- {
- JsonNode? queues_node = worker?["queues"];
- if (queues_node is null)
- continue;
- JsonArray queues = (JsonArray)queues_node;
- foreach (var currentQueue in queues)
- {
- string? currentQueueName = (string?)currentQueue?["name"];
- if (currentQueueName is not null)
- queuesWithoutWorkers.Remove(currentQueueName);
- }
- }
- return queuesWithoutWorkers;
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/ClearMLMonitorService.cs b/src/SIL.Machine.AspNetCore/Services/ClearMLMonitorService.cs
deleted file mode 100644
index 87e9ed8e9..000000000
--- a/src/SIL.Machine.AspNetCore/Services/ClearMLMonitorService.cs
+++ /dev/null
@@ -1,407 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class ClearMLMonitorService(
- IServiceProvider services,
- IClearMLService clearMLService,
- ISharedFileService sharedFileService,
- IOptionsMonitor clearMLOptions,
- IOptionsMonitor buildJobOptions,
- ILogger logger
-)
- : RecurrentTask(
- "ClearML monitor service",
- services,
- clearMLOptions.CurrentValue.BuildPollingTimeout,
- logger,
- clearMLOptions.CurrentValue.BuildPollingEnabled
- ),
- IClearMLQueueService
-{
- private static readonly string SummaryMetric = CreateMD5("Summary");
- private static readonly string TrainCorpusSizeVariant = CreateMD5("train_corpus_size");
- private static readonly string ConfidenceVariant = CreateMD5("confidence");
-
- private readonly IClearMLService _clearMLService = clearMLService;
- private readonly ISharedFileService _sharedFileService = sharedFileService;
- private readonly ILogger _logger = logger;
- private readonly Dictionary _curBuildStatus = new();
-
- private readonly IReadOnlyDictionary _queuePerEngineType =
- buildJobOptions.CurrentValue.ClearML.ToDictionary(x => x.TranslationEngineType, x => x.Queue);
-
- private readonly IDictionary _queueSizePerEngineType = new ConcurrentDictionary<
- TranslationEngineType,
- int
- >(buildJobOptions.CurrentValue.ClearML.ToDictionary(x => x.TranslationEngineType, x => 0));
-
- public int GetQueueSize(TranslationEngineType engineType)
- {
- return _queueSizePerEngineType[engineType];
- }
-
- protected override async Task DoWorkAsync(IServiceScope scope, CancellationToken cancellationToken)
- {
- try
- {
- var buildJobService = scope.ServiceProvider.GetRequiredService();
- IReadOnlyList trainingEngines = await buildJobService.GetBuildingEnginesAsync(
- BuildJobRunnerType.ClearML,
- cancellationToken
- );
- if (trainingEngines.Count == 0)
- return;
-
- Dictionary tasks = new();
- Dictionary queuePositions = new();
-
- foreach (TranslationEngineType engineType in _queuePerEngineType.Keys)
- {
- Dictionary tasksPerEngineType = (
- await _clearMLService.GetTasksByIdAsync(
- trainingEngines.Select(e => e.CurrentBuild!.JobId),
- cancellationToken
- )
- )
- .UnionBy(
- await _clearMLService.GetTasksForQueueAsync(_queuePerEngineType[engineType], cancellationToken),
- t => t.Id
- )
- .ToDictionary(t => t.Id);
- // add new keys to dictionary
- foreach (KeyValuePair kvp in tasksPerEngineType)
- tasks.TryAdd(kvp.Key, kvp.Value);
-
- Dictionary queuePositionsPerEngineType = tasksPerEngineType
- .Values.Where(t => t.Status is ClearMLTaskStatus.Queued or ClearMLTaskStatus.Created)
- .OrderBy(t => t.Created)
- .Select((t, i) => (Position: i, Task: t))
- .ToDictionary(e => e.Task.Name, e => e.Position);
- // add new keys to dictionary
- foreach (KeyValuePair kvp in queuePositionsPerEngineType)
- queuePositions.TryAdd(kvp.Key, kvp.Value);
-
- _queueSizePerEngineType[engineType] = queuePositionsPerEngineType.Count;
- }
-
- var dataAccessContext = scope.ServiceProvider.GetRequiredService();
- var platformService = scope.ServiceProvider.GetRequiredService();
- var lockFactory = scope.ServiceProvider.GetRequiredService();
- foreach (TranslationEngine engine in trainingEngines)
- {
- if (engine.CurrentBuild is null || !tasks.TryGetValue(engine.CurrentBuild.JobId, out ClearMLTask? task))
- continue;
-
- if (
- engine.CurrentBuild.JobState is BuildJobState.Pending
- && task.Status is ClearMLTaskStatus.Queued or ClearMLTaskStatus.Created
- )
- {
- await UpdateTrainJobStatus(
- platformService,
- engine.CurrentBuild.BuildId,
- new ProgressStatus(step: 0, percentCompleted: 0.0),
- //CurrentBuild.BuildId should always equal the corresponding task.Name
- queuePositions[engine.CurrentBuild.BuildId] + 1,
- cancellationToken
- );
- }
-
- if (engine.CurrentBuild.Stage == BuildStage.Train)
- {
- if (
- engine.CurrentBuild.JobState is BuildJobState.Pending
- && task.Status
- is ClearMLTaskStatus.InProgress
- or ClearMLTaskStatus.Stopped
- or ClearMLTaskStatus.Failed
- or ClearMLTaskStatus.Completed
- )
- {
- bool canceled = !await TrainJobStartedAsync(
- dataAccessContext,
- lockFactory,
- buildJobService,
- platformService,
- engine.EngineId,
- engine.CurrentBuild.BuildId,
- cancellationToken
- );
- if (canceled)
- continue;
- }
-
- switch (task.Status)
- {
- case ClearMLTaskStatus.InProgress:
- {
- double? percentCompleted = null;
- if (task.Runtime.TryGetValue("progress", out string? progressStr))
- percentCompleted = int.Parse(progressStr, CultureInfo.InvariantCulture) / 100.0;
- task.Runtime.TryGetValue("message", out string? message);
- await UpdateTrainJobStatus(
- platformService,
- engine.CurrentBuild.BuildId,
- new ProgressStatus(task.LastIteration ?? 0, percentCompleted, message),
- queueDepth: 0,
- cancellationToken
- );
- break;
- }
-
- case ClearMLTaskStatus.Completed:
- {
- task.Runtime.TryGetValue("message", out string? message);
- await UpdateTrainJobStatus(
- platformService,
- engine.CurrentBuild.BuildId,
- new ProgressStatus(task.LastIteration ?? 0, percentCompleted: 1.0, message),
- queueDepth: 0,
- cancellationToken
- );
- bool canceling = !await TrainJobCompletedAsync(
- lockFactory,
- buildJobService,
- engine.EngineId,
- engine.CurrentBuild.BuildId,
- (int)GetMetric(task, SummaryMetric, TrainCorpusSizeVariant),
- GetMetric(task, SummaryMetric, ConfidenceVariant),
- engine.CurrentBuild.Options,
- cancellationToken
- );
- if (canceling)
- {
- await TrainJobCanceledAsync(
- dataAccessContext,
- lockFactory,
- buildJobService,
- platformService,
- engine.EngineId,
- engine.CurrentBuild.BuildId,
- cancellationToken
- );
- }
- break;
- }
-
- case ClearMLTaskStatus.Stopped:
- {
- await TrainJobCanceledAsync(
- dataAccessContext,
- lockFactory,
- buildJobService,
- platformService,
- engine.EngineId,
- engine.CurrentBuild.BuildId,
- cancellationToken
- );
- break;
- }
-
- case ClearMLTaskStatus.Failed:
- {
- await TrainJobFaultedAsync(
- dataAccessContext,
- lockFactory,
- buildJobService,
- platformService,
- engine.EngineId,
- engine.CurrentBuild.BuildId,
- $"{task.StatusReason} : {task.StatusMessage}",
- cancellationToken
- );
- break;
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e, "Error occurred while monitoring ClearML tasks.");
- }
- }
-
- private async Task TrainJobStartedAsync(
- IDataAccessContext dataAccessContext,
- IDistributedReaderWriterLockFactory lockFactory,
- IBuildJobService buildJobService,
- IPlatformService platformService,
- string engineId,
- string buildId,
- CancellationToken cancellationToken = default
- )
- {
- bool success;
- IDistributedReaderWriterLock @lock = await lockFactory.CreateAsync(engineId, cancellationToken);
- await using (await @lock.WriterLockAsync(cancellationToken: cancellationToken))
- {
- success = await dataAccessContext.WithTransactionAsync(
- async (ct) =>
- {
- if (!await buildJobService.BuildJobStartedAsync(engineId, buildId, ct))
- return false;
- await platformService.BuildStartedAsync(buildId, CancellationToken.None);
- return true;
- },
- cancellationToken: cancellationToken
- );
- }
- await UpdateTrainJobStatus(platformService, buildId, new ProgressStatus(0), 0, cancellationToken);
- _logger.LogInformation("Build started ({BuildId})", buildId);
- return success;
- }
-
- private async Task TrainJobCompletedAsync(
- IDistributedReaderWriterLockFactory lockFactory,
- IBuildJobService buildJobService,
- string engineId,
- string buildId,
- int corpusSize,
- double confidence,
- string? buildOptions,
- CancellationToken cancellationToken
- )
- {
- try
- {
- IDistributedReaderWriterLock @lock = await lockFactory.CreateAsync(engineId, cancellationToken);
- await using (await @lock.WriterLockAsync(cancellationToken: cancellationToken))
- {
- return await buildJobService.StartBuildJobAsync(
- BuildJobRunnerType.Hangfire,
- engineId,
- buildId,
- BuildStage.Postprocess,
- (corpusSize, confidence),
- buildOptions,
- cancellationToken
- );
- }
- }
- finally
- {
- _curBuildStatus.Remove(buildId);
- }
- }
-
- private async Task TrainJobFaultedAsync(
- IDataAccessContext dataAccessContext,
- IDistributedReaderWriterLockFactory lockFactory,
- IBuildJobService buildJobService,
- IPlatformService platformService,
- string engineId,
- string buildId,
- string message,
- CancellationToken cancellationToken
- )
- {
- try
- {
- IDistributedReaderWriterLock @lock = await lockFactory.CreateAsync(engineId, cancellationToken);
- await using (await @lock.WriterLockAsync(cancellationToken: cancellationToken))
- {
- await dataAccessContext.WithTransactionAsync(
- async (ct) =>
- {
- await platformService.BuildFaultedAsync(buildId, message, ct);
- await buildJobService.BuildJobFinishedAsync(
- engineId,
- buildId,
- buildComplete: false,
- CancellationToken.None
- );
- },
- cancellationToken: cancellationToken
- );
- }
- _logger.LogError("Build faulted ({BuildId}). Error: {ErrorMessage}", buildId, message);
- }
- finally
- {
- _curBuildStatus.Remove(buildId);
- }
- }
-
- private async Task TrainJobCanceledAsync(
- IDataAccessContext dataAccessContext,
- IDistributedReaderWriterLockFactory lockFactory,
- IBuildJobService buildJobService,
- IPlatformService platformService,
- string engineId,
- string buildId,
- CancellationToken cancellationToken
- )
- {
- try
- {
- IDistributedReaderWriterLock @lock = await lockFactory.CreateAsync(engineId, cancellationToken);
- await using (await @lock.WriterLockAsync(cancellationToken: cancellationToken))
- {
- await dataAccessContext.WithTransactionAsync(
- async (ct) =>
- {
- await platformService.BuildCanceledAsync(buildId, ct);
- await buildJobService.BuildJobFinishedAsync(
- engineId,
- buildId,
- buildComplete: false,
- CancellationToken.None
- );
- },
- cancellationToken: cancellationToken
- );
- }
- _logger.LogInformation("Build canceled ({BuildId})", buildId);
- }
- finally
- {
- try
- {
- await _sharedFileService.DeleteAsync($"builds/{buildId}/", CancellationToken.None);
- }
- catch (Exception e)
- {
- _logger.LogWarning(e, "Unable to to delete job data for build {BuildId}.", buildId);
- }
- _curBuildStatus.Remove(buildId);
- }
- }
-
- private async Task UpdateTrainJobStatus(
- IPlatformService platformService,
- string buildId,
- ProgressStatus progressStatus,
- int? queueDepth = null,
- CancellationToken cancellationToken = default
- )
- {
- if (
- _curBuildStatus.TryGetValue(buildId, out ProgressStatus curProgressStatus)
- && curProgressStatus.Equals(progressStatus)
- )
- {
- return;
- }
- await platformService.UpdateBuildStatusAsync(buildId, progressStatus, queueDepth, cancellationToken);
- _curBuildStatus[buildId] = progressStatus;
- }
-
- private static double GetMetric(ClearMLTask task, string metric, string variant)
- {
- if (!task.LastMetrics.TryGetValue(metric, out IReadOnlyDictionary? metricVariants))
- return 0;
-
- if (!metricVariants.TryGetValue(variant, out ClearMLMetricsEvent? metricEvent))
- return 0;
-
- return metricEvent.Value;
- }
-
- private static string CreateMD5(string input)
- {
- byte[] inputBytes = Encoding.UTF8.GetBytes(input);
- byte[] hashBytes = MD5.HashData(inputBytes);
-
- return Convert.ToHexString(hashBytes).ToLower();
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/ClearMLService.cs b/src/SIL.Machine.AspNetCore/Services/ClearMLService.cs
deleted file mode 100644
index fd11b25dd..000000000
--- a/src/SIL.Machine.AspNetCore/Services/ClearMLService.cs
+++ /dev/null
@@ -1,221 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class ClearMLService(
- IHttpClientFactory httpClientFactory,
- IOptionsMonitor options,
- IClearMLAuthenticationService clearMLAuthService,
- IHostEnvironment env
-) : IClearMLService
-{
- private readonly HttpClient _httpClient = httpClientFactory.CreateClient("ClearML");
- private readonly IOptionsMonitor _options = options;
- private readonly IHostEnvironment _env = env;
- private static readonly JsonNamingPolicy JsonNamingPolicy = new SnakeCaseJsonNamingPolicy();
- private static readonly JsonSerializerOptions JsonSerializerOptions =
- new()
- {
- PropertyNamingPolicy = JsonNamingPolicy,
- Converters = { new CustomEnumConverterFactory(JsonNamingPolicy) }
- };
-
- private readonly IClearMLAuthenticationService _clearMLAuthService = clearMLAuthService;
-
- public async Task GetProjectIdAsync(string name, CancellationToken cancellationToken = default)
- {
- var body = new JsonObject
- {
- ["name"] = $"{_options.CurrentValue.RootProject}/{_options.CurrentValue.Project}/{name}",
- ["only_fields"] = new JsonArray("id")
- };
- JsonObject? result = await CallAsync("projects", "get_all", body, cancellationToken);
- var projects = (JsonArray?)result?["data"]?["projects"];
- if (projects is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- if (projects.Count == 0)
- return null;
- return (string?)projects[0]?["id"];
- }
-
- public async Task CreateProjectAsync(
- string name,
- string? description = null,
- CancellationToken cancellationToken = default
- )
- {
- var body = new JsonObject
- {
- ["name"] = $"{_options.CurrentValue.RootProject}/{_options.CurrentValue.Project}/{name}"
- };
- if (description != null)
- body["description"] = description;
- JsonObject? result = await CallAsync("projects", "create", body, cancellationToken);
- var projectId = (string?)result?["data"]?["id"];
- if (projectId is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return projectId;
- }
-
- public async Task DeleteProjectAsync(string id, CancellationToken cancellationToken = default)
- {
- var body = new JsonObject
- {
- ["project"] = id,
- ["delete_contents"] = true,
- ["force"] = true // needed if there are tasks already in that project.
- };
- JsonObject? result = await CallAsync("projects", "delete", body, cancellationToken);
- var deleted = (int?)result?["data"]?["deleted"];
- if (deleted is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return deleted == 1;
- }
-
- public async Task CreateTaskAsync(
- string buildId,
- string projectId,
- string script,
- string dockerImage,
- CancellationToken cancellationToken = default
- )
- {
- var snakeCaseEnvironment = JsonNamingPolicy.ConvertName(_env.EnvironmentName);
- var body = new JsonObject
- {
- ["name"] = buildId,
- ["project"] = projectId,
- ["script"] = new JsonObject { ["diff"] = script },
- ["container"] = new JsonObject
- {
- ["image"] = dockerImage,
- ["arguments"] = "--env ENV_FOR_DYNACONF=" + snakeCaseEnvironment,
- },
- ["type"] = "training"
- };
- JsonObject? result = await CallAsync("tasks", "create", body, cancellationToken);
- var taskId = (string?)result?["data"]?["id"];
- if (taskId is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return taskId;
- }
-
- public async Task DeleteTaskAsync(string id, CancellationToken cancellationToken = default)
- {
- var body = new JsonObject { ["task"] = id };
- JsonObject? result = await CallAsync("tasks", "delete", body, cancellationToken);
- var deleted = (bool?)result?["data"]?["deleted"];
- if (deleted is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return deleted.Value;
- }
-
- public async Task EnqueueTaskAsync(string id, string queue, CancellationToken cancellationToken = default)
- {
- var body = new JsonObject { ["task"] = id, ["queue_name"] = queue };
- JsonObject? result = await CallAsync("tasks", "enqueue", body, cancellationToken);
- var queued = (int?)result?["data"]?["queued"];
- if (queued is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return queued == 1;
- }
-
- public async Task DequeueTaskAsync(string id, CancellationToken cancellationToken = default)
- {
- var body = new JsonObject { ["task"] = id };
- JsonObject? result = await CallAsync("tasks", "dequeue", body, cancellationToken);
- var dequeued = (int?)result?["data"]?["dequeued"];
- if (dequeued is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return dequeued == 1;
- }
-
- public async Task StopTaskAsync(string id, CancellationToken cancellationToken = default)
- {
- var body = new JsonObject { ["task"] = id, ["force"] = true };
- JsonObject? result = await CallAsync("tasks", "stop", body, cancellationToken);
- var updated = (int?)result?["data"]?["updated"];
- if (updated is null)
- throw new InvalidOperationException("Malformed response from ClearML server.");
- return updated == 1;
- }
-
- public async Task> GetTasksForQueueAsync(
- string queue,
- CancellationToken cancellationToken = default
- )
- {
- var body = new JsonObject { ["name"] = queue };
- JsonObject? result = await CallAsync("queues", "get_all_ex", body, cancellationToken);
- var tasks = (JsonArray?)result?["data"]?["queues"]?[0]?["entries"];
- IEnumerable taskIds = tasks?.Select(t => (string)t?["id"]!) ?? new List();
- return await GetTasksByIdAsync(taskIds, cancellationToken);
- }
-
- public async Task GetTaskByNameAsync(string name, CancellationToken cancellationToken = default)
- {
- IReadOnlyList tasks = await GetTasksAsync(new JsonObject { ["name"] = name }, cancellationToken);
- if (tasks.Count == 0)
- return null;
- return tasks[0];
- }
-
- public Task> GetTasksByIdAsync(
- IEnumerable ids,
- CancellationToken cancellationToken = default
- )
- {
- return GetTasksAsync(new JsonObject { ["id"] = JsonValue.Create(ids.ToArray()) }, cancellationToken);
- }
-
- private async Task> GetTasksAsync(
- JsonObject body,
- CancellationToken cancellationToken = default
- )
- {
- body["only_fields"] = new JsonArray(
- "id",
- "name",
- "status",
- "project",
- "last_iteration",
- "status_reason",
- "status_message",
- "created",
- "active_duration",
- "last_metrics",
- "runtime"
- );
- JsonObject? result = await CallAsync("tasks", "get_all_ex", body, cancellationToken);
- var tasks = (JsonArray?)result?["data"]?["tasks"];
- return tasks?.Select(t => t.Deserialize(JsonSerializerOptions)!).ToArray()
- ?? Array.Empty();
- }
-
- private async Task CallAsync(
- string service,
- string action,
- JsonNode body,
- CancellationToken cancellationToken = default
- )
- {
- var request = new HttpRequestMessage(HttpMethod.Post, $"{service}.{action}")
- {
- Content = new StringContent(body.ToJsonString(), Encoding.UTF8, "application/json")
- };
- request.Headers.Add(
- "Authorization",
- $"Bearer {await _clearMLAuthService.GetAuthTokenAsync(cancellationToken)}"
- );
- HttpResponseMessage response = await _httpClient.SendAsync(request, cancellationToken);
- string result = await response.Content.ReadAsStringAsync(cancellationToken);
- return (JsonObject?)JsonNode.Parse(result);
- }
-
- private class SnakeCaseJsonNamingPolicy : JsonNamingPolicy
- {
- public override string ConvertName(string name)
- {
- return string.Concat(name.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()))
- .ToLowerInvariant();
- }
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/CorpusService.cs b/src/SIL.Machine.AspNetCore/Services/CorpusService.cs
deleted file mode 100644
index 635bbff5a..000000000
--- a/src/SIL.Machine.AspNetCore/Services/CorpusService.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class CorpusService : ICorpusService
-{
- public IEnumerable CreateTextCorpora(IReadOnlyList files)
- {
- List corpora = [];
-
- List> textFileCorpora = [];
- foreach (CorpusFile file in files)
- {
- switch (file.Format)
- {
- case FileFormat.Text:
- // if there are multiple texts with the same id, then add it to a new corpus or the first
- // corpus that doesn't contain a text with that id
- Dictionary? corpus = textFileCorpora.FirstOrDefault(c =>
- !c.ContainsKey(file.TextId)
- );
- if (corpus is null)
- {
- corpus = [];
- textFileCorpora.Add(corpus);
- }
- corpus[file.TextId] = new TextFileText(file.TextId, file.Location);
- break;
-
- case FileFormat.Paratext:
- corpora.Add(new ParatextBackupTextCorpus(file.Location, includeAllText: true));
- break;
- }
- }
- foreach (Dictionary corpus in textFileCorpora)
- corpora.Add(new DictionaryTextCorpus(corpus.Values));
-
- return corpora;
- }
-
- public IEnumerable CreateTermCorpora(IReadOnlyList files)
- {
- foreach (CorpusFile file in files)
- {
- switch (file.Format)
- {
- case FileFormat.Paratext:
- yield return new ParatextBackupTermsCorpus(file.Location, ["PN"]);
- break;
- }
- }
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/DistributedReaderWriterLock.cs b/src/SIL.Machine.AspNetCore/Services/DistributedReaderWriterLock.cs
deleted file mode 100644
index 2653c772a..000000000
--- a/src/SIL.Machine.AspNetCore/Services/DistributedReaderWriterLock.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class DistributedReaderWriterLock(string hostId, IRepository locks, IIdGenerator idGenerator, string id)
- : IDistributedReaderWriterLock
-{
- private readonly string _hostId = hostId;
- private readonly IRepository _locks = locks;
- private readonly IIdGenerator _idGenerator = idGenerator;
- private readonly string _id = id;
-
- public async Task ReaderLockAsync(
- TimeSpan? lifetime = default,
- CancellationToken cancellationToken = default
- )
- {
- string lockId = _idGenerator.GenerateId();
- if (!await TryAcquireReaderLock(lockId, lifetime, cancellationToken))
- {
- using ISubscription sub = await _locks.SubscribeAsync(rwl => rwl.Id == _id, cancellationToken);
- do
- {
- RWLock? rwLock = sub.Change.Entity;
- if (rwLock is not null && !rwLock.IsAvailableForReading())
- {
- TimeSpan? timeout = default;
- if (rwLock.WriterLock?.ExpiresAt is not null)
- {
- timeout = rwLock.WriterLock.ExpiresAt - DateTime.UtcNow;
- if (timeout < TimeSpan.Zero)
- timeout = TimeSpan.Zero;
- }
- if (timeout != TimeSpan.Zero)
- await sub.WaitForChangeAsync(timeout, cancellationToken);
- }
- } while (!await TryAcquireReaderLock(lockId, lifetime, cancellationToken));
- }
- return new ReaderLockReleaser(this, lockId);
- }
-
- public async Task WriterLockAsync(
- TimeSpan? lifetime = default,
- CancellationToken cancellationToken = default
- )
- {
- string lockId = _idGenerator.GenerateId();
- if (!await TryAcquireWriterLock(lockId, lifetime, cancellationToken))
- {
- await _locks.UpdateAsync(
- _id,
- u => u.Add(rwl => rwl.WriterQueue, new Lock { Id = lockId, HostId = _hostId }),
- cancellationToken: cancellationToken
- );
- try
- {
- using ISubscription sub = await _locks.SubscribeAsync(rwl => rwl.Id == _id, cancellationToken);
- do
- {
- RWLock? rwLock = sub.Change.Entity;
- if (rwLock is not null && !rwLock.IsAvailableForWriting(lockId))
- {
- List dateTimes = rwLock
- .ReaderLocks.Where(l => l.ExpiresAt.HasValue)
- .Select(l => l.ExpiresAt.GetValueOrDefault())
- .ToList();
- if (rwLock.WriterLock?.ExpiresAt is not null)
- dateTimes.Add(rwLock.WriterLock.ExpiresAt.Value);
- TimeSpan? timeout = default;
- if (dateTimes.Count > 0)
- {
- timeout = dateTimes.Max() - DateTime.UtcNow;
- if (timeout < TimeSpan.Zero)
- timeout = TimeSpan.Zero;
- }
- if (timeout != TimeSpan.Zero)
- await sub.WaitForChangeAsync(timeout, cancellationToken);
- }
- } while (!await TryAcquireWriterLock(lockId, lifetime, cancellationToken));
- }
- catch
- {
- await _locks.UpdateAsync(
- _id,
- u => u.RemoveAll(rwl => rwl.WriterQueue, l => l.Id == lockId),
- cancellationToken: cancellationToken
- );
- throw;
- }
- }
- return new WriterLockReleaser(this, lockId);
- }
-
- private async Task TryAcquireWriterLock(
- string lockId,
- TimeSpan? lifetime,
- CancellationToken cancellationToken
- )
- {
- var now = DateTime.UtcNow;
- Expression> filter = rwl =>
- rwl.Id == _id
- && (rwl.WriterLock == null || rwl.WriterLock.ExpiresAt != null && rwl.WriterLock.ExpiresAt <= now)
- && !rwl.ReaderLocks.Any(l => l.ExpiresAt == null || l.ExpiresAt > now)
- && (!rwl.WriterQueue.Any() || rwl.WriterQueue[0].Id == lockId);
- void Update(IUpdateBuilder u)
- {
- u.Set(
- rwl => rwl.WriterLock,
- new Lock
- {
- Id = lockId,
- ExpiresAt = lifetime is null ? null : now + lifetime,
- HostId = _hostId
- }
- );
- u.RemoveAll(rwl => rwl.WriterQueue, l => l.Id == lockId);
- }
- RWLock? rwLock = await _locks.UpdateAsync(filter, Update, cancellationToken: cancellationToken);
- return rwLock is not null;
- }
-
- private async Task TryAcquireReaderLock(
- string lockId,
- TimeSpan? lifetime,
- CancellationToken cancellationToken
- )
- {
- var now = DateTime.UtcNow;
- Expression> filter = rwl =>
- rwl.Id == _id
- && (rwl.WriterLock == null || rwl.WriterLock.ExpiresAt != null && rwl.WriterLock.ExpiresAt <= now)
- && !rwl.WriterQueue.Any();
- void Update(IUpdateBuilder u)
- {
- u.Add(
- rwl => rwl.ReaderLocks,
- new Lock
- {
- Id = lockId,
- ExpiresAt = lifetime is null ? null : now + lifetime,
- HostId = _hostId
- }
- );
- }
-
- RWLock? rwLock = await _locks.UpdateAsync(filter, Update, cancellationToken: cancellationToken);
- return rwLock is not null;
- }
-
- private class WriterLockReleaser(DistributedReaderWriterLock distributedLock, string lockId) : AsyncDisposableBase
- {
- private readonly DistributedReaderWriterLock _distributedLock = distributedLock;
- private readonly string _lockId = lockId;
-
- protected override async ValueTask DisposeAsyncCore()
- {
- Expression> filter = rwl =>
- rwl.Id == _distributedLock._id && rwl.WriterLock != null && rwl.WriterLock.Id == _lockId;
- await _distributedLock._locks.UpdateAsync(filter, u => u.Unset(rwl => rwl.WriterLock));
- }
- }
-
- private class ReaderLockReleaser(DistributedReaderWriterLock distributedLock, string lockId) : AsyncDisposableBase
- {
- private readonly DistributedReaderWriterLock _distributedLock = distributedLock;
- private readonly string _lockId = lockId;
-
- protected override async ValueTask DisposeAsyncCore()
- {
- Expression> filter = rwl =>
- rwl.Id == _distributedLock._id && rwl.ReaderLocks.Any(l => l.Id == _lockId);
- await _distributedLock._locks.UpdateAsync(
- filter,
- u => u.RemoveAll(rwl => rwl.ReaderLocks, l => l.Id == _lockId)
- );
- }
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/DistributedReaderWriterLockFactory.cs b/src/SIL.Machine.AspNetCore/Services/DistributedReaderWriterLockFactory.cs
deleted file mode 100644
index 64a3c3aa5..000000000
--- a/src/SIL.Machine.AspNetCore/Services/DistributedReaderWriterLockFactory.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class DistributedReaderWriterLockFactory(
- IOptions serviceOptions,
- IRepository locks,
- IIdGenerator idGenerator
-) : IDistributedReaderWriterLockFactory
-{
- private readonly ServiceOptions _serviceOptions = serviceOptions.Value;
- private readonly IIdGenerator _idGenerator = idGenerator;
- private readonly IRepository _locks = locks;
-
- public async Task InitAsync(CancellationToken cancellationToken = default)
- {
- await RemoveAllWaitersAsync(cancellationToken);
- await ReleaseAllWriterLocksAsync(cancellationToken);
- await ReleaseAllReaderLocksAsync(cancellationToken);
- }
-
- public async Task CreateAsync(
- string id,
- CancellationToken cancellationToken = default
- )
- {
- try
- {
- await _locks.InsertAsync(
- new RWLock
- {
- Id = id,
- ReaderLocks = [],
- WriterQueue = []
- },
- cancellationToken
- );
- }
- catch (DuplicateKeyException)
- {
- // the lock is already made - no new one needs to be made
- // This is done instead of checking if it exists first to prevent race conditions.
- }
- return new DistributedReaderWriterLock(_serviceOptions.ServiceId, _locks, _idGenerator, id);
- }
-
- public async Task DeleteAsync(string id, CancellationToken cancellationToken = default)
- {
- RWLock? rwLock = await _locks.DeleteAsync(rwl => rwl.Id == id, cancellationToken);
- return rwLock is not null;
- }
-
- private async Task ReleaseAllWriterLocksAsync(CancellationToken cancellationToken)
- {
- await _locks.UpdateAllAsync(
- rwl => rwl.WriterLock != null && rwl.WriterLock.HostId == _serviceOptions.ServiceId,
- u => u.Unset(rwl => rwl.WriterLock),
- cancellationToken
- );
- }
-
- private async Task ReleaseAllReaderLocksAsync(CancellationToken cancellationToken)
- {
- await _locks.UpdateAllAsync(
- rwl => rwl.ReaderLocks.Any(l => l.HostId == _serviceOptions.ServiceId),
- u => u.RemoveAll(rwl => rwl.ReaderLocks, l => l.HostId == _serviceOptions.ServiceId),
- cancellationToken
- );
- }
-
- private async Task RemoveAllWaitersAsync(CancellationToken cancellationToken)
- {
- await _locks.UpdateAllAsync(
- rwl => rwl.WriterQueue.Any(l => l.HostId == _serviceOptions.ServiceId),
- u => u.RemoveAll(rwl => rwl.WriterQueue, l => l.HostId == _serviceOptions.ServiceId),
- cancellationToken
- );
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/FileSystem.cs b/src/SIL.Machine.AspNetCore/Services/FileSystem.cs
deleted file mode 100644
index a6b5367c1..000000000
--- a/src/SIL.Machine.AspNetCore/Services/FileSystem.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public class FileSystem : IFileSystem
-{
- public void CreateDirectory(string path)
- {
- Directory.CreateDirectory(path);
- }
-
- public void DeleteFile(string path)
- {
- if (File.Exists(path))
- File.Delete(path);
- }
-
- public Stream OpenWrite(string path)
- {
- return File.OpenWrite(path);
- }
-
- public Stream OpenRead(string path)
- {
- return File.OpenRead(path);
- }
-}
diff --git a/src/SIL.Machine.AspNetCore/Services/HangfireBuildJob.cs b/src/SIL.Machine.AspNetCore/Services/HangfireBuildJob.cs
deleted file mode 100644
index 515f88732..000000000
--- a/src/SIL.Machine.AspNetCore/Services/HangfireBuildJob.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-namespace SIL.Machine.AspNetCore.Services;
-
-public abstract class HangfireBuildJob(
- IPlatformService platformService,
- IRepository engines,
- IDistributedReaderWriterLockFactory lockFactory,
- IDataAccessContext dataAccessContext,
- IBuildJobService buildJobService,
- ILogger logger
-) : HangfireBuildJob