Skip to content
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ The general file structure for an extension is as follows:
- `assets/descriptions/description-<locale>.md` contains a brief description of the extension in the language specified by `<locale>`
- `contributions/` contains JSON files the platform uses to extend data structures for things like menus and settings. The JSON files are referenced from the manifest
- `public/` contains other static files that are copied into the build folder
- `test-data/` contains sample interlinear XML (e.g. `Interlinear_en_MAT.xml`) for development and tests
- `test-data/` contains sample Paratext 9 interlinear data for development and tests: `Pt9InterlinearProjectData.json` is the served payload the converter's tests read, and `test-data/pt9-projects/` holds whole Paratext 9 projects for testing an import by hand (see its [README](test-data/pt9-projects/README.md))
- `.github/` contains files to facilitate integration with GitHub
- `.github/workflows` contains [GitHub Actions](https://github.com/features/actions) workflows for automating various processes in this repo (e.g. **Test** and **Lint** on push/PR to main, release-prep, hotfix-\*; **Publish** and **Bump Versions** manual dispatch; **CodeQL** for security)
- `.github/assets/release-body.md` is the template for the body of [releases published using GitHub Actions](#publishing). The Publish workflow substitutes its version placeholders into a copy outside the repo, and that copy plus a generated changelog becomes the release body
Expand Down
12 changes: 12 additions & 0 deletions test-data/pt9-projects/PIA/51PHPPIA.SFM
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
\id PHP - PT9 Import A
\h PIA
\mt1 Philippians
\c 1
\p
\v 1 Wug blicket wug dax fep gorp.
\v 2 Tomo zav flib.
\v 3 Wugs daxes glorp zav flib.
\v 4 Zim zam zim zam kex.
\v 5 Nol pim tuk vex.
\v 6 Snee plovs vex plovs.
\v 7 Plovs snee vex plovs.
15 changes: 15 additions & 0 deletions test-data/pt9-projects/PIA/InterlinearSetup.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<InterlinearSetupList>
<InterlinearSetup type="BackTranslation" language="es">
<FontSize>12</FontSize>
<RightToLeft>false</RightToLeft>
<RelatedLanguages>false</RelatedLanguages>
<ExportOnApprove>false</ExportOnApprove>
</InterlinearSetup>
<InterlinearSetup type="Glossing" language="fr">
<FontSize>12</FontSize>
<RightToLeft>false</RightToLeft>
<RelatedLanguages>false</RelatedLanguages>
<ExportOnApprove>false</ExportOnApprove>
</InterlinearSetup>
</InterlinearSetupList>
64 changes: 64 additions & 0 deletions test-data/pt9-projects/PIA/Interlinear_es/Interlinear_es_PHP.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<InterlinearData GlossLanguage="es" BookId="PHP">
<Verses>
<item>
<string>PHP 1:1</string>
<VerseData Hash="pia-words-approved-hash">
<Cluster><Range Index="0" Length="3" /><Lexeme Id="Word:wug" GlossId="s-wug1" /></Cluster>
<Cluster><Range Index="4" Length="7" /><Lexeme Id="Word:blicket" GlossId="s-blicket" /></Cluster>
<Cluster><Range Index="12" Length="3" /><Lexeme Id="Word:wug" /></Cluster>
<Cluster><Range Index="16" Length="7" /><Lexeme Id="Phrase:dax fep" GlossId="s-daxfep" /></Cluster>
<Cluster><Range Index="24" Length="4" /><Lexeme Id="Word:gorp" GlossId="s-nonexistent" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:2</string>
<VerseData Hash="pia-approved-hash">
<Cluster><Range Index="0" Length="4" /><Lexeme Id="Word:tomo" GlossId="s-tomo" /><Excluded>true</Excluded></Cluster>
<Cluster><Range Index="5" Length="3" /><Lexeme Id="Word:zav" /></Cluster>
<Cluster><Range Index="9" Length="4" /><Lexeme Id="Word:flib" GlossId="s-flib" /></Cluster>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
<Punctuation><Range Index="13" Length="1" /><BeforeText>.</BeforeText><AfterText>;</AfterText></Punctuation>
</VerseData>
</item>
<item>
<string>PHP 1:3</string>
<VerseData Hash="pia-parses-approved-hash">
<Cluster><Range Index="0" Length="4" /><Lexeme Id="Stem:wug" /><Lexeme Id="Suffix:s" /></Cluster>
<Cluster><Range Index="5" Length="5" /><Lexeme Id="Stem:dax" /><Lexeme Id="Suffix:es" /></Cluster>
<Cluster><Range Index="11" Length="5" /><Lexeme Id="Word:glorp" GlossId="s-glorp" /></Cluster>
<Cluster><Range Index="11" Length="5" /><Lexeme Id="Stem:glorp" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:4</string>
<VerseData Hash="pia-phrase-approved-hash">
<Cluster><Range Index="0" Length="7" /><Lexeme Id="Phrase:zim zam" GlossId="s-zimzam" /></Cluster>
<Cluster><Range Index="4" Length="7" /><Lexeme Id="Phrase:zam zim" GlossId="s-zamzim" /></Cluster>
<Cluster><Range Index="8" Length="7" /><Lexeme Id="Phrase:zim zam" GlossId="s-zimzam" /><Excluded>true</Excluded></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:5</string>
<VerseData Hash="pia-es-only-hash">
<Cluster><Range Index="0" Length="11" /><Lexeme Id="Phrase:nol pim tuk" GlossId="s-nolpimtuk" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:6</string>
<VerseData Hash="pia-plovs-twins-hash">
<Cluster><Range Index="5" Length="5" /><Lexeme Id="Word:plovs" GlossId="s-plovs" /></Cluster>
<Cluster><Range Index="5" Length="5" /><Lexeme Id="Stem:plov" /><Lexeme Id="Suffix:s" /></Cluster>
<Cluster><Range Index="15" Length="5" /><Lexeme Id="Word:plovs" GlossId="s-plovs" /></Cluster>
<Cluster><Range Index="15" Length="5" /><Lexeme Id="Stem:plov" /><Lexeme Id="Suffix:s" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:7</string>
<VerseData Hash="pia-plovs-variants-hash">
<Cluster><Range Index="0" Length="5" /><Lexeme Id="Word:plovs" GlossId="s-plovs" /></Cluster>
<Cluster><Range Index="15" Length="5" /><Lexeme Id="Word:plovs" GlossId="s-plovs-alt" /></Cluster>
<Cluster><Range Index="15" Length="5" /><Lexeme Id="Stem:plov" /><Lexeme Id="Suffix:s" /></Cluster>
</VerseData>
</item>
</Verses>
</InterlinearData>
30 changes: 30 additions & 0 deletions test-data/pt9-projects/PIA/Interlinear_fr/Interlinear_fr_PHP.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<InterlinearData GlossLanguage="fr" BookId="PHP">
<Verses>
<item>
<string>PHP 1:1</string>
<VerseData Hash="pia-fr-words-approved-hash">
<Cluster><Range Index="0" Length="3" /><Lexeme Id="Word:wug" GlossId="s-wug1" /></Cluster>
<Cluster><Range Index="4" Length="7" /><Lexeme Id="Word:blicket" GlossId="s-blicket-fr" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:3</string>
<VerseData>
<Cluster><Range Index="5" Length="5" /><Lexeme Id="Stem:daxes" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:4</string>
<VerseData Hash="pia-fr-kex-approved-hash">
<Cluster><Range Index="16" Length="3" /><Lexeme Id="Stem:kex" /></Cluster>
</VerseData>
</item>
<item>
<string>PHP 1:5</string>
<VerseData>
<Cluster><Range Index="0" Length="11" /><Lexeme Id="Phrase:nol pim tuk" GlossId="s-nolpimtuk-fr" /></Cluster>
</VerseData>
</item>
</Verses>
</InterlinearData>
174 changes: 174 additions & 0 deletions test-data/pt9-projects/PIA/Lexicon.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<Lexicon>
<Language>en</Language>
<FontName>Charis SIL</FontName>
<FontSize>12</FontSize>
<Analyses>
<item>
<string>flibs</string>
<ArrayOfLexeme>
<Lexeme Type="Stem" Form="flib" Homograph="1" />
<Lexeme Type="Suffix" Form="s" Homograph="1" />
</ArrayOfLexeme>
</item>
</Analyses>
<Entries>
<item>
<Lexeme Type="Word" Form="wug" Homograph="1" />
<Entry>
<Sense Id="s-wug1">
<Gloss Language="es">uno</Gloss>
<Gloss Language="fr">un</Gloss>
</Sense>
<Sense Id="s-wug2">
<Gloss Language="es">primero</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Word" Form="blicket" Homograph="1" />
<Entry>
<Sense Id="s-blicket">
<Gloss Language="es">dos</Gloss>
</Sense>
<Sense Id="s-blicket-fr">
<Gloss Language="fr">deux</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Phrase" Form="dax fep" Homograph="1" />
<Entry>
<Sense Id="s-daxfep">
<Gloss Language="es">tres cuatro</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Phrase" Form="zim zam" Homograph="1" />
<Entry>
<Sense Id="s-zimzam">
<Gloss Language="es">nueve diez</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Phrase" Form="zam zim" Homograph="1" />
<Entry>
<Sense Id="s-zamzim">
<Gloss Language="es">diez nueve</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Phrase" Form="nol pim tuk" Homograph="1" />
<Entry>
<Sense Id="s-nolpimtuk">
<Gloss Language="es">once doce trece</Gloss>
</Sense>
<Sense Id="s-nolpimtuk-fr">
<Gloss Language="fr">onze douze treize</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Word" Form="gorp" Homograph="1" />
<Entry>
<Sense Id="s-gorp">
<Gloss Language="es">cinco</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Word" Form="tomo" Homograph="1" />
<Entry>
<Sense Id="s-tomo">
<Gloss Language="es">seis</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Word" Form="zav" Homograph="1" />
<Entry>
<Sense Id="s-zav">
<Gloss Language="es">siete</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Word" Form="glorp" Homograph="1" />
<Entry>
<Sense Id="s-glorp">
<Gloss Language="es">ocho</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Word" Form="plovs" Homograph="1" />
<Entry>
<Sense Id="s-plovs">
<Gloss Language="es">catorce</Gloss>
</Sense>
<Sense Id="s-plovs-alt">
<Gloss Language="es">decimocuarto</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Stem" Form="wug" Homograph="1" />
<Entry>
<Sense Id="s-stem-wug">
<Gloss Language="es">wug</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Suffix" Form="s" Homograph="1" />
<Entry>
<Sense Id="s-suffix-s">
<Gloss Language="es">-s</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Stem" Form="dax" Homograph="1" />
<Entry>
<Sense Id="s-stem-dax">
<Gloss Language="es">dax</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Suffix" Form="es" Homograph="1" />
<Entry>
<Sense Id="s-suffix-es">
<Gloss Language="es">-es</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Stem" Form="kex" Homograph="1" />
<Entry>
<Sense Id="s-stem-kex">
<Gloss Language="fr">quinze</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Stem" Form="glorp" Homograph="1" />
<Entry>
<Sense Id="s-stem-glorp">
<Gloss Language="es">glorp</Gloss>
</Sense>
</Entry>
</item>
<item>
<Lexeme Type="Stem" Form="plov" Homograph="1" />
<Entry>
<Sense Id="s-stem-plov">
<Gloss Language="es">plov</Gloss>
</Sense>
</Entry>
</item>
</Entries>
</Lexicon>
31 changes: 31 additions & 0 deletions test-data/pt9-projects/PIA/Settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<ScriptureText>
<StyleSheet>usfm.sty</StyleSheet>
<Versification>4</Versification>
<Language>English</Language>
<MinParatextVersion>8.0.100.76</MinParatextVersion>
<FullName>PT9 Import A - clean</FullName>
<Encoding>65001</Encoding>
<Editable>T</Editable>
<Copyright />
<NormalizationForm>NFC</NormalizationForm>
<Name>PIA</Name>
<Guid>a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1</Guid>
<DefaultFont>Charis SIL</DefaultFont>
<DefaultFontSize>12</DefaultFontSize>
<FontFeatures />
<HtmlLanguage />
<LanguageIsoCode>en:::</LanguageIsoCode>
<FileNameBookNameForm>41MAT</FileNameBookNameForm>
<FileNamePrePart />
<FileNamePostPart>PIA.SFM</FileNamePostPart>
<BiblicalTermsListSetting>Major::BiblicalTerms.xml</BiblicalTermsListSetting>
<MatchBasedOnStems>F</MatchBasedOnStems>
<AllowReadAccess>F</AllowReadAccess>
<AllowSharingWithSLDR>F</AllowSharingWithSLDR>
<Visibility>Test</Visibility>
<TranslationInfo>Standard::</TranslationInfo>
<EncodingConverter />
<UsfmVersion>3</UsfmVersion>
<BooksPresent>000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000</BooksPresent>
<Naming PrePart="" PostPart="PIA.SFM" BookNameForm="41MAT" />
</ScriptureText>
15 changes: 15 additions & 0 deletions test-data/pt9-projects/PIA/WordAnalyses.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<WordAnalyses>
<Entry Word="daxes">
<Analysis><Lexeme>Stem:dax</Lexeme><Lexeme>Suffix:es</Lexeme></Analysis>
</Entry>
<Entry Word="fepped">
<Analysis><Lexeme>Stem:fep</Lexeme><Lexeme>Suffix:ped</Lexeme></Analysis>
</Entry>
<Entry Word="brokenword">
<Analysis><Lexeme>brokenid</Lexeme></Analysis>
</Entry>
<Entry Word="emptyword">
<Analysis />
</Entry>
</WordAnalyses>
1 change: 1 addition & 0 deletions test-data/pt9-projects/PIA/en.ldml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<ldml><identity><version number="" /><generation date="2026-08-28T00:00:00Z" /><language type="en" /></identity><layout><orientation><characterOrder>left-to-right</characterOrder></orientation></layout></ldml>
1 change: 1 addition & 0 deletions test-data/pt9-projects/PIA/unique.id
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
aaaaaaaa-1111-4111-8111-aaaaaaaaaaaa
6 changes: 6 additions & 0 deletions test-data/pt9-projects/PIB/51PHPPIB.SFM
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
\id PHP - PT9 Import B
\h PIB
\mt1 Philippians
\c 1
\p
\v 1 Alpha beta gamma delta.
9 changes: 9 additions & 0 deletions test-data/pt9-projects/PIB/InterlinearSetup.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<InterlinearSetupList>
<InterlinearSetup type="Glossing" language="es">
<FontSize>12</FontSize>
<RightToLeft>false</RightToLeft>
<RelatedLanguages>false</RelatedLanguages>
<ExportOnApprove>false</ExportOnApprove>
</InterlinearSetup>
</InterlinearSetupList>
11 changes: 11 additions & 0 deletions test-data/pt9-projects/PIB/Interlinear_es/Interlinear_es_JAS.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<InterlinearData GlossLanguage="es" BookId="JAS">
<Verses>
<item>
<string>JAS 1:1</string>
<VerseData>
<Cluster><Range Index="0" Length="5" /><Lexeme Id="Word:alpha" GlossId="s-alpha" /></Cluster>
</VerseData>
</item>
</Verses>
</InterlinearData>
Loading
Loading