diff --git a/samples/corpora.ipynb b/samples/corpora.ipynb
new file mode 100644
index 000000000..beaa9546d
--- /dev/null
+++ b/samples/corpora.ipynb
@@ -0,0 +1,675 @@
+{
+ "cells": [
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Text Corpora Tutorial\n",
+ "\n",
+ "In this notebook, we will demonstrate how to use Machine to load datasets as text corpora."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "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",
+ "\n",
+ "void WriteLine(string text = \"\")\n",
+ "{\n",
+ " Console.Write(text + \"\\n\");\n",
+ "}"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Loading Text Files\n",
+ "\n",
+ "Let's start with a simple example of loading a set of text files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "using SIL.Machine.Corpora;\n",
+ "\n",
+ "var corpus = new TextFileTextCorpus(\"data/en_tok.txt\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It is easy to iterate through the sentences in the corpus. We simply iterate on the corpus object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Would you mind giving us the keys to the room , please ?\n",
+ "I have made a reservation for a quiet , double room with a telephone and a tv for Rosario Cabedo .\n",
+ "Would you mind moving me to a quieter room ?\n",
+ "I have booked a room .\n",
+ "I think that there is a problem .\n",
+ "Do you have any rooms with a tv , air conditioning and a safe available ?\n",
+ "Would you mind showing us a room with a tv ?\n",
+ "Does it have a telephone ?\n",
+ "I am leaving on the second at eight in the evening .\n",
+ "How much does a single room cost per week ?\n"
+ ]
+ }
+ ],
+ "source": [
+ "foreach (var row in corpus.Take(10))\n",
+ " WriteLine(row.Text);"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Loading Scripture\n",
+ "\n",
+ "Machine contains classes for loading Scripture in various formats, such as USFM and USX."
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### USX\n",
+ "\n",
+ "USX is a common XML format for Scripture. Let's take a look at how to load a set of USX files. First, we create an instance of the `UsxFileTextCorpus` class. We ensure that the correct verse references are used by loading the versification file for this translation. If a versification is not provided, then the English versification is used."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "using SIL.Scripture;\n",
+ "\n",
+ "var versification = Versification.Table.Implementation.Load(\"data/WEB-DBL/release/versification.vrs\", \"web\");\n",
+ "var corpus = new UsxFileTextCorpus(\"data/WEB-DBL/release/USX_1\", versification);"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's iterate through the corpus. You will notice that each text segment in the corpus has an associated reference. In the case of Scripture, these are `VerseRef` objects."
+ ]
+ },
+ {
+ "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: 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",
+ "1JN 1: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);\n",
+ "1JN 1: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.\n",
+ "1JN 1:4: And we write these things to you, that our joy may be fulfilled.\n",
+ "1JN 1: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.\n",
+ "1JN 1:6: If we say that we have fellowship with him and walk in the darkness, we lie and don’t tell the truth.\n",
+ "1JN 1: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.\n",
+ "1JN 1:8: If we say that we have no sin, we deceive ourselves, and the truth is not in us.\n",
+ "1JN 1:9: If we confess our sins, he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness.\n",
+ "1JN 1:10: If we say that we haven’t sinned, we make him a liar, and his word is not in us.\n"
+ ]
+ }
+ ],
+ "source": [
+ "foreach (var row in corpus.Take(10))\n",
+ " WriteLine($\"{row.Ref}: {row.Text}\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You can also iterate through verses in the corpus by book."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1JN\n",
+ "======\n",
+ "1: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\n",
+ "1: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);\n",
+ "1: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.\n",
+ "\n",
+ "2JN\n",
+ "======\n",
+ "1: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,\n",
+ "1:2: for the truth’s sake, which remains in us, and it will be with us forever:\n",
+ "1:3: Grace, mercy, and peace will be with us, from God the Father and from the Lord Jesus Christ, the Son of the Father, in truth and love.\n",
+ "\n",
+ "3JN\n",
+ "======\n",
+ "1:1: The elder to Gaius the beloved, whom I love in truth.\n",
+ "1:2: Beloved, I pray that you may prosper in all things and be healthy, even as your soul prospers.\n",
+ "1:3: For I rejoiced greatly when brothers came and testified about your truth, even as you walk in truth.\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "foreach (var text in corpus.Texts)\n",
+ "{\n",
+ " WriteLine(text.Id);\n",
+ " WriteLine(\"======\");\n",
+ " foreach (var row in text.Take(3))\n",
+ " {\n",
+ " var verseRef = (VerseRef)row.Ref;\n",
+ " WriteLine($\"{verseRef.Chapter}:{verseRef.Verse}: {row.Text}\");\n",
+ " }\n",
+ " WriteLine();\n",
+ "}"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Digital Bible Library Bundles\n",
+ "\n",
+ "Now, let's load a Digital Bible Library (DBL) bundle. A DBL bundle is a zip archive that contains all of the data that you need for a publishable Bible translation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "DBL bundle created.\n"
+ ]
+ }
+ ],
+ "source": [
+ "using System.IO;\n",
+ "using System.IO.Compression;\n",
+ "\n",
+ "Directory.CreateDirectory(\"out\");\n",
+ "if (File.Exists(\"out/web.zip\"))\n",
+ " File.Delete(\"out/web.zip\");\n",
+ "ZipFile.CreateFromDirectory(\"data/WEB-DBL\", \"out/web.zip\");\n",
+ "WriteLine(\"DBL bundle created.\")"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "First, we create a `DblBundleTextCorpus` instance. There is no need to specify versification, because the `DblBundleTextCorpus` class takes care of that for us."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "var corpus = new DblBundleTextCorpus(\"out/web.zip\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can iterate through the corpus just as we did before. All text corpus classes in Machine adhere to the same interface, so it is easy to switch between the various classes. Also, you can see that the verse text is nicely tokenized."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1JN 1: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\n",
+ "1JN 1: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);\n",
+ "1JN 1: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.\n",
+ "1JN 1:4: And we write these things to you, that our joy may be fulfilled.\n",
+ "1JN 1: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.\n",
+ "1JN 1:6: If we say that we have fellowship with him and walk in the darkness, we lie and don’t tell the truth.\n",
+ "1JN 1: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.\n",
+ "1JN 1:8: If we say that we have no sin, we deceive ourselves, and the truth is not in us.\n",
+ "1JN 1:9: If we confess our sins, he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness.\n",
+ "1JN 1:10: If we say that we haven’t sinned, we make him a liar, and his word is not in us.\n"
+ ]
+ }
+ ],
+ "source": [
+ "foreach (var row in corpus.Take(10))\n",
+ " WriteLine($\"{row.Ref}: {row.Text}\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Paratext Projects\n",
+ "\n",
+ "Another useful text corpus class is `ParatextTextCorpus`. This class is used to load a Paratext project. It properly loads the configured encoding and versification for the project."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "var corpus = new ParatextTextCorpus(\"data/WEB-PT\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now, let's iterate through the segments."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1JN 1: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\n",
+ "1JN 1: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);\n",
+ "1JN 1: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.\n",
+ "1JN 1:4: And we write these things to you, that our joy may be fulfilled.\n",
+ "1JN 1: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.\n",
+ "1JN 1:6: If we say that we have fellowship with him and walk in the darkness, we lie and don’t tell the truth.\n",
+ "1JN 1: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.\n",
+ "1JN 1:8: If we say that we have no sin, we deceive ourselves, and the truth is not in us.\n",
+ "1JN 1:9: If we confess our sins, he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness.\n",
+ "1JN 1:10: If we say that we haven’t sinned, we make him a liar, and his word is not in us.\n"
+ ]
+ }
+ ],
+ "source": [
+ "foreach (var row in corpus.Take(10))\n",
+ " WriteLine($\"{row.Ref}: {row.Text}\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Parallel Text Corpora\n",
+ "\n",
+ "So far we have only dealt with monolingual corpora. For many tasks, such as machine translation, parallel corpora are required. Machine provides a corpus class for combining two monolingual corpora into a parallel corpus."
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In order to create a parallel text corpus, we must first create the source and target monolingual text corpora. Then, we create the parallel corpus using the `AlignRows` method."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "var sourceCorpus = new ParatextTextCorpus(\"data/VBL-PT\");\n",
+ "var targetCorpus = new ParatextTextCorpus(\"data/WEB-PT\");\n",
+ "var parallelCorpus = sourceCorpus.AlignRows(targetCorpus);"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can now iterate through the parallel segments."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "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",
+ "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",
+ "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",
+ "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",
+ "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"
+ ]
+ }
+ ],
+ "source": [
+ "foreach (var row in parallelCorpus.Take(5))\n",
+ "{\n",
+ " WriteLine($\"{row.Ref}\");\n",
+ " WriteLine($\"Source: {row.SourceText}\");\n",
+ " WriteLine($\"Target: {row.TargetText}\");\n",
+ "}"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Corpus Processing\n",
+ "\n",
+ "Often a text corpus must be processed in some way as a part of a AI/ML pipeline. Machine has a set of operations that can be used to process a corpus easily. Lowercasing text is a common pre-processing step, so let's show how to apply the \"lowercase\" operation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1JN 1: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\n",
+ "1JN 1: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);\n",
+ "1JN 1: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.\n",
+ "1JN 1:4: and we write these things to you, that our joy may be fulfilled.\n",
+ "1JN 1: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.\n",
+ "1JN 1:6: if we say that we have fellowship with him and walk in the darkness, we lie and don’t tell the truth.\n",
+ "1JN 1: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.\n",
+ "1JN 1:8: if we say that we have no sin, we deceive ourselves, and the truth is not in us.\n",
+ "1JN 1:9: if we confess our sins, he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness.\n",
+ "1JN 1:10: if we say that we haven’t sinned, we make him a liar, and his word is not in us.\n"
+ ]
+ }
+ ],
+ "source": [
+ "var corpus = new ParatextTextCorpus(\"data/WEB-PT\");\n",
+ "\n",
+ "foreach (var row in corpus.Lowercase().Take(10))\n",
+ " WriteLine($\"{row.Ref}: {row.Text}\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Multiple operations can be chained together. Here we will tokenize, lowercase, and normalize the corpus."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "csharp"
+ },
+ "vscode": {
+ "languageId": "polyglot-notebook"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1JN 1: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\n",
+ "1JN 1: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 ) ;\n",
+ "1JN 1: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 .\n",
+ "1JN 1:4: and we write these things to you , that our joy may be fulfilled .\n",
+ "1JN 1: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 .\n",
+ "1JN 1:6: if we say that we have fellowship with him and walk in the darkness , we lie and don’t tell the truth .\n",
+ "1JN 1: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 .\n",
+ "1JN 1:8: if we say that we have no sin , we deceive ourselves , and the truth is not in us .\n",
+ "1JN 1:9: if we confess our sins , he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness .\n",
+ "1JN 1:10: if we say that we haven’t sinned , we make him a liar , and his word is not in us .\n"
+ ]
+ }
+ ],
+ "source": [
+ "using SIL.Machine.Tokenization;\n",
+ "\n",
+ "foreach (var row in corpus.Tokenize().Lowercase().NfcNormalize().Take(10))\n",
+ " WriteLine($\"{row.Ref}: {row.Text}\");"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Corpus processing operations are also available on parallel corpora."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "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",
+ "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",
+ "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",
+ "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",
+ "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"
+ ]
+ }
+ ],
+ "source": [
+ "var sourceCorpus = new ParatextTextCorpus(\"data/VBL-PT\");\n",
+ "var targetCorpus = new ParatextTextCorpus(\"data/WEB-PT\");\n",
+ "var parallelCorpus = sourceCorpus.AlignRows(targetCorpus);\n",
+ "\n",
+ "foreach (var row in parallelCorpus.Tokenize().Lowercase().NfcNormalize().Take(5))\n",
+ "{\n",
+ " WriteLine($\"{row.Ref}\");\n",
+ " WriteLine($\"Source: {row.SourceText}\");\n",
+ " WriteLine($\"Target: {row.TargetText}\");\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/data/VBL-PT/631JNspavbl.SFM b/samples/data/VBL-PT/631JNspavbl.SFM
new file mode 100644
index 000000000..98fa9e3b1
--- /dev/null
+++ b/samples/data/VBL-PT/631JNspavbl.SFM
@@ -0,0 +1,138 @@
+\id 1JN spa Versión Biblia Libre
+\h 1 Juan
+\toc1 1 Juan
+\toc2 1 Juan
+\mt1 1 Juan
+\c 1
+\p
+\v 1 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\f + \fr 1.1 \ft La estructura griega de la oración se ha ajustado para darle sentido. \f*.
+\v 2 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.
+\v 3 Los que hemos visto y oído eso mismo les contamos, para que también puedan participar de esta amistad\f + \fr 1.3 \ft Literalmente, “compañerismo.”\f* junto a nosotros. Esta amistad con el Padre y su Hijo Jesucristo.
+\v 4 Escribimos para decirles esto, a fin de que nuestra felicidad sea completa.
+\p
+\v 5 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\f + \fr 1.5 \ft En griego hay una doble negación para hacer énfasis, literalmente, “la oscuridad en él no existe, de ninguna manera.”\f*.
+\v 6 Si decimos ser sus amigos, y seguimos viviendo\f + \fr 1.6 \ft Literalmente, “caminando.” Ver también 1:7.\f* en oscuridad, estamos mintiendo, y no vivimos en la verdad.
+\v 7 Pero si vivimos en la luz, así como él está en la luz, entonces somos amigos unos con otros, y la sangre de Jesús, su Hijo, nos limpia de todo pecado.
+\p
+\v 8 Si decimos que no pecamos, nos engañamos a nosotros mismos, y la verdad no está en nosotros.
+\v 9 Pero si confesamos nuestros pecados, él es fiel y justo para perdonar nuestros pecados y limpiarnos de todo lo malo que hay dentro de nosotros.
+\v 10 Si decimos que no hemos pecado, estamos llamando a Dios mentiroso, y su palabra no está en nosotros.
+\c 2
+\p
+\v 1 Queridos hijos míos, les escribo esto para que no pequen. Pero si alguno peca, tenemos a alguien que nos defiende ante el Padre, a Jesucristo, que es verdaderamente justo.
+\v 2 Por él son perdonados nuestros pecados, y no solo los nuestros, sino los de todo el mundo.
+\v 3 Podemos estar seguros de que lo conocemos si seguimos sus mandamientos.
+\v 4 Todo el que dice: “Yo conozco a Dios,” pero no hace su voluntad, es mentiroso, y no tiene la verdad.
+\v 5 Pero los que siguen la palabra de Dios permiten que su amor llene sus corazones por completo. Así es como sabemos que vivimos en él.
+\v 6 Todo el que dice vivir en él, debe vivir como Jesús vivió.
+\p
+\v 7 Amigos, no les escribo para darles un nuevo mandamiento, sino un mandamiento antiguo que ya teníamos desde el principio. Este mandamiento antiguo ya lo han escuchado.
+\v 8 Pero en cierto sentido les estoy dando un nuevo mandamiento. Su verdad se revela en Jesús y en ustedes, pues viene el fin de la oscuridad y la luz verdadera ya está brillando.
+\v 9 Los que dicen que viven en la luz pero aborrecen a un hermano cristiano\f + \fr 2.9 \ft Literalmente, “hermano.”\f* todavía tienen tinieblas dentro de sí.
+\v 10 Los que aman a sus hermanos cristianos viven en la luz, y no hacen pecar a otros\f + \fr 2.10 \ft Literalmente, “no hay engaño.” En otras palabras, algo que hace tropezar a otros.\f*.
+\v 11 Los que aborrecen a un hermano cristiano están en oscuridad. Tropiezan en la oscuridad, sin saber hacia dónde van porque la oscuridad los ha cegado.
+\p
+\v 12 Queridos amigos, les escribo a ustedes, hijos\f + \fr 2.12 \ft Juan identifica tres grupos: hijos, padres y jóvenes. Probablemente se refiere a las distintas edades de la vida cristiana, más que a grupos literales. \f*, porque sus pecados han sido perdonados por el nombre de Jesús.
+\v 13 Les escribo a ustedes, padres, porque ustedes lo conocen a él, que ha existido desde el principio. Les escribo a ustedes, jóvenes, porque han vencido el mal.
+\v 14 Les escribo a ustedes, pequeñitos, porque ustedes conocen al Padre. Les escribo a ustedes, Padres, porque conocen al que ha existido desde el principio. Les escribo a ustedes, jóvenes, porque son fuertes. Porque la palabra de Dios vive en ustedes, y han vencido al maligno.
+\p
+\v 15 No amen al mundo, ni anhelen las cosas que hay en él. Si aman al mundo, no tendrán el amor del Padre en ustedes.
+\v 16 Porque todas las cosas de este mundo, nuestros deseos pecaminosos, nuestro deseo por todo lo que vemos, nuestra jactancia por lo que hemos logrado en la vida, ninguna de esas cosas viene del Padre, sino del mundo.
+\v 17 El mundo y sus malos deseos acabarán, pero los que hacen la voluntad de Dios vivirán para siempre.
+\p
+\v 18 Queridos amigos, esta es la última hora. Como han escuchado, el anticristo viene. Y ya han venido muchos anticristos. Así es como sabemos que esta es la última hora.
+\v 19 Ellos se fueron, pero no eran parte de nosotros, porque si así hubiera sido, habrían permanecido aquí. Pero cuando se fueron demostraron que ninguno de ellos hacía parte de nosotros.
+\p
+\v 20 Pero ustedes han sido ungidos\f + \fr 2.20 \ft Ungir es el acto de derramar un líquido (a menudo aceite) sobre la cabeza de alguien para indicar que esa persona tiene una bendición especial y está apartada para un rol particular (como el reinado en el Antiguo Testamento). Aquí el ungimiento se refiere a la bendición del Espíritu Santo, quien en palabras de Jesús, nos conduce a toda verdad.\f* con la bendición del Espíritu Santo, y todos ustedes saben lo que es verdad.
+\v 21 No les escribo porque no conozcan la verdad, sino precisamente porque la conocen, y porque no hay engaño en ella.
+\v 22 ¿Quién es el mentiroso? Todo aquél que niega que Jesús es el Cristo\f + \fr 2.22 \ft Quiere decir Mesías. (Cristo, en griego). Ambos se refieren al que es ungido.\f*. El anticristo es todo aquél que niega al Padre y al Hijo.
+\v 23 Todo aquél que niega al Hijo, tampoco tiene al Padre; y todo el que reconoce al Hijo, tiene al Padre también.
+\v 24 En cuanto a ustedes, asegúrense de que lo que oyeron desde el principio siga vivo en ustedes. Si lo que oyeron desde el principio vive en ustedes, también vivirán en el Hijo y en el Padre.
+\v 25 La vida eterna. ¡Eso es lo que nos ha prometido!
+\p
+\v 26 Escribo esto para advertirles contra las cosas que quieren descarriarlos.
+\v 27 Pero el ungimiento que recibieron de él por medio del Espíritu\f + \fr 2.27 \ft El espíritu, según el versículo 20. \f* vive en ustedes, y no necesitan que nadie los enseñe. El ungimiento del Espíritu les enseña todas las cosas. Esa es la verdad. No es una mentira. Así que vivan en Cristo, como se les ha enseñado.
+\p
+\v 28 Ahora, mis queridos amigos, sigan viviendo en Cristo, para que cuando aparezca, podamos estar seguros y no tengamos vergüenza delante él en su venida.
+\v 29 Si ustedes saben que él es bueno y justo\f + \fr 2.29 \ft Literalmente, “justo.” Sin embargo, esta palabra a menudo solo se usa en un sentido religioso hoy y no tiene mucho significado en el hablar cotidiano.\f*, entonces también deben saber que todo el que hace lo justo ha nacido de Dios.
+\c 3
+\p
+\v 1 ¡Miren el amor que tiene el Padre para con nosotros! Por eso podemos ser llamados hijos de Dios, ¡porque eso es lo que somos! La razón por la que el mundo no nos reconoce como hijos de Dios es porque no lo reconocen a él.
+\v 2 Amigos míos, ya somos hijos de Dios, pero lo que llegaremos a ser no se ha revelado todavía. Pero sabemos que cuando él aparezca seremos como él, porque lo veremos como él es realmente.
+\v 3 Todos los que tienen esta esperanza en él, asegúrense de ser puros, como él lo es.
+\v 4 Todos los que pecan son violadores de la ley de Dios.
+\v 5 Pero desde luego ustedes saben que Jesús vino para eliminar los pecados, y en él no hay pecado.
+\v 6 Todos los que viven en él, ya no pecan más; todos los que siguen pecando es porque no lo han visto y no lo han conocido.
+\p
+\v 7 Queridos amigos, no dejen que nadie los engañe: los que hacen justicia son justos, así como Jesús es justo.
+\v 8 Los que pecan son del diablo, porque el diablo ha estado pecando desde el principio. Por eso vino el Hijo de Dios, para destruir lo que el diablo ha hecho.
+\v 9 Y todos los que son nacidos de Dios ya no pecan más, porque la naturaleza de Dios\f + \fr 3.9 \ft Literalmente, “su semilla.”\f* habita en ellos. Y no pueden seguir pecando porque han nacido de Dios.
+\v 10 Así es como podemos distinguir a los hijos de Dios y los hijos del diablo: todos aquellos que no obran con justicia, no pertenecen a Dios, ni aquellos que no aman a sus hermanos cristianos.
+\p
+\v 11 El mensaje que han escuchado desde el principio es este: debemos amarnos unos a otros.
+\v 12 No podemos ser como Caín, que pertenecía al maligno, y mató a su hermano. ¿Por qué lo mató? Porque Caín era malo, pero su hermano era justo.
+\v 13 Así que no se sorprendan si este mundo los aborrece.
+\p
+\v 14 La razón por la que sabemos que hemos ido de la muerte a la vida es porque amamos a nuestros hermanos y hermanas en la fe. Porque el que no ama sigue muerto.
+\v 15 Los que odian a sus hermanos cristianos son asesinos, y ustedes saben que los asesinos no tendrán vida eterna con ellos.
+\v 16 Así es como sabemos qué es el amor: Jesús entregó su vida por nosotros, y nosotros debemos entregar nuestras vidas por nuestros hermanos en la fe.
+\v 17 Si alguno de ustedes vive cómodamente en este mundo, y ve a su hermano o hermana en Cristo padeciendo necesidad, pero no tiene compasión, ¿cómo podemos decir que el amor vive en ustedes?
+\v 18 Queridos amigos, no digamos que amamos solo con palabras, sino mostremos nuestro amor en lo que hacemos y en la manera como demostramos la verdad.
+\v 19 Así es como sabremos que pertenecemos a la verdad, y pondremos nuestras mentes\f + \fr 3.19 \ft Literalmente, “corazones.” Se creía que el corazón era el órgano con el que se pensaba.\f* en paz con Dios
+\v 20 cuando pensemos que estamos en error. Dios es más grande de lo que creemos, y lo sabe todo.
+\v 21 Así que, queridos amigos, si tenemos la tranquilidad de que no estamos en el error, podemos tener confianza ante Dios.
+\v 22 Pues recibiremos de él cualquier cosa que le pidamos, porque seguimos sus mandamientos y hacemos lo que le agrada.
+\v 23 Y esto es lo que él manda: que debemos confiar en el nombre\f + \fr 3.23 \ft Nombre, en el sentido del carácter y la reputación, más que un nombre asignado.\f* de su Hijo Jesucristo, y amarnos unos a otros, así como él nos mandó.
+\v 24 Los que guardan sus mandamientos siguen viviendo en él, y él vive en ellos. Y sabemos que él vive en nosotros por el Espíritu que nos ha dado.
+\c 4
+\p
+\v 1 Queridos amigos, no confien en todos los espíritus, sino pruébenlos para saber si son o no de Dios, porque hay muchos falsos profetas en este mundo.
+\v 2 ¿Cómo pueden reconocer el Espíritu de Dios? Pues todo espíritu que acepta que Jesús vino en carne humana, es de Dios;
+\v 3 pero todo espíritu que no acepta a Jesús, ese espíritu no es de Dios. De hecho, es el espíritu del anticristo, del cual oyeron que vendrá, y que ya está en el mundo.
+\p
+\v 4 Pero ustedes pertenecen a Dios, mis amigos, y los han vencido\f + \fr 4.4 \ft Refiriéndose de nuevo a los falsos profetas y al espíritu que los inspira.\f*, porque el que está en ustedes es más grande que el que está en el mundo.
+\v 5 Ellos pertenecen al mundo, y hablan como personas del mundo, y el mundo los oye.
+\v 6 Sin embargo, nosotros pertenecemos a Dios y todo el que conoce a Dios, nos escucha; pero los que no pertenecen a Dios, no nos escuchan. Así es como podemos distinguir el espíritu de verdad del espíritu de engaño.
+\p
+\v 7 Queridos amigos, sigamos amándonos unos a otros, porque el amor viene de Dios. Todos los que aman son nacidos de Dios y conocen a Dios.
+\v 8 Los que no aman, no conocen a Dios, porque Dios es amor.
+\v 9 ¿Cómo nos fue demostrado el amor de Dios? Dios envió a su único Hijo para que viviéramos por él.
+\v 10 ¡Eso es amor! No es que nosotros hayamos amado a Dios, sino que él nos amó y envió a su Hijo para ser la reconciliación por nuestros pecados.
+\p
+\v 11 Amigos, si esta es la manera como Dios nos ama, debemos amarnos unos a otros de esta misma manera.
+\v 12 Nadie ha visto a Dios. Sin embargo, si nos amamos unos a otros, entonces Dios vive en nosotros, y su amor se cumple en nosotros.
+\v 13 ¿Cómo podemos saber que él vive en nosotros? En que nos ha dado el poder de amar\f + \fr 4.13 \ft Implícito.\f* por su Espíritu.
+\p
+\v 14 Porque somos testigos de lo que hemos visto y testificamos que el Padre envió al Hijo como Salvador del mundo.
+\v 15 Dios vive en todos los que declaran que Jesús es el Hijo de Dios, y ellos viven en Dios.
+\v 16 Hemos experimentado y creído en el amor que Dios tiene por nosotros. Dios es amor, y los que viven en amor, viven en Dios, y Dios en ellos.
+\v 17 Es así como el amor se completa en nosotros, para que podamos estar seguros en el día del juicio: por el hecho de que vivimos como él en este mundo.
+\v 18 Donde hay amor no puede haber temor. Y Dios nos ama por completo, y este amor echa fuera todos nuestros miedos. Si tememos, es porque tememos ser castigados, y eso muestra que no hemos sido plenamente transformados por la plenitud del amor de Dios.
+\v 19 Nosotros amamos porque él nos amó primero.
+\v 20 Los que dicen: “Yo amo a Dios,” pero odian a su hermano o hermana en la fe, son mentirosos. Los que no aman a un hermano al que pueden ver, no pueden amar a Dios, a quien no ven.
+\v 21 Este es el mandamiento que nos dio: los que aman a Dios, amen también a sus hermanos.
+\c 5
+\p
+\v 1 Todo el que cree que Jesús es el Cristo nacido de Dios, y el que ama al Padre también ama a su hijo.
+\v 2 ¿Cómo sabemos que amamos a los hijos de Dios? Cuando amamos a Dios y seguimos sus mandamientos.
+\v 3 Amar a Dios quiere decir que seguimos sus mandamientos, y sus mandamientos no son una carga pesada.
+\v 4 Todo el que nace de Dios vence al mundo. La manera como obtenemos la victoria y vencemos al mundo es por la fe en Dios.
+\v 5 ¿Quién puede vencer al mundo? Solo los que creen en Jesús, creyendo que él es el Hijo de Dios.
+\v 6 Él es el que vino por agua y sangre, Jesucristo. No solo vino por agua, sino por agua y sangre\f + \fr 5.6 \ft Esto a menudo se interpreta con el fin de dar el significado del agua del bautismo y la sangre que significa su muerte.\f*. El Espíritu prueba y confirma esto, porque el Espíritu es la verdad.
+\v 7 Asó que hay tres que dan evidencia de ello:
+\v 8 el Espíritu, el agua, y la sangre, y los tres están de acuerdo como si fueran uno\f + \fr 5.8 \ft 5:7, 8. Se debate sobre la autenticidad de los versículos 7 y 8.\f*.
+\p
+\v 9 Si aceptamos la evidencia que dan los testigos humanos, entonces la evidencia que da Dios es más importante. La evidencia que Dios da es su testimonio sobre su Hijo.
+\v 10 Los que creen en el Hijo de Dios han aceptado y se han aferrado a esta evidencia. Los que no creen en Dios, llaman a Dios mentirosos, porque no creen la evidencia que Dios da sobre su Hijo.
+\v 11 Y la evidencia es esta: Dios nos ha dado vida eterna por medio de su Hijo.
+\v 12 Todo el que tiene al Hijo tiene vida; y quien no tiene al Hijo no tiene vida.
+\v 13 Escribo para decirles a los que entre ustedes creen en el nombre del Hijo de Dios, para que puedan estar seguros que tienen la vida eterna.
+\v 14 Podemos estar seguros de que él nos escuchará siempre y cuando pidamos conforme a su voluntad.
+\v 15 Si sabemos que él oye nuestras peticiones, podemos estar seguros de que recibiremos lo que le pedimos.
+\v 16 Si ves a tu hermano en la fe cometiendo un pecado que no es mortal\f + \fr 5.16 \ft Pecado mortal, literalmente “un pecado para muerte.”\f*, debes orar y Dios le otorgará vida al que ha pecado. (Pero no por un pecado mortal. Porque hay un pecado que es mortal, y no quiero decir que la gente deba orar por eso.
+\v 17 Sí, todo lo que no es recto es pecado, pero hay un pecado que no es mortal).
+\p
+\v 18 Reconocemos que los que nacen de Dios no siguen pecando más. El Hijo de Dios\f + \fr 5.18 \ft Literalmente, El Único que es nacido de Dios, siguiendo el concepto que está al principio del versículo. En el siguiente versículo queda clara su identificación.\f* los protege y el diablo no puede hacerles daño.
+\v 19 Pues sabemos que pertenecemos a Dios, y que el mundo está bajo control del maligno.
+\v 20 También sabemos que el Hijo de Dios ha venido, y nos ha ayudado a entender, para que podamos reconocer al que es verdadero. Vivimos en él, que es verdadero, en su Hijo Jesucristo. Él es el verdadero Dios, y es vida eterna\f + \fr 5.20 \ft Puede entenderse de manera que él da la vida eterna pero también que él vive eternamente.\f*.
+\v 21 Amigos queridos, aléjense del culto a los ídolos.
diff --git a/samples/data/VBL-PT/642JNspavbl.SFM b/samples/data/VBL-PT/642JNspavbl.SFM
new file mode 100644
index 000000000..f6177e5ee
--- /dev/null
+++ b/samples/data/VBL-PT/642JNspavbl.SFM
@@ -0,0 +1,24 @@
+\id 2JN spa Versión Biblia Libre
+\h 2 Juan
+\toc1 2 Juan
+\toc2 2 Juan
+\mt1 2 Juan
+\c 1
+\p
+\v 1 Esta carta viene de parte del anciano\f + \fr 1.1 \ft 1. Se entiende que es Juan.\f* a la dama escogida\f + \fr 1.1 \ft 1. La “dama escogida” podría referirse a la iglesia, o a una mujer Cristiana en particular. Lo mismo ocurre en el versículo 13.\f* y a sus hijos, a quienes amo en la verdad. No solo de mi parte, sino de parte de todos los que conocen la verdad,
+\v 2 porque la verdad vive en nosotros y estará con nosotros para siempre.
+\v 3 Que la gracia, la misericordia y la paz sigan con nosotros, de parte de Dios el Padre y de Jesucristo, el Hijo del Padre, en verdad y en amor.
+\p
+\v 4 Me alegré al saber que algunos de tus hijos están siguiendo la verdad, como el Padre nos mandó.
+\v 5 Ahora te digo, apreciada hermana, no como una instrucción, sino siguiendo lo que entendimos desde el principio, que debemos amarnos unos a otros.
+\v 6 Y esto es el amor: que sigamos los mandamientos de Dios. Y el mandamiento, como oíste desde el principio, es que debemos vivir en amor\f + \fr 1.6 \ft 6. O, “que debemos comportarnos de esta manera.”\f*.
+\p
+\v 7 Te digo estas cosas porque han salido muchos engañadores al mundo. Personas que no aceptan que Jesucristo ha venido como ser humano. Y cualquiera que sea así es un engañador y anticristo.
+\v 8 Ten cuidado de no perder aquello por lo que hemos trabajado tanto, y que recibas lo que te corresponde.
+\p
+\v 9 Todos aquellos que se vuelven extremistas\f + \fr 1.9 \ft 9. Literalmente, “que van demasiado lejos.”\f* y no siguen la enseñanza de Cristo, ni tienen a Dios. Los que siguen la enseñanza de Cristo tienen tanto al Padre como al Hijo en ellos.
+\v 10 Si la gente se acerca a ti y no dan evidencias de la enseñanza de Cristo, no los recibas no los aceptes,
+\v 11 porque si los animas, participas de sus malas obras.
+\p
+\v 12 Tengo tantas cosas que decirte pero que no las escribiré más con tinta, porque espero visitarte y hablar contigo cara a cara. ¡Eso nos haría muy felices!
+\v 13 Saludos de los hijos de tu hermana escogida.
diff --git a/samples/data/VBL-PT/653JNspavbl.SFM b/samples/data/VBL-PT/653JNspavbl.SFM
new file mode 100644
index 000000000..5f723c138
--- /dev/null
+++ b/samples/data/VBL-PT/653JNspavbl.SFM
@@ -0,0 +1,25 @@
+\id 3JN spa Versión Biblia Libre
+\h 3 Juan
+\toc1 3 Juan
+\toc2 3 Juan
+\mt1 3 Juan
+\c 1
+\p
+\v 1 Esta carta viene de parte del anciano\f + \fr 1.1 \ft 1. A menudo esto se refiere a Juan, el escritor de esta carta.\f* a Gayo, mi querido amigo, a quien amo en la verdad.
+\v 2 Amigo mío, por encima de todas las cosas oro para que estés bien y tengas buena salud, pues sé que espiritualmente estás bien.
+\p
+\v 3 Me alegré cuando vinieron algunos hermanos creyentes y me hablaron sobre tu compromiso con la verdad, y sobre cómo sigues viviendo conforme a ella.
+\v 4 Nada me alegra más que escuchar que mis amados hermanos siguen la verdad.
+\v 5 Querido amigo, tu fidelidad se demuestra en lo que haces al cuidar de los hermanos\f + \fr 1.5 \ft 5. Los creyentes cristianos que viajaban por el mundo predicando la buena noticia.\f*, incluso los que no conoces.
+\v 6 Ellos han dado buen testimonio de tu amor ante la iglesia. Por favor, al enviarlos de camino, trátalos de un modo que agrade a Dios,
+\v 7 pues viajan en su nombre, y no aceptan nada de los que no son creyentes\f + \fr 1.7 \ft 7. Literalmente, “gentiles.”\f*.
+\v 8 Debemos apoyarlos para juntos ser partícipes de la verdad.
+\p
+\v 9 Le escribí sobre esto a la iglesia, pero Diótrefes, a quien le gusta hacerse cargo de las cosas\f + \fr 1.9 \ft 9. Literalmente, “le encanta ser el primero.”\f*, se niega a aceptar nuestra autoridad.
+\v 10 Así que si logro ir a visitarlos, dejaré claro lo que él ha estado haciendo. Pues ha estado acusándonos falsamente. Y no satisfecho con eso, se niega a recibir a algún otro hermano. Tampoco permitirá que otros los reciban, y expulsa de la iglesia a quienes lo hacen.
+\p
+\v 11 Amigo mío, no imites el mal, sino el bien. Los que hacen el bien le pertenecen a Dios; los que hacen el mal no lo conocen\f + \fr 1.11 \ft 11. Literalmente, “no han visto a Dios.”\f*.
+\p
+\v 12 Todos hablan bien de Demetrio, ¡y la verdad también habla bien de él! Nosotros también hablamos bien de él, y ustedes saben que decimos la verdad.
+\v 13 Tengo mucho que decirte, pero no quiero hacerlo escribiendo con tinta.
+\v 14 Espero verte pronto para que hablemos cara a cara. ¡Que la paz esté contigo! Los amigos que están aquí te envían sus saludos. Te ruego que saludes personalmente, y por nombre, a nuestros amigos de allá.
diff --git a/samples/data/VBL-PT/BookNames.xml b/samples/data/VBL-PT/BookNames.xml
new file mode 100644
index 000000000..194238f0e
--- /dev/null
+++ b/samples/data/VBL-PT/BookNames.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/data/VBL-PT/Settings.xml b/samples/data/VBL-PT/Settings.xml
new file mode 100644
index 000000000..67a70657c
--- /dev/null
+++ b/samples/data/VBL-PT/Settings.xml
@@ -0,0 +1,71 @@
+
+ usfm.sty
+ 000000000000000000000000000000000000000111111111111111111111111111000000000000000000000000000000000100000000000000000000000
+ 4
+ es:Latn::
+ Spanish
+ 8.0.63.1
+ Versión Biblia Libre [spa] Spanish Free Bible Version
+ 65001
+ T
+ <p>copyright © 2018 <a href="http://www.freebibleversion.org/">Jonathan Gallagher y Shelly Barrios de Avila</a>. Esta obra se encuentra bajo una licencia de Creative Commons Attribution-NoDerivs Unported License. La traducción Free Bible Version está siendo distribuida para uso libre, con las únicas condiciones siguientes: a) debe ser identificada como Free BibleVersion, y b) el texto no debe ser cambiado.</p>
+ spavbl
+ 482ddd53705278cce28a22c6292957b4d0c095c1
+ Gentium
+ 14
+
+
+ fbx9s8quxQ4Ec38m4
+ Public
+
+ spavbl.SFM
+ 41MAT
+
+ NFC
+ Major::BiblicalTerms.xml
+ F
+ F
+ F
+ Standard::
+
+ /home/kahunapule/sync/BibleConv/output/spavbl/usfm
+ .
+ .
+ ShortName
+ ShortName
+ NoteInAnyVerse
+ T
+ False
+ False
+ False
+ -
+ ,
+ —
+ ;
+ ;
+
+ True
+
+
+ õ [ ] @ Á Ú / k w – … ü - Z — ( ) V 9 G R 8 B 7 0 O F I É 6 ; U 5 4 Q ’ ‘ 3 H 2 x ¡ ! T M N Y ¿ ? 1 L C A ñ : S ú J z P D ” E “ é j f á ó í v h g y q b . , p m c t u d l i r n s o a e
+ ¨
+ False
+ “ ”
+ ‘ ’
+ “ ”
+ “
+ Yes
+ ‘
+ Yes
+ “
+ No
+ No
+ p p/q1 b/q1
+ _,_ @ _[ ]_ _—_ _- _-_ … _…_ “ ..._ / - _— ” _–_ . —_ …_ — _( )_ ;_ ’_ _‘ !_ _¡ _¿ ?_ :_ ”_ _“ ._ ,_
+ _; .._ , ¡ _(_ ! _”
+ False
+ 2018-03-06T19:44:35.342721
+ 5a9eef95f8b34b5e5a30fc1f
+ Spanish(spa), El Nuevo Testamento, Versión Biblia Libre, Spain, New Testament, 2018-03-01, spavbl, dbl: matches
+
+
\ No newline at end of file
diff --git a/samples/data/VBL-PT/custom.vrs b/samples/data/VBL-PT/custom.vrs
new file mode 100644
index 000000000..8f724428c
--- /dev/null
+++ b/samples/data/VBL-PT/custom.vrs
@@ -0,0 +1,22 @@
+# custom.vrs
+# Prepared by Michael Johnson.
+# amend total quantity of verses in chapter
+3JN 1:14
+REV 12:17
+# deliberately missing verses based on textual criticism decisions or alternate versification
+-MAT 17:21
+-MAT 18:11
+-MAT 23:14
+-MRK 7:16
+-MRK 9:44
+-MRK 9:46
+-MRK 11:26
+-MRK 15:28
+-LUK 17:36
+-LUK 23:17
+-JHN 5:4
+-ACT 8:37
+-ACT 15:34
+-ACT 24:7
+-ROM 16:24
+#-2CO 13:14
diff --git a/samples/data/VBL-PT/es-Latn.ldml b/samples/data/VBL-PT/es-Latn.ldml
new file mode 100644
index 000000000..7d7d5e2db
--- /dev/null
+++ b/samples/data/VBL-PT/es-Latn.ldml
@@ -0,0 +1,877 @@
+[\u00AA\u00BA\u00E0\u00E2-\u00E8\u00EA-\u00EC\u00EE\u00EF\u00F2\u00F4\u00F6\u00F8\u00F9\u00FB\u00FF\u0101\u0103\u0113\u0115\u012B\u012D\u014D\u014F\u0153\u016B\u016D][A-Z\u00D1][!-#\&-*,-/\:;?@\[-\]\u00A1\u00A7\u00AB\u00BB\u00BF\u2010\u2013\u2014\u2018\u2019\u201C\u201D\u2020\u2021\u2026\u2032\u2033][a-z\u00E1\u00E9\u00ED\u00F1\u00F3\u00FA\u00FC][][][][][][]«»“”left-to-rightstandard
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/license.xml b/samples/data/WEB-DBL/license.xml
new file mode 100644
index 000000000..e66fc4032
--- /dev/null
+++ b/samples/data/WEB-DBL/license.xml
@@ -0,0 +1 @@
+2015-12-159999-12-31TrueTrueTrueTrue
\ No newline at end of file
diff --git a/samples/data/WEB-DBL/metadata.xml b/samples/data/WEB-DBL/metadata.xml
new file mode 100644
index 000000000..53880518b
--- /dev/null
+++ b/samples/data/WEB-DBL/metadata.xml
@@ -0,0 +1,139 @@
+
+
+ World English Bible (American Edition)
+ World English Bible
+ Related dialect adaptation of the American Standard Version of 1901 into modern English
+ WEB
+ WEB
+ Bible with Deuterocanon
+ 2020-01-01
+ Paratext/9.2.102.3
+
+ 9879dbb7cfe39e4d5d6f7f9dbd0c6414691a036e
+ 4c4fe70e7e2ad454e20891a60bf81991037976b7
+ engWEB14
+ World English Bible (American Edition)
+
+
+ dtyynkiqGHSk8qEp7
+
+
+
+ text
+ false
+ true
+ true
+ true
+ Revision
+ Common
+ Standard
+
+
+
+
+ eBible.org
+ http://eBible.org
+ eBible.org
+ 545d2cb0ae307afa44b390fc
+ eBible.org
+
+
+ https://eBible.org
+ 545d2cb0ae307afa44b390fc
+ eBible.org
+
+
+ true
+ true
+ true
+ true
+ true
+ 545d2cb0ae307afa44b390fc
+ eBible.org
+
+
+
+ eng
+ English
+ English
+
+ Latn
+ LTR
+ en
+ 00025
+ Arabic
+
+
+
+ US
+ United States of America
+
+
+
+ 3.0
+ false
+
+
+
+ 1 John
+ 1 John
+ John’s First Letter
+
+
+ 2 John
+ 2 John
+ John’s Second Letter
+
+
+ 3 John
+ 3 John
+ John’s Third Letter
+
+
+
+
+
+
+
+
+
+
+
+
+ World English Bible
+ World English Bible
+ Ecumenical
+ Ecumenical
+ WEB
+ WEB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PUBLIC DOMAIN
+
+
+
+
+
+ See http://WorldEnglish.Bible
+
+
+
+ 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
new file mode 100644
index 000000000..afb572261
--- /dev/null
+++ b/samples/data/WEB-DBL/release/USX_1/1JN.usx
@@ -0,0 +1,107 @@
+
+
+ 62-1JN-web.sfm World English Bible (WEB)
+ UTF-8
+ 1 John
+ John’s First Letter
+ 1 John
+ 1 John
+ John’s First Letter
+
+
+
+ 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 (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); 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.1:3 “Christ” means “Anointed One”. And we write these things to you, that our joy may be fulfilled.
+
+
+ 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. If we say that we have fellowship with him and walk in the darkness, we lie and don’t tell the truth. 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. If we say that we have no sin, we deceive ourselves, and the truth is not in us. If we confess our sins, he is faithful and righteous to forgive us the sins and to cleanse us from all unrighteousness. If we say that we haven’t sinned, we make him a liar, and his word is not in us.
+
+
+
+
+ My little children, I write these things to you so that you may not sin. If anyone sins, we have a Counselor2:1 Greek παρακλητον: Counselor, Helper, Intercessor, Advocate, and Comforter. with the Father, Jesus Christ, the righteous. And he is the 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. for our sins, and not for ours only, but also for the whole world. This is how we know that we know him: if we keep his commandments. One who says, “I know him,” and doesn’t keep his commandments, is a liar, and the truth isn’t in him. But God’s love has most certainly been perfected in whoever keeps his word. This is how we know that we are in him: he who says he remains in him ought himself also to walk just like he walked.
+
+ 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. 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. He who says he is in the light and hates his brother is in the darkness even until now. He who loves his brother remains in the light, and there is no occasion for stumbling in him. 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.
+
+
+ I write to you, little children, because your sins are forgiven you for his name’s sake.
+
+
+ I write to you, fathers, because you know him who is from the beginning.
+
+ I write to you, young men, because you have overcome the evil one.
+
+ I write to you, little children, because you know the Father.
+
+
+ I have written to you, fathers, because you know him who is from the beginning.
+
+ 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.
+
+
+ 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. 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. The world is passing away with its lusts, but he who does God’s will remains forever.
+
+ 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. 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. You have an anointing from the Holy One, and you all have knowledge.2:20 Or, “know what is true”, or, “know all things” 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. 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. Whoever denies the Son doesn’t have the Father. He who confesses the Son has the Father also.
+
+ 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. This is the promise which he promised us, the eternal life.
+
+
+ These things I have written to you concerning those who would lead you astray. 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.
+
+
+ Now, little children, remain in him, that when he appears, we may have boldness and not be ashamed before him at his coming. If you know that he is righteous, you know that everyone who practices righteousness has been born of him.
+
+
+
+
+ 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. 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. Everyone who has this hope set on him purifies himself, even as he is pure.
+
+
+ Everyone who sins also commits lawlessness. Sin is lawlessness. You know that he was revealed to take away our sins, and no sin is in him. Whoever remains in him doesn’t sin. Whoever sins hasn’t seen him and doesn’t know him.
+
+
+ Little children, let no one lead you astray. He who does righteousness is righteous, even as he is righteous. 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. 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. 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. For this is the message which you heard from the beginning, that we should love one another— 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.
+
+
+ Don’t be surprised, my brothers, if the world hates you. 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. Whoever hates his brother is a murderer, and you know that no murderer has eternal life remaining in him.
+
+
+ By this we know love, because he laid down his life for us. And we ought to lay down our lives for the brothers. 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?
+
+
+ My little children, let’s not love in word only, or with the tongue only, but in deed and truth. And by this we know that we are of the truth and persuade our hearts before him, because if our heart condemns us, God is greater than our heart, and knows all things. Beloved, if our hearts don’t condemn us, we have boldness toward God; so whatever we ask, we receive from him, because we keep his commandments and do the things that are pleasing in his sight. This is his commandment, that we should believe in the name of his Son, Jesus Christ, and love one another, even as he commanded. 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.
+
+
+
+
+ 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. By this you know the Spirit of God: every spirit who confesses that Jesus Christ has come in the flesh is of God, 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. 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. They are of the world. Therefore they speak of the world, and the world hears them. 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.
+
+
+ Beloved, let’s love one another, for love is of God; and everyone who loves has been born of God and knows God. He who doesn’t love doesn’t know God, for God is love. By this God’s love was revealed in us, that God has sent his only born4:9 The phrase “only born” is from the Greek word “μονογενη”, which is sometimes translated “only begotten” or “one and only”. Son into the world that we might live through him. In this is love, not that we loved God, but that he loved us, and sent his Son as the 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. for our sins. Beloved, if God loved us in this way, we also ought to love one another. 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.
+
+
+ By this we know that we remain in him and he in us, because he has given us of his Spirit. We have seen and testify that the Father has sent the Son as the Savior of the world. Whoever confesses that Jesus is the Son of God, God remains in him, and he in God. 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. 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. 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. We love him,4:19 NU omits “him”. because he first loved us. 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? This commandment we have from him, that he who loves God should also love his brother.
+
+
+
+
+ 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. By this we know that we love the children of God, when we love God and keep his commandments. For this is loving God, that we keep his commandments. His commandments are not grievous. For whatever is born of God overcomes the world. This is the victory that has overcome the world: your faith. Who is he who overcomes the world, but he who believes that Jesus is the Son of God?
+
+
+ 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. For there are three who testify: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:” the Spirit, the water, and the blood; and the three agree as one. 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. 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. The testimony is this: that God gave to us eternal life, and this life is in his Son. He who has the Son has the life. He who doesn’t have God’s Son doesn’t have the life.
+
+
+ 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.
+
+
+ This is the boldness which we have toward him, that if we ask anything according to his will, he listens to us. 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.
+
+
+ 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. All unrighteousness is sin, and there is sin not leading to death.
+
+
+ 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. We know that we are of God, and the whole world lies in the power of the evil one. 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.
+
+
+ Little children, keep yourselves from idols.
+
+
\ 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
new file mode 100644
index 000000000..4e17914ee
--- /dev/null
+++ b/samples/data/WEB-DBL/release/USX_1/2JN.usx
@@ -0,0 +1,24 @@
+
+
+ 63-2JN-web.sfm World English Bible (WEB)
+ UTF-8
+ 2 John
+ John’s Second Letter
+ 2 John
+ 2 John
+ John’s Second Letter
+
+
+
+ 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, for the truth’s sake, which remains in us, and it will be with us forever: Grace, mercy, and peace will be with us, from God the Father and from the Lord Jesus Christ,1:3 “Christ” means “Anointed One”. the Son of the Father, in truth and love.
+
+
+ I rejoice greatly that I have found some of your children walking in truth, even as we have been commanded by the Father. 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. 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.
+
+
+ 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. Watch yourselves, that we don’t lose the things which we have accomplished, but that we receive a full reward. 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. If anyone comes to you and doesn’t bring this teaching, don’t receive him into your house, and don’t welcome him, for he who welcomes him participates in his evil deeds.
+
+
+ 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. The children of your chosen sister greet you. 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
new file mode 100644
index 000000000..02f756613
--- /dev/null
+++ b/samples/data/WEB-DBL/release/USX_1/3JN.usx
@@ -0,0 +1,31 @@
+
+
+ 64-3JN-web.sfm World English Bible (WEB)
+ UTF-8
+ 3 John
+ John’s Third Letter
+ 3 John
+ 3 John
+ John’s Third Letter
+
+
+
+ The elder to Gaius the beloved, whom I love in truth.
+
+
+ Beloved, I pray that you may prosper in all things and be healthy, even as your soul prospers. For I rejoiced greatly when brothers came and testified about your truth, even as you walk in truth. I have no greater joy than this: to hear about my children walking in truth.
+
+
+ Beloved, you do a faithful work in whatever you accomplish for those who are brothers and strangers. 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, because for the sake of the Name they went out, taking nothing from the Gentiles. We therefore ought to receive such, that we may be fellow workers for the truth.
+
+
+ I wrote to the assembly, but Diotrephes, who loves to be first among them, doesn’t accept what we say. 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.
+
+
+ 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. Demetrius has the testimony of all, and of the truth itself; yes, we also testify, and you know that our testimony is true.
+
+
+ I had many things to write to you, but I am unwilling to write to you with ink and pen; but I hope to see you soon. Then we will speak face to face.
+ Peace be to you. 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
new file mode 100644
index 000000000..1371f1ba8
--- /dev/null
+++ b/samples/data/WEB-DBL/release/eng_en.ldml
@@ -0,0 +1 @@
+[][!%-/\:;=?\[\]\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
new file mode 100644
index 000000000..6614341eb
--- /dev/null
+++ b/samples/data/WEB-DBL/release/styles.xml
@@ -0,0 +1,1817 @@
+
+
+ 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
new file mode 100644
index 000000000..19d8f1511
--- /dev/null
+++ b/samples/data/WEB-DBL/release/versification.vrs
@@ -0,0 +1,395 @@
+# 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
new file mode 100644
index 000000000..2b4eb194d
--- /dev/null
+++ b/samples/data/WEB-PT/631JNengWEB14.SFM
@@ -0,0 +1,199 @@
+\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
new file mode 100644
index 000000000..ab7eaa1e2
--- /dev/null
+++ b/samples/data/WEB-PT/642JNengWEB14.SFM
@@ -0,0 +1,25 @@
+\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
new file mode 100644
index 000000000..55d4fdcc7
--- /dev/null
+++ b/samples/data/WEB-PT/653JNengWEB14.SFM
@@ -0,0 +1,29 @@
+\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
new file mode 100644
index 000000000..3681a1fb2
--- /dev/null
+++ b/samples/data/WEB-PT/BookNames.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/data/WEB-PT/Settings.xml b/samples/data/WEB-PT/Settings.xml
new file mode 100644
index 000000000..2731664f1
--- /dev/null
+++ b/samples/data/WEB-PT/Settings.xml
@@ -0,0 +1,86 @@
+
+ 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
new file mode 100644
index 000000000..b84499be3
--- /dev/null
+++ b/samples/data/WEB-PT/custom.sty
@@ -0,0 +1,353 @@
+# 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
new file mode 100644
index 000000000..3053290dc
--- /dev/null
+++ b/samples/data/WEB-PT/custom.vrs
@@ -0,0 +1,30 @@
+# 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
new file mode 100644
index 000000000..365da17e0
--- /dev/null
+++ b/samples/data/WEB-PT/en.ldml
@@ -0,0 +1 @@
+[][!%-/\:;=?\[\]\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
new file mode 100644
index 000000000..8d20c474a
--- /dev/null
+++ b/samples/data/WEB-PT/frtbak_old.sty
@@ -0,0 +1,2278 @@
+# 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
new file mode 100644
index 000000000..96d7419fb
--- /dev/null
+++ b/samples/data/en-hc.xml
@@ -0,0 +1,265 @@
+
+
+
+
+ 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
new file mode 100644
index 000000000..739411113
--- /dev/null
+++ b/samples/data/en.txt
@@ -0,0 +1,1000 @@
+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
new file mode 100644
index 000000000..8e2358597
--- /dev/null
+++ b/samples/data/en_tok.txt
@@ -0,0 +1,1000 @@
+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
new file mode 100644
index 000000000..b438a898f
--- /dev/null
+++ b/samples/data/smt.cfg
@@ -0,0 +1,29 @@
+# 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
new file mode 100644
index 000000000..c1e448e2a
--- /dev/null
+++ b/samples/data/sp-hc.xml
@@ -0,0 +1,282 @@
+
+
+
+
+ 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
new file mode 100644
index 000000000..f50ee4410
--- /dev/null
+++ b/samples/data/sp.txt
@@ -0,0 +1,1000 @@
+¿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
new file mode 100644
index 000000000..9698151cb
--- /dev/null
+++ b/samples/machine_translation.ipynb
@@ -0,0 +1,467 @@
+{
+ "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
new file mode 100644
index 000000000..c84847d08
--- /dev/null
+++ b/samples/tokenization.ipynb
@@ -0,0 +1,419 @@
+{
+ "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": [
+ ""
+ ]
+ },
+ "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
new file mode 100644
index 000000000..e0880eb0f
--- /dev/null
+++ b/samples/word_alignment.ipynb
@@ -0,0 +1,435 @@
+{
+ "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
+}