update main
authorJulien Moutinho <julm+worksheets@sourcephile.fr>
Fri, 29 Aug 2025 20:31:32 +0000 (22:31 +0200)
committerJulien Moutinho <julm+worksheets@sourcephile.fr>
Fri, 29 Aug 2025 20:31:32 +0000 (22:31 +0200)
49 files changed:
.gitignore
Makefile
REUSE.toml
data/.gitignore [new file with mode: 0644]
data/styles/Paper.css [new file with mode: 0644]
data/styles/Rosetta/Common.css [new file with mode: 0644]
data/styles/Rosetta/Reading.css [new file with mode: 0644]
data/styles/Rosetta/Writing.css [new file with mode: 0644]
data/styles/worksheet.css [new file with mode: 0644]
flake.lock
flake.nix
fourmolu.yaml
src/Prelude.hs [deleted file]
src/Wiktionary.hs [new file with mode: 0644]
src/Worksheets/Writing/Latin.hs [deleted file]
style/worksheet.css [deleted file]
tests/Language/Chinese/dictToWeights/dictOrder/all.golden [new file with mode: 0644]
tests/Language/Chinese/dictToWeights/dictOrder/take_10.golden [new file with mode: 0644]
tests/Language/Chinese/dictToWeights/size.golden [new file with mode: 0644]
tests/Language/Chinese/dictToWeights/take_10.golden [new file with mode: 0644]
tests/Language/Chinese/keyLengthToSumOfEntries.golden [new file with mode: 0644]
tests/Language/Chinese/keyLengths.golden [new file with mode: 0644]
tests/Language/Chinese/keysWithoutDecomp.golden [new file with mode: 0644]
tests/Language/Chinese/keysWithoutFreq.golden [new file with mode: 0644]
tests/Language/Chinese/keysWithoutStrokes.golden [new file with mode: 0644]
tests/Language/Chinese/size.golden [new file with mode: 0644]
tests/Language/ChineseSpec.hs [new file with mode: 0644]
tests/Language/EnglishSpec.hs [new file with mode: 0644]
tests/Language/FrenchSpec.hs [new file with mode: 0644]
tests/Recipes/recipe.css [new file with mode: 0644]
tests/Spec.hs
tests/Worksheets/Writing/LatinSpec.hs [deleted file]
tests/Worksheets/Writing/LatinSpec/TheHobbit/FarOverTheMistyMountainsCold/full.txt [new file with mode: 0644]
tests/Worksheets/Writing/LatinSpec/TheHobbit/FarOverTheMistyMountainsCold/part1.txt [new file with mode: 0644]
tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part1.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part2.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part2.txt
tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part3.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part4.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/en/part1.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/en/part2.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part1.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part2.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part3.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part4.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part5.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part6.html [deleted file]
tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part7.html [deleted file]
worksheets.cabal

index bb3d4b9e8dba93520d58bca272e832760a5ef174..45e5bd20080b616b83770daf5e2212a51c7cdad3 100644 (file)
 *.root
 .direnv/
 .ghc.environment.*
+.pre-commit-config.yaml
 .stack-work/
-dist/
 dist-newstyle/
+dist/
 dump-core/
 hlint.html
+libs/
+old/
 result*
-.pre-commit-config.yaml
index 789d40dbcb5d423f90cf1902ed6d257961953b8a..bdbcba2fb0819f334e41e389530918ea7670cb44 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,7 @@ ghciwatch:
 .PHONY: tests
 t tests:
        cabal test $(CABAL_TEST_FLAGS) \
-        --test-show-details always --test-options "$(TEST_OPTIONS)"
+        --test-show-details streaming --test-options "$(TEST_OPTIONS)"
 t/repl tests/repl:
        cabal repl $(CABAL_REPL_FLAGS) $(CABAL_TEST_FLAGS) $(project)-tests
 t/ghcid tests/ghcid:
@@ -97,5 +97,5 @@ lint/apply: .hlint.yaml
 
 style:
        find $(sourceDirs) -name "*.hs" | xargs -P $(shell nproc) -I {} \
-         fourmolu -q -o -XOverloadedLabels -o -XImportQualifiedPost --mode inplace {}
+         fourmolu --unsafe -q -o -XOverloadedLabels -o -XImportQualifiedPost --mode inplace {}
        cabal-fmt -i *.cabal
index 3263052354dfb49362fd4a0d487b8e7881b067aa..4009efd9410f6cbc98b55f83e6aa3301b094461e 100644 (file)
@@ -4,7 +4,7 @@ SPDX-PackageSupplier = "Julien Moutinho <julm+worksheets@sourcephile.fr>"
 SPDX-PackageDownloadLocation = "https://git.sourcephile.fr/haskell/worksheets"
 
 [[annotations]]
-path = ["**.nix", "**.lock", "cabal.project", "**.cabal", "**.md", "**.toml", ".chglog/**", ".envrc", "fourmolu.yaml", ".gitignore", ".hlint.yaml", "Makefile"]
+path = [".ghci", "cabal.project*", "**.nix", "**.lock", "cabal.project", "**.cabal", "**.md", "**.toml", ".chglog/**", ".envrc", "fourmolu.yaml", ".gitignore", ".hlint.yaml", "Makefile"]
 precedence = "aggregate"
 SPDX-FileCopyrightText = "Julien Moutinho <julm+worksheets@sourcephile.fr>"
 SPDX-License-Identifier = "CC0-1.0"
@@ -14,3 +14,9 @@ path = ["src/**", "style/**", "tests/**", "app/**"]
 precedence = "aggregate"
 SPDX-FileCopyrightText = "Julien Moutinho <julm+worksheets@sourcephile.fr>"
 SPDX-License-Identifier = "AGPL-3.0-or-later"
+
+[[annotations]]
+path = ["data/**"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "???"
+SPDX-License-Identifier = "CC0-1.0"
diff --git a/data/.gitignore b/data/.gitignore
new file mode 100644 (file)
index 0000000..98b3f6c
--- /dev/null
@@ -0,0 +1,7 @@
+*.avif
+*.jpg
+*.jsonl
+*.sqlite
+*.ttl
+*.webp
+langs
diff --git a/data/styles/Paper.css b/data/styles/Paper.css
new file mode 100644 (file)
index 0000000..059c0a9
--- /dev/null
@@ -0,0 +1,44 @@
+body { margin:0; }
+@page { margin:0; }
+.sheet {
+  overflow:hidden;
+  position:relative;
+  box-sizing:border-box;
+  page-break-after:always;
+}
+
+/** Paper sizes **/
+.sheet.A3                { width: 297mm; height: 419mm }
+.sheet.A3.landscape      { width: 420mm; height: 296mm }
+.sheet.A4                { width: 210mm; height: 296mm }
+.sheet.A4.landscape      { width: 297mm; height: 209mm }
+.sheet.A4plus            { width: 240mm; height: 320mm }
+.sheet.A4plus.landscape  { width: 320mm; height: 240mm }
+.sheet.A5                { width: 148mm; height: 209mm }
+.sheet.A5.landscape      { width: 210mm; height: 147mm }
+.sheet.letter            { width: 216mm; height: 279mm }
+.sheet.letter.landscape  { width: 280mm; height: 215mm }
+.sheet.legal             { width: 216mm; height: 356mm }
+.sheet.legal.landscape   { width: 357mm; height: 215mm }
+
+/** For screen preview **/
+@media screen {
+  body { background:#e0e0e0 }
+  .sheet {
+    background:white;
+    box-shadow:0 .5mm 2mm rgba(0,0,0,.3);
+    margin:5mm auto !important;
+  }
+}
+
+/** Fix for Chrome issue #273306 
+@media print {
+           body.A3.landscape { width: 420mm }
+  body.A3, body.A4.landscape { width: 297mm }
+  body.A4, body.A5.landscape { width: 210mm }
+  body.A5                    { width: 148mm }
+  body.letter, body.legal    { width: 216mm }
+  body.letter.landscape      { width: 280mm }
+  body.legal.landscape       { width: 357mm }
+}
+**/
diff --git a/data/styles/Rosetta/Common.css b/data/styles/Rosetta/Common.css
new file mode 100644 (file)
index 0000000..a81fb83
--- /dev/null
@@ -0,0 +1,246 @@
+.lang-LangueMandarin.sentence {
+  /* FIXME: should derive from Difficulties */
+  column-gap:0 !important;
+}
+.sentence {
+}
+.sentence-horiz {
+  display:flex;
+  flex-direction:row;
+  flex-wrap:nowrap;
+  margin:0 0 0 0;
+  align-self:flex-start;
+}
+.sentence-word {
+  margin:0 0 0 0;
+  display:grid;
+  //gap:1px;
+  /* ExplanationNote: avoid rounded borders to be cropped by background-color: */
+  overflow: hidden;
+  /*
+  border-top-left-radius:3mm;
+  border-top-right-radius:3mm;
+  */
+}
+.sentence-word:last-child {
+  margin-right:0;
+}
+.sentence-cell {
+  display:grid;
+  background-color:white;
+  font-family:monospace;
+  font-variant:small-caps;
+  justify-self:center;
+  margin-left:0;
+  margin-right:0;
+  padding-left:0;
+  padding-right:0;
+  align-content:center;
+  justify-content:center;
+  position:relative;
+  white-space:preserve-spaces;
+  width:100%
+}
+.sentence-cell.pronunciation {
+  font-variant:normal;
+  font-weight:bold;
+  font-family:Arial;
+  font-size:0.35cm;
+  height:0.45cm;
+}
+.sentence-cell.input {
+  color:#ddd;
+  //border:1px solid #aaa;
+}
+.sentence-cell.input.break .cell {
+  border-left:0 !important;
+  border-top:0 !important;
+  border-bottom:0 !important;
+  border-right:0 !important;
+}
+.sentence-word.word-index-0 .sentence-cell.input.input-index-1 .cell {
+  border-left:1px solid #aaa;
+}
+.sentence-word .sentence-cell.input .cell
+{
+  border-top:1px solid #aaa;
+  border-bottom:1px solid #aaa;
+  border-right:1px solid #aaa;
+  //border-left:1px solid #aaa;
+  position:absolute;
+  left:0;
+  right:0;
+  bottom:0;
+  top:0;
+}
+.sentence-cell.input.script-UnicodeBlockCJK-UnicodeBlockCJK-Unified-Ideographs .cell {
+  border:0 !important;
+  position:relative !important;
+}
+/* Compress a bit the height
+ */
+.sentence-cell.model.script-UnicodeBlockLatin-UnicodeBlockLatin-Basic,
+.sentence-cell.model.script-UnicodeBlockLatin-UnicodeBlockLatin-ExtendedA,
+.sentence-cell.model.script-UnicodeBlockLatin-UnicodeBlockLatin1-Supplement,
+.sentence-cell.model.script-UnicodeBlockMiscellaneous-Technical {
+  //height:6mm;
+}
+.sentence-cell.input.script-UnicodeBlockLatin-UnicodeBlockLatin-Basic {
+  //border-bottom:1px solid #aaa;
+  //border-top:1px solid #aaa;
+}
+.sentence-cell.input.hidden {
+  color:transparent;
+}
+.sentence-cell.break {
+  width:3mm;
+}
+.sentence-cell.model.break {
+  color:#ddd;
+}
+.sentence-cell {
+  --pronunciation-even:#ffaa5770;
+  --pronunciation-odd:#82c1ff70;
+  --pronunciation-border-size:3px;
+  --pronunciation-silent:transparent;
+}
+.lang-LangueFrançais .sentence-cell {
+  --pronunciation-odd:darkblue;
+  --pronunciation-even:lightblue;
+  //--pronunciation-odd:#82c1ff70;
+  //--pronunciation-even:#0055A470;
+  //--pronunciation-odd:#c8e4ff;
+  //--pronunciation-even:#8fb4d7;
+}
+.lang-LangueAnglais .sentence-cell {
+  --pronunciation-odd:darkgreen;
+  --pronunciation-even:lightgreen;
+  //--pronunciation-odd:#a9ed8f;
+  //--pronunciation-even:#76c69e;
+  //--pronunciation-odd:#3dd70070;
+  //--pronunciation-even:#40846270;
+}
+.lang-LangueMandarin .sentence-cell {
+  --pronunciation-odd:darkred;
+  --pronunciation-even:#FF7276;
+  //--pronunciation-odd:#ff8f8f;
+  //--pronunciation-even:#e3b68f;
+  //--pronunciation-odd:#ff000070;
+  //--pronunciation-even:#bf5a0070;
+}
+
+/* .cell-even */
+
+.sentence-cell.pronunciation.cell-even {
+  border-bottom:var(--pronunciation-border-size) solid var(--pronunciation-even);
+  color:var(--pronunciation-even);
+}
+.sentence-cell.pronunciation.cell-even.cell-split {
+  background:linear-gradient(to right,var(--pronunciation-even),var(--pronunciation-odd));
+  background-clip:text;
+  color:transparent;
+  border-image-source:linear-gradient(to right,var(--pronunciation-even),var(--pronunciation-odd));
+  border-image-slice:1;
+}
+.sentence-cell.pronunciation.cell-even.cell-depends-on-before:before {
+  position:absolute;
+  display:block;
+  content:'';
+  border-left:var(--pronunciation-border-size) solid var(--pronunciation-even);
+  bottom:0;
+  height:4px;
+  width:var(--pronunciation-border-size);
+  box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-even.cell-depends-on-after:after {
+  position:absolute;
+  display:block;
+  content:'';
+  border-right:var(--pronunciation-border-size) solid var(--pronunciation-even);
+  height:4px;
+  bottom:0;
+  right:0;
+  width:var(--pronunciation-border-size);
+  box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-even.cell-depends-on-meaning:before {
+  position:absolute;
+  display:block;
+  content:'';
+  bottom:0;
+  height:4px;
+  width:var(--pronunciation-border-size);
+  box-sizing:border-box;
+  width:100%;
+  border-bottom:var(--pronunciation-border-size) dotted var(--pronunciation-even);
+}
+
+/* .cell-odd */
+
+.sentence-cell.pronunciation.cell-odd {
+  border-bottom:var(--pronunciation-border-size) solid var(--pronunciation-odd);
+  color:var(--pronunciation-odd);
+}
+.sentence-cell.pronunciation.cell-odd.cell-split {
+  background:linear-gradient(to right,var(--pronunciation-odd),var(--pronunciation-even));
+  background-clip:text;
+  color:transparent;
+  border-image-source:linear-gradient(to right,var(--pronunciation-odd),var(--pronunciation-even));
+  border-image-slice:1;
+}
+.sentence-cell.pronunciation.cell-odd.cell-depends-on-before:before {
+  position:absolute;
+  display:block;
+  content:'';
+  border-left:var(--pronunciation-border-size) solid var(--pronunciation-odd);
+  bottom:0;
+  height:4px;
+  box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-odd.cell-depends-on-after:after {
+  position:absolute;
+  display:block;
+  content:'';
+  right:0;
+  bottom:0;
+  border-right:var(--pronunciation-border-size) solid var(--pronunciation-odd);
+  height:4px;
+  box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-odd.cell-depends-on-meaning:after {
+  position:absolute;
+  display:block;
+  content:'';
+  right:0;
+  bottom:0;
+  height:4px;
+  box-sizing:border-box;
+  width:100%;
+  border-bottom:var(--pronunciation-border-size) dotted var(--pronunciation-odd);
+}
+
+/* .cell-silent */
+
+.sentence-cell.pronunciation.cell-silent {
+  border-bottom:var(--pronunciation-border-size) solid var(--pronunciation-silent);
+  color:var(--pronunciation-silent);
+}
+.sentence-cell.pronunciation.cell-silent.cell-depends-on-before:before {
+  position:absolute;
+  display:block;
+  content:'';
+  border-left:var(--pronunciation-border-size) solid var(--pronunciation-silent);
+  bottom:0;
+  height:4px;
+  box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-silent.cell-depends-on-after:after {
+  position:absolute;
+  display:block;
+  content:'';
+  right:0;
+  bottom:0;
+  border-right:var(--pronunciation-border-size) solid var(--pronunciation-silent);
+  height:4px;
+  box-sizing:border-box;
+}
diff --git a/data/styles/Rosetta/Reading.css b/data/styles/Rosetta/Reading.css
new file mode 100644 (file)
index 0000000..d04834d
--- /dev/null
@@ -0,0 +1,146 @@
+.sub-page {
+  //margin:2mm !important;
+}
+.main-page {
+  //background-color:white !important;
+}
+.rosetta-reading {
+  margin:0mm;
+  /* ExplanationNote: even when printing with the option "Shrink to Print Area"
+   * pixels too close to the border can get cropped.
+   */
+  padding:1mm;
+  display:grid;
+  ////column-gap:1mm;
+  //row-gap:1mm;
+  justify-content:space-evenly;
+  //align-items:space-between;
+  align-content:space-around;
+}
+.cards {
+  border:1px solid #aaa;
+  display:grid;
+  gap:1px;
+  align-content:center;
+  background-color:#aaa;
+  justify-content:center;
+}
+.cards.cards-front {
+  background-color:transparent;
+  border:1px solid transparent;
+}
+.card {
+  display:grid;
+  background-color:white;
+  //border:5px solid green;
+  justify-items:center;
+  align-items:center;
+}
+.card-front {
+  display:flex;
+  flex-direction:column;
+  justify-content:space-between;
+  /* ExplanationNote: enough to fit two lines of french,
+   * two lines of english
+   * and two lines of chinese (with a bigger font to manually write over it).
+   */
+  padding-top:3mm;
+  padding-bottom:3mm;
+  padding-left:1mm;
+  padding-right:1mm;
+}
+.card-front-french-english-mandarin {
+  display:grid;
+  grid-template-rows:2cm 2cm 4.2cm;
+  align-items:start;
+  justify-items:center;
+}
+.card-front > .separator {
+  border-top:1px solid #999;
+  width:100%;
+}
+.card-matter {
+  display:flex;
+  flex-direction:row;
+  flex-wrap:wrap;
+  justify-content:center;
+  align-content:space-around;
+  column-gap:0.5cm;
+}
+.card-description {
+  color:#999;
+  font-family:monospace;
+}
+.card-picture {
+  display:flex;
+  flex-direction:column;
+  flex-wrap:nowrap;
+  justify-content:flex-start;
+  width:100%;
+  height:100%;
+  overflow:hidden;
+}
+.card-picture img {
+  display:block;
+  border:0;
+  width:100%;
+  height:100%;
+  object-fit:contain;
+  object-position:center center;
+  overflow:hidden;
+}
+.part {
+  display:flex;
+  flex-direction:row;
+  flex-wrap:nowrap;
+  margin:0 0 0 0;
+  border:5px solid red;
+}
+.word {
+  font-family:monospace;
+  font-variant:small-caps;
+  font-size:1.5cm;
+  line-height:1.0;
+}
+.word .word-field {
+  display:flex;
+  flex-direction:row;
+  justify-content:center;
+}
+.word .word-parts {
+}
+.word .word-parts .word-part {
+}
+.word .word-part.part-odd.word-part-2 {
+  background:linear-gradient(to right,blue,green);
+  background-clip:text;
+  color:transparent;
+}
+.word .word-part.part-even.word-part-2 {
+  background:linear-gradient(to right,green,blue);
+  background-clip:text;
+  color:transparent;
+}
+
+.word .part-even {
+  color:blue;
+}
+.word .part-odd {
+  color:green;
+}
+.word .word-ipas {
+  color:#999;
+  font-size:0.5cm;
+  font-family:Arial;
+  font-variant:normal;
+}
+.word .word-ipas .word-ipa {
+}
+.word .word-pinyins {
+  color:#999;
+  font-size:0.5cm;
+  font-family:Arial;
+  font-variant:normal;
+}
+.word .word-pinyins .word-pinyin {
+}
diff --git a/data/styles/Rosetta/Writing.css b/data/styles/Rosetta/Writing.css
new file mode 100644 (file)
index 0000000..bdc402f
--- /dev/null
@@ -0,0 +1,93 @@
+.rosetta-writing {
+  /* ExplanationNote: even when printing with the option "Shrink to Print Area"
+   * pixels too close to the border can get cropped.
+   */
+  padding:2mm;
+  display:grid;
+  column-gap:5mm;
+  row-gap:1mm;
+  justify-content:space-evenly;
+  align-items:flex-start;
+  align-content:space-around;
+}
+.rosetta-writing-part {
+  /* ExplanationNote: by default, a grid item cannot be smaller than the size of its content.
+   * Change that.
+   */
+  min-height:0;
+  min-width:0;
+  overflow:hidden;
+}
+.rosetta-writing-part-picture {
+  display:flex;
+  flex-direction:column;
+  flex-wrap:nowrap;
+  justify-content:flex-start;
+  width:100%;
+  height:100%;
+}
+.rosetta-writing-part-picture img {
+  display:block;
+  border:0;
+  width:100%;
+  height:100%;
+  object-fit:contain;
+  object-position:right center;
+  overflow:hidden;
+}
+.rosetta-writing-part-picture.with-description img {
+  border-top-left-radius:3mm;
+  border-top-right-radius:3mm;
+}
+.rosetta-writing-part-picture .description {
+  padding-left:0.2cm;
+  padding-right:0.2cm;
+  font-family:monospace;
+  font-variant:small-caps;
+  font-size:14pt;
+  background-color:#ddd;
+  border-top:0 !important;
+  border:1px solid #ddd;
+  border-bottom-left-radius:3mm;
+  border-bottom-right-radius:3mm;
+  overflow:hidden;
+  text-align:center;
+}
+
+
+.rosetta-writing-part.sentence {
+  height:100%;
+}
+.sentence {
+  margin-top:0;
+  margin-bottom:0;
+  margin-left:0;
+  margin-right:0;
+  display:flex;
+  flex-direction:row;
+  flex-wrap:wrap;
+  justify-content:flex-start;
+  align-items:flex-end;
+  align-content:flex-start;
+  row-gap:1mm;
+  column-gap:0.5cm;
+}
+.sentence-word {
+  //gap:1px;
+  //background-color:#aaa;
+  //border:1px solid #aaa;
+  /*
+  border-top-left-radius:3mm;
+  border-top-right-radius:3mm;
+  */
+}
+
+.sentence-cell.input.script-UnicodeBlockCJK-UnicodeBlockCJK-Unified-Ideographs {
+  font-size:20mm;
+  height:25mm;
+  width:25mm;
+  line-height:0;
+}
+.lang-LangueMandarin .sentence-cell.model.script-UnicodeBlockCJK-UnicodeBlockCJK-Unified-Ideographs {
+  display:none;
+}
diff --git a/data/styles/worksheet.css b/data/styles/worksheet.css
new file mode 100644 (file)
index 0000000..b66fe7a
--- /dev/null
@@ -0,0 +1,156 @@
+body {
+  line-height:1.4;
+  margin-top:0;
+  margin-left:0;
+  margin-right:0;
+  //width:650px;
+  width:100%;
+  display: grid;
+  grid-template-columns: 1 / -1;
+  justify-items: center;
+  justify-content:center;
+}
+.worksheet {
+}
+.row {
+  display: grid;
+  //grid-template-columns: repeat(1000, 1.5em);
+}
+.worksheet > div:nth-child(2n) {
+  margin-bottom:.5em;
+}
+.cell {
+  display: grid;
+  place-content: center;
+  position: relative;
+  box-shadow:0 0 0 1px #AAA;
+  background-color:white;
+  min-height:1cm;
+  font-size: 20pt;
+  padding-left:0;
+  padding-right:0;
+  margin-left:0;
+  margin-right:0;
+}
+.cell-space {
+  box-shadow:0 0 0 0 red !important;
+  border-left:1px solid #AAA;
+}
+
+
+.words {
+  white-space:preserve-spaces;
+  //width:100%;
+  margin-left: 10px;
+  margin-right: 10px;
+  margin-bottom: 1ex;
+  margin-top: 1ex;
+  font-family: monospace;
+  font-variant: small-caps;
+  display: grid;
+  gap: 0px;
+  //justify-items: center;
+  justify-self: center;
+  //background-color:grey;
+  place-content: center;
+}
+.words-row {
+  display: grid;
+  break-inside:avoid;
+  grid-template-columns: 6cm 11cm;
+}
+.words-cell {
+  display: grid;
+  vertical-align:center;
+  position: relative;
+  box-shadow:0 0 0 3px #AAA;
+  background-color:white;
+  min-height:1.5em;
+  margin-left:0;
+  margin-right:0;
+}
+
+
+.words-cell .worksheets {
+  margin-top:1ex;
+  margin-bottom:1ex;
+  margin-left:1ex;
+  margin-right:1ex;
+  display:flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  justify-content:space-evenly;
+  align-items:flex-start;
+  align-content:space-around;
+}
+.words-cell .worksheets .worksheet:last-child {
+  margin-bottom:0;
+  margin-right:0;
+}
+.words-cell .worksheets .worksheet {
+  align-self:flex-start;
+  white-space:preserve-spaces;
+  //width:auto;
+  margin-left: 0;
+  margin-right: 0.5cm;
+  margin-bottom: 1ex;
+  margin-top: 0;
+  font-family: monospace;
+  font-variant: small-caps;
+  display: grid;
+  gap: 0px;
+  //justify-items: center;
+  justify-self: center;
+  //background-color:grey;
+}
+
+.words-cell .worksheets .worksheet > div:nth-child(2n) {
+  margin-bottom:0;
+}
+.words-cell-picture {
+  width: fit-content;
+  place-content:center;
+  //block-size:fit-content;
+  //box-sizing: fit-content;
+  //width:auto;
+  //max-height:100%;
+  //background-color:white;
+}
+.words-cell-picture img {
+  border:0;
+  place-content:center;
+  vertical-align:center;
+  width: 100%;
+  object-fit: contain;
+  object-position: center center;
+}
+.words-cell-french {
+}
+.words-cell-english {
+}
+.words-cell-mandarin {
+}
+.words-cell-mandarin .cell {
+  font-size:30pt;
+}
+.words-cell-mandarin .row-input .cell {
+  color:#ddd;
+}
+.words-cell-mandarin .row-sound .cell {
+  color:black;
+  font-size:14pt;
+  font-variant:normal;
+}
+.words-cell-pinyin {
+}
+
+@media all {
+  @page {
+    size: 210mm 297mm;
+    margin-top: 1cm;
+    margin-bottom: 1cm;
+    margin-left: 2cm;
+    margin-right: 2cm;
+  }
+}
+}
index 087335f5266e73cabc17a62b39c0fe19aad49881..3caa5b35cc584de818dc8370157883f4971a8543 100644 (file)
         "type": "github"
       }
     },
+    "ipa-hs": {
+      "flake": false,
+      "locked": {
+        "narHash": "sha256-APX4D8aycIpfA1kMCi+tgV+VxgA2tX5LMBNCvJz+I2k=",
+        "type": "file",
+        "url": "file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"
+      },
+      "original": {
+        "type": "file",
+        "url": "file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1734323986,
     "root": {
       "inputs": {
         "git-hooks": "git-hooks",
-        "nixpkgs": "nixpkgs"
+        "ipa-hs": "ipa-hs",
+        "nixpkgs": "nixpkgs",
+        "symantic-base": "symantic-base"
+      }
+    },
+    "symantic-base": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1716595036,
+        "narHash": "sha256-N94VfCqTBUrk4o6d/gsuuE3FZFnXL3bcFFnlani6jSE=",
+        "ref": "refs/heads/main",
+        "rev": "8e1febb72b37887727ba0c011e9bebeca9375a35",
+        "revCount": 116,
+        "type": "git",
+        "url": "git://git.sourcephile.fr/haskell/symantic-base.git"
+      },
+      "original": {
+        "type": "git",
+        "url": "git://git.sourcephile.fr/haskell/symantic-base.git"
       }
     }
   },
index 31d64e5cc8ab30db555285fc1c4fb1511ddbf74a..c91fa49708a7ce6129c91f316f52fd18f8308727 100644 (file)
--- a/flake.nix
+++ b/flake.nix
@@ -3,9 +3,11 @@
 {
   description = "Worksheet";
   inputs = {
-    nixpkgs.url = "flake:nixpkgs";
+    nixpkgs.url = "github:NixOS/nixpkgs/9cb344e96d5b6918e94e1bca2d9f3ea1e9615545";
     git-hooks.url = "github:cachix/git-hooks.nix";
     git-hooks.inputs.nixpkgs.follows = "nixpkgs";
+    symantic-base = { url = "git://git.sourcephile.fr/haskell/symantic-base.git"; flake = false; };
+    ipa-hs = { url = "git+file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"; flake = false; };
   };
   outputs =
     inputs:
@@ -20,7 +22,7 @@
           #./Readme.md
           ./LICENSES
           (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
-          (fileFilter (file: lib.any file.hasExt [ "css" ]) ./style)
+          (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
           (fileFilter (file: lib.any file.hasExt [ "hs" "html" "txt" ]) ./tests)
           #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
         ];
             pkgs = inputs.nixpkgs.legacyPackages.${system};
             haskellPackages = pkgs.haskellPackages.extend (with pkgs.haskell.lib; finalHaskellPkgs: previousHaskellPkgs: {
               ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
+              anki-tools = null;
+              symantic-base = finalHaskellPkgs.callCabal2nix "symantic-base" inputs.symantic-base { };
+              #ipa = doJailbreak (unmarkBroken previousHaskellPkgs.ipa);
+              ipa = doJailbreak (finalHaskellPkgs.callCabal2nix "ipa-hs" inputs.ipa-hs { });
+              python-pickle = dontCheck (doJailbreak (unmarkBroken previousHaskellPkgs.python-pickle));
             });
           }
         );
     in
     {
       # `nix -L build`
-      packages = perSystem ({ haskellPackages, ... }: {
+      packages = perSystem ({ haskellPackages, pkgs, ... }: pkgs // {
         default = haskellPackages.${pkg};
       });
       # `nix -L develop`  or  `direnv allow`
@@ -58,6 +65,9 @@
               haskellPackages.hlint
               #pkgs.git-chglog
               pkgs.reuse
+              pkgs.xdot
+              pkgs.zgrviewer
+              pkgs.gephi
             ];
             withHoogle = false;
             inherit (inputs.self.checks.${system}.git-hooks-check) shellHook;
index 6d0ac77d3bec34916b1fdc06cee5e0fbd91ffbea..d1295c7bc3d8566bb23b66db6868e5a966c29dd3 100644 (file)
@@ -11,3 +11,6 @@ newlines-between-decls: 1
 record-brace-space: false
 respectful: true
 single-constraint-parens: never
+fixities:
+  - "infixr 0 :="
+  - "infixr 0 $"
diff --git a/src/Prelude.hs b/src/Prelude.hs
deleted file mode 100644 (file)
index 03329f8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# LANGUAGE PackageImports #-}
-
-module Prelude (
-  -- module BasePrelude
-  -- module Prelude,
-  Bounded (..),
-  Double,
-  Enum,
-  Fractional (..),
-  Integral (..),
-  Num (..),
-  Rational,
-  Real,
-  error,
-  FilePath,
-  fromIntegral,
-  IsString (..),
-  String,
-  toRational,
-  IO,
-  Char,
-  Monad (..),
-  forM,
-  forM_,
-  (++),
-  (>>>),
-  module Data.Bool,
-  module Data.Eq,
-  module Data.Function,
-  module Data.Functor,
-  module Data.Ord,
-  module Data.Semigroup,
-)
-where
-
-import Control.Arrow
-import Control.Monad
-import Data.Bool
-import Data.Eq
-import Data.Function
-import Data.Functor
-import Data.Ord
-import Data.Semigroup
-import Data.String
-import "base" Prelude as BasePrelude
diff --git a/src/Wiktionary.hs b/src/Wiktionary.hs
new file mode 100644 (file)
index 0000000..7705f9b
--- /dev/null
@@ -0,0 +1,231 @@
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Wiktionary where
+
+import Data.Aeson.TH
+import Data.List qualified as List
+import Data.Text qualified as Text
+import Worksheets.Utils.IPA (IPAPhons)
+import Worksheets.Utils.JSON qualified as JSON
+import Worksheets.Utils.Prelude
+import Worksheets.Utils.SQL qualified as SQL
+import Prelude (quot)
+
+data Abbreviation = Abbreviation
+  { abbreviation_raw_tags :: Maybe JSON.Value
+  , abbreviation_roman :: Maybe ShortText
+  , abbreviation_sense :: Maybe JSON.Value
+  , abbreviation_sense_index :: Maybe JSON.Value
+  , abbreviation_tags :: Maybe JSON.Value
+  , abbreviation_topics :: Maybe JSON.Value
+  , abbreviation_translation :: Maybe JSON.Value
+  , abbreviation_word :: Maybe ShortText
+  }
+  deriving (Eq, Show)
+$(deriveJSON JSON.options ''Abbreviation)
+
+data Anagram = Anagram
+  { anagram_word :: Maybe ShortText
+  }
+  deriving (Eq, Show)
+$(deriveJSON JSON.options ''Anagram)
+
+data Form = Form
+  { form_form :: Maybe ShortText
+  , form_ipas :: Maybe [IPAPhons]
+  , form_raw_tags :: Maybe JSON.Value
+  , form_sense :: Maybe JSON.Value
+  , form_sense_index :: Maybe JSON.Value
+  , form_source :: Maybe ShortText
+  , form_tags :: Maybe [ShortText]
+  , form_hiragana :: Maybe ShortText
+  , form_roman :: Maybe ShortText
+  }
+  deriving (Eq, Show)
+$(deriveJSON JSON.options ''Form)
+
+data Sense = Sense
+  { sense_alt_of :: Maybe JSON.Value
+  , sense_categories :: Maybe [ShortText]
+  , sense_examples :: Maybe JSON.Value
+  , sense_form_of :: Maybe JSON.Value
+  , sense_glosses :: Maybe [ShortText]
+  , sense_note :: Maybe JSON.Value
+  , sense_raw_tags :: Maybe JSON.Value
+  , sense_tags :: Maybe JSON.Value
+  , sense_topics :: Maybe JSON.Value
+  }
+  deriving (Eq, Show)
+$(deriveJSON JSON.options ''Sense)
+
+data Sound = Sound
+  { sound_audio :: Maybe ShortText
+  , sound_enpr :: Maybe IPAPhons
+  , sound_flac_url :: Maybe ShortText
+  , sound_homophone :: Maybe JSON.Value
+  , sound_ipa :: Maybe IPAPhons
+  , sound_mp3_url :: Maybe ShortText
+  , sound_note :: Maybe JSON.Value
+  , sound_oga_url :: Maybe ShortText
+  , sound_ogg_url :: Maybe ShortText
+  , sound_opus_url :: Maybe ShortText
+  , sound_raw_tags :: Maybe [ShortText]
+  , sound_rhymes :: Maybe JSON.Value
+  , sound_roman :: Maybe JSON.Value
+  , sound_other :: Maybe JSON.Value
+  , sound_text :: Maybe JSON.Value
+  , sound_tags :: Maybe JSON.Value
+  , sound_topics :: Maybe JSON.Value
+  , sound_wav_url :: Maybe ShortText
+  , sound_zh_pron :: Maybe JSON.Value -- zh-pron
+  }
+  deriving (Eq, Show)
+$(deriveJSON JSON.options ''Sound)
+
+data Synonym = Synonym
+  { synonym_alt :: Maybe JSON.Value
+  , synonym_raw_tags :: Maybe JSON.Value
+  , synonym_roman :: Maybe JSON.Value
+  , synonym_sense :: Maybe JSON.Value
+  , synonym_sense_index :: Maybe JSON.Value
+  , synonym_tags :: Maybe JSON.Value -- [ShortText]
+  , synonym_topics :: Maybe JSON.Value
+  , synonym_translation :: Maybe JSON.Value
+  , synonym_word :: Maybe ShortText
+  }
+  deriving (Eq, Show)
+$(deriveJSON JSON.options ''Synonym)
+
+-- | Tries to follow the schema at:
+-- https://kaikki.org/dictionary/errors/mapping/index.html
+data Wiktionary = Wiktionary
+  { wiktionary_id :: Int -- PRIMARY KEY
+  , wiktionary_word :: Maybe ShortText
+  , wiktionary_lang_code :: Maybe ShortText
+  , wiktionary_lang :: Maybe ShortText
+  , wiktionary_pos :: Maybe ShortText
+  , wiktionary_pos_title :: Maybe ShortText
+  , wiktionary_etymology_texts :: Maybe [ShortText]
+  , wiktionary_senses :: Maybe [Sense]
+  , wiktionary_forms :: Maybe [Form]
+  , wiktionary_sounds :: Maybe [Sound]
+  , wiktionary_translations :: Maybe JSON.Value
+  , wiktionary_synonyms :: Maybe [Synonym]
+  , wiktionary_derived :: Maybe JSON.Value
+  , wiktionary_related :: Maybe JSON.Value
+  , wiktionary_anagrams :: Maybe [Anagram]
+  , wiktionary_categories :: Maybe [ShortText]
+  , wiktionary_tags :: Maybe [ShortText]
+  , wiktionary_raw_tags :: Maybe JSON.Value
+  , wiktionary_meronyms :: Maybe JSON.Value
+  , wiktionary_hyponyms :: Maybe JSON.Value
+  , wiktionary_hypernyms :: Maybe JSON.Value
+  , wiktionary_notes :: Maybe JSON.Value
+  , wiktionary_proverbs :: Maybe JSON.Value
+  , wiktionary_paronyms :: Maybe JSON.Value
+  , wiktionary_antonyms :: Maybe JSON.Value
+  , wiktionary_abbreviation :: Maybe [Abbreviation]
+  , wiktionary_holonyms :: Maybe JSON.Value
+  , wiktionary_etymology_examples :: Maybe JSON.Value
+  , wiktionary_title :: Maybe ShortText
+  , wiktionary_redirect :: Maybe ShortText
+  , wiktionary_troponyms :: Maybe JSON.Value
+  -- ^ Yes, the word can be missing,
+  -- eg. when `wiktionary_pos` is `"hard-redirect"`.
+  }
+  deriving (Eq, Show, Generic)
+
+$(deriveJSON JSON.options ''Wiktionary)
+
+instance SQL.ToRow Wiktionary where
+  toRow Wiktionary{..} =
+    [ SQL.toField wiktionary_id
+    , SQL.toField wiktionary_word
+    , SQL.toField wiktionary_lang_code
+    , SQL.toField wiktionary_lang
+    , SQL.toField wiktionary_pos
+    , SQL.toField wiktionary_pos_title
+    , SQL.toField wiktionary_etymology_texts
+    , SQL.toField wiktionary_senses
+    , SQL.toField wiktionary_forms
+    , SQL.toField wiktionary_sounds
+    , SQL.toField wiktionary_translations
+    , SQL.toField wiktionary_synonyms
+    , SQL.toField wiktionary_derived
+    , SQL.toField wiktionary_related
+    , SQL.toField wiktionary_anagrams
+    , SQL.toField wiktionary_categories
+    , SQL.toField wiktionary_tags
+    , SQL.toField wiktionary_raw_tags
+    , SQL.toField wiktionary_meronyms
+    , SQL.toField wiktionary_hyponyms
+    , SQL.toField wiktionary_hypernyms
+    , SQL.toField wiktionary_notes
+    , SQL.toField wiktionary_proverbs
+    , SQL.toField wiktionary_paronyms
+    , SQL.toField wiktionary_antonyms
+    , SQL.toField wiktionary_abbreviation
+    , SQL.toField wiktionary_holonyms
+    , SQL.toField wiktionary_etymology_examples
+    , SQL.toField wiktionary_title
+    , SQL.toField wiktionary_redirect
+    , SQL.toField wiktionary_troponyms
+    ]
+instance SQL.FromRow Wiktionary where
+  fromRow =
+    Wiktionary
+      <$> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+      <*> SQL.fromFieldWithErrorContext
+type LangCode = ShortText
+
+ngramsOfLength :: Int -> Text -> [Text]
+ngramsOfLength n txt | Text.length txt < n = []
+ngramsOfLength n txt =
+  [ go q t
+  | (start, t) <- txt & Text.tails & List.take (n) & List.zip [0 :: Int ..]
+  , let q = quot (len - start) n
+  ]
+    & mconcat
+  where
+    len = Text.length txt
+    go q t = case Text.splitAt n t of
+      (a, b)
+        | q <= 0 -> []
+        | otherwise -> a : go (q - 1) b
+
+ngramsWithinLengths :: Int -> Int -> Text -> [Text]
+ngramsWithinLengths low high t =
+  [ ngramsOfLength n t
+  | n <- [low .. high]
+  ]
+    & mconcat
diff --git a/src/Worksheets/Writing/Latin.hs b/src/Worksheets/Writing/Latin.hs
deleted file mode 100644 (file)
index fd3b67c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-module Worksheets.Writing.Latin where
-
-import Data.ByteString.Builder (Builder)
-import Data.Text qualified as Text
-import Data.Text.IO.Utf8 qualified as Text
-import Paths_worksheets qualified as Self
-import System.FilePath.Posix qualified as File
-import Text.Blaze
-import Text.Blaze.Html5 qualified as H
-import Text.Blaze.Html5.Attributes qualified as HA
-import Text.Blaze.Renderer.Utf8 qualified as Blaze
-import Prelude
-
--- import Debug.Pretty.Simple (pTraceShowM)
-
-worksheet :: File.FilePath -> IO Builder
-worksheet inputFilePath = do
-  inputText <- Text.readFile inputFilePath
-  let inputLines = Text.lines inputText
-  -- FIXME: this absolute path is not reproducible out of my system
-  cssPath <- Self.getDataFileName "worksheet.css" <&> File.normalise
-  return $ Blaze.renderMarkupBuilder do
-    H.docTypeHtml do
-      H.head do
-        H.title $ fromString $ File.takeBaseName inputFilePath
-        H.link
-          ! HA.rel "stylesheet"
-          ! HA.type_ "text/css"
-          ! HA.href (toValue cssPath)
-      H.body do
-        "\n"
-        H.div ! HA.class_ "worksheet" $ do
-          forM_ inputLines \inputLine -> do
-            H.div ! HA.class_ "row" $ do
-              forM_ (Text.unpack inputLine) \inputChar -> do
-                let cellSpace
-                      | inputChar == ' ' = " cell-space"
-                      | otherwise = ""
-                H.div ! HA.class_ ("cell" <> cellSpace) $ do
-                  fromString [inputChar]
-            "\n"
-            H.div ! HA.class_ "row" $ do
-              forM_ (Text.unpack inputLine) \inputChar -> do
-                let cellSpace
-                      | inputChar == ' ' = " cell-space"
-                      | otherwise = ""
-                H.div ! HA.class_ ("cell" <> cellSpace) $ do
-                  fromString " "
-            "\n"
diff --git a/style/worksheet.css b/style/worksheet.css
deleted file mode 100644 (file)
index f5bf762..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-body {
-  line-height:1.4;
-  margin:2ex auto;
-  //width:650px;
-}
-.worksheet {
-  white-space:preserve-spaces;
-  width:100%;
-  margin-left: 1ex;
-  margin-right: 1ex;
-  margin-bottom: 1ex;
-  margin-top: 1ex;
-  font-family: sans;
-  font-variant: small-caps;
-  display: grid;
-  gap: 0px;
-  //justify-items: center;
-  justify-self: center;
-  font-size: 14pt;
-  //background-color:grey;
-}
-.row {
-  display: grid;
-  grid-template-columns: repeat(1000, 1.5em);
-}
-.worksheet > div:nth-child(2n) {
-  margin-bottom:.5em;
-}
-.cell {
-  display: grid;
-  place-content: center;
-  position: relative;
-  box-shadow:0 0 0 1px #AAA;
-  background-color:white;
-  min-height:1.5em;
-  padding-left:0;
-  padding-right:0;
-  margin-left:0;
-  margin-right:0;
-}
-.cell-space {
-  box-shadow:0 0 0 0 red !important;
-  border-left:1px solid #AAA;
-}
diff --git a/tests/Language/Chinese/dictToWeights/dictOrder/all.golden b/tests/Language/Chinese/dictToWeights/dictOrder/all.golden
new file mode 100644 (file)
index 0000000..e103882
--- /dev/null
@@ -0,0 +1 @@
+weight key
diff --git a/tests/Language/Chinese/dictToWeights/dictOrder/take_10.golden b/tests/Language/Chinese/dictToWeights/dictOrder/take_10.golden
new file mode 100644 (file)
index 0000000..e103882
--- /dev/null
@@ -0,0 +1 @@
+weight key
diff --git a/tests/Language/Chinese/dictToWeights/size.golden b/tests/Language/Chinese/dictToWeights/size.golden
new file mode 100644 (file)
index 0000000..c227083
--- /dev/null
@@ -0,0 +1 @@
+0
\ No newline at end of file
diff --git a/tests/Language/Chinese/dictToWeights/take_10.golden b/tests/Language/Chinese/dictToWeights/take_10.golden
new file mode 100644 (file)
index 0000000..825e091
--- /dev/null
@@ -0,0 +1 @@
+fromList []
\ No newline at end of file
diff --git a/tests/Language/Chinese/keyLengthToSumOfEntries.golden b/tests/Language/Chinese/keyLengthToSumOfEntries.golden
new file mode 100644 (file)
index 0000000..825e091
--- /dev/null
@@ -0,0 +1 @@
+fromList []
\ No newline at end of file
diff --git a/tests/Language/Chinese/keyLengths.golden b/tests/Language/Chinese/keyLengths.golden
new file mode 100644 (file)
index 0000000..bf0c02d
--- /dev/null
@@ -0,0 +1,20 @@
+fromList
+  [ 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 18
+  , 21
+  ]
\ No newline at end of file
diff --git a/tests/Language/Chinese/keysWithoutDecomp.golden b/tests/Language/Chinese/keysWithoutDecomp.golden
new file mode 100644 (file)
index 0000000..825e091
--- /dev/null
@@ -0,0 +1 @@
+fromList []
\ No newline at end of file
diff --git a/tests/Language/Chinese/keysWithoutFreq.golden b/tests/Language/Chinese/keysWithoutFreq.golden
new file mode 100644 (file)
index 0000000..c227083
--- /dev/null
@@ -0,0 +1 @@
+0
\ No newline at end of file
diff --git a/tests/Language/Chinese/keysWithoutStrokes.golden b/tests/Language/Chinese/keysWithoutStrokes.golden
new file mode 100644 (file)
index 0000000..825e091
--- /dev/null
@@ -0,0 +1 @@
+fromList []
\ No newline at end of file
diff --git a/tests/Language/Chinese/size.golden b/tests/Language/Chinese/size.golden
new file mode 100644 (file)
index 0000000..c227083
--- /dev/null
@@ -0,0 +1 @@
+0
\ No newline at end of file
diff --git a/tests/Language/ChineseSpec.hs b/tests/Language/ChineseSpec.hs
new file mode 100644 (file)
index 0000000..e57dbd3
--- /dev/null
@@ -0,0 +1,119 @@
+module Language.ChineseSpec where
+
+import Control.Arrow ((>>>))
+import Control.Monad (Monad (..))
+import Data.Bool
+import Data.ByteString.Builder qualified as Builder
+import Data.Eq (Eq (..))
+import Data.Foldable (null)
+import Data.Function (($), (&), (.))
+import Data.Functor ((<&>))
+import Data.GenValidity.Map ()
+import Data.GenValidity.Sequence ()
+import Data.GenValidity.Set ()
+import Data.GenValidity.Text ()
+import Data.List qualified as List
+import Data.Map.Strict qualified as Map
+import Data.Maybe (isNothing)
+import Data.Monoid (Monoid (..))
+import Data.Ord (Down (..))
+import Data.Set (Set)
+import Data.Set qualified as Set
+import Data.String (String)
+import Data.Text qualified as Text
+import Data.Text.Short qualified as ShortText
+import Data.Validity.Map ()
+import Data.Validity.Set ()
+import Data.Validity.Text ()
+import GHC.Stack (HasCallStack)
+import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
+import Test.Syd
+import Text.Show (Show (..))
+
+import Language.Chinese (ChineseDict (..), ChineseDictEntries (..), unChineseDict)
+import Language.Chinese qualified as Chinese
+import Worksheets.Utils.Prelude
+
+getGoldenPath title = do
+  descrPath <- getTestDescriptionPath
+  let dirPath =
+        List.reverse descrPath
+          <&> Text.unpack
+            . Text.replace
+              (Text.pack ".")
+              (Text.singleton pathSeparator)
+          & joinPath
+  return $ "tests" </> dirPath </> title <.> "golden"
+
+goldenShowWithOuter :: Show a => String -> (outer -> a) -> TestDefM (outer : outers) () ()
+goldenShowWithOuter title run = do
+  outPath <- getGoldenPath title
+  itWithOuter title \outer -> do
+    goldenPrettyShowInstance outPath $
+      run outer
+
+goldenBuilderWithOuter :: String -> (outer -> Builder.Builder) -> TestDefM (outer : outers) () ()
+goldenBuilderWithOuter title run = do
+  outPath <- getGoldenPath title
+  itWithOuter title \outer -> do
+    pureGoldenByteStringBuilderFile outPath $
+      run outer
+
+spec :: HasCallStack => Spec
+spec =
+  aroundAll (\k -> Chinese.readChineseLexicalDatabase >>= k) do
+    goldenShowWithOuter "size" $ unChineseDict >>> Map.size
+    goldenShowWithOuter "keyLengthToSumOfEntries" $ Chinese.keyLengthToSumOfEntries
+    goldenShowWithOuter "keysWithoutStrokes" keysWithoutStrokes
+    goldenShowWithOuter "keysWithoutDecomp" keysWithoutDecomp
+    goldenShowWithOuter "keysWithoutFreq" $ keysWithoutFreq >>> Set.size
+    describe "dictToWeights" do
+      aroundAllWith (\k dict -> k (Chinese.dictToWeights dict)) do
+        goldenShowWithOuter "size" $ Chinese.weightsMap >>> Map.size
+        goldenShowWithOuter "take_10" $ Chinese.weightsMap >>> Map.take 10
+        describe "dictOrder" do
+          aroundAllWith (\k weights -> k ((Chinese.dictOrder weights))) do
+            goldenBuilderWithOuter "all" chineseOrderTsv
+            goldenBuilderWithOuter "take_10" $ Chinese.unChineseOrder >>> Map.take 10 >>> Chinese.ChineseOrder >>> chineseOrderTsv
+
+chineseOrderTsv :: Chinese.ChineseOrder -> Builder.Builder
+chineseOrderTsv (Chinese.ChineseOrder o) =
+  ["weight\tkey\n"]
+    <> [ [ weight & show & Builder.stringUtf8
+         , "\t"
+         , key & ShortText.unpack & Builder.stringUtf8
+         , "\n"
+         ]
+        & mconcat
+       | (Down weight, keyToBC) <- o & Map.toList
+       , key <- keyToBC & Chinese.weightsMap & Map.keys
+       ]
+    & mconcat
+
+keysWithoutStrokes :: ChineseDict -> Set Chinese.DictKey
+keysWithoutStrokes (ChineseDict d) =
+  d
+    & Map.filterWithKey
+      ( \key ChineseDictEntries{chineseStrokes} ->
+          ShortText.length key == 1
+            && isNothing chineseStrokes
+      )
+    & Map.keysSet
+keysWithoutDecomp :: ChineseDict -> Set Chinese.DictKey
+keysWithoutDecomp (ChineseDict d) =
+  d
+    & Map.filterWithKey
+      ( \key ChineseDictEntries{chineseComponents} ->
+          ShortText.length key == 1
+            && null chineseComponents
+      )
+    & Map.keysSet
+keysWithoutFreq :: ChineseDict -> Set Chinese.DictKey
+keysWithoutFreq (ChineseDict d) =
+  d
+    & Map.filterWithKey
+      ( \key ChineseDictEntries{chineseFrequency} ->
+          ShortText.length key == 1
+            && isNothing chineseFrequency
+      )
+    & Map.keysSet
diff --git a/tests/Language/EnglishSpec.hs b/tests/Language/EnglishSpec.hs
new file mode 100644 (file)
index 0000000..1740bf2
--- /dev/null
@@ -0,0 +1,436 @@
+{-# LANGUAGE OverloadedLists #-}
+
+module Language.EnglishSpec where
+
+import Data.ByteString.Builder qualified as ByteString.Builder
+import Data.GenValidity.Map ()
+import Data.GenValidity.Sequence ()
+import Data.GenValidity.Set ()
+import Data.GenValidity.Text ()
+import Data.List qualified as List
+import Data.Map.Strict qualified as Map
+import Data.Set qualified as Set
+import Data.Text qualified as Text
+import Data.Text.Encoding qualified as Text
+import Data.Text.Lazy.Encoding qualified as Text.Lazy
+import Data.Text.Short qualified as ShortText
+import Data.Validity.Map ()
+import Data.Validity.Set ()
+import Data.Validity.Text ()
+import Language
+import Language.English hiding (pronunciationRules)
+import Language.English qualified as English
+import Language.Pronunciation (ExampleLiteral (..), Lexeme (..), Rule (..), RuleLexemes, after, before, begining, ending, meaning, occurence, rule, silent, word)
+import Language.Pronunciation qualified as Pron
+import Paths_worksheets qualified as Self
+import System.Directory qualified as IO
+import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
+import System.FilePath.Posix qualified as File
+import System.IO qualified as IO
+import Test.Syd
+import Text.Blaze.Html5.Attributes qualified as HA
+import Utils.Pronunciation qualified as Pron
+import Utils.Tests
+import Wiktionary qualified
+import Worksheets.Utils.HTML (Html, className, classes, cm, styles, (!))
+import Worksheets.Utils.HTML qualified as HTML
+import Worksheets.Utils.IPA qualified as IPA
+import Worksheets.Utils.Paper qualified as Paper
+import Worksheets.Utils.Prelude
+import Worksheets.Utils.SQL qualified as SQL
+import Prelude (error, even, mod)
+
+spec :: HasCallStack => Spec
+spec = do
+  -- Pron.lexerRender $ English.pronunciationDict
+  describe "pronunciation" do
+    describe "parser" do
+      Pron.pronunciationParserTest pronunciationRules sentences
+
+{-
+mangleSupraSegmentalFeatures :: [IPA.Syllable []] -> [[IPA.Segment]]
+mangleSupraSegmentalFeatures = \case
+  [] -> []
+  IPA.Syllable syl : ts -> syl : mangleSupraSegmentalFeatures ts
+  IPA.WithSuprasegmentalFeature IPA.Linking syl : ts ->
+    case mangleSupraSegmentalFeatures ts of
+      [] -> [dropSupraSegmentalFeatures syl]
+      x : xs -> (dropSupraSegmentalFeatures syl <> x) : xs
+  IPA.WithSuprasegmentalFeature _feat syl : xs ->
+    mangleSupraSegmentalFeatures (syl : xs)
+-}
+
+-- cardsHtml "syllabes" $ English.syllablesTable & English.syllablesTableToHTML
+
+sentences :: Map Pron.InputLexemes Pron.Pronunciation
+sentences =
+  [ pronunciationRules
+      & Pron.examples
+  ]
+    & list
+    & Map.unionsWith (curry errorShow)
+
+--  -- , [LexemeVowel] <> ending "sy" := Rule{rulePron = [[LexemeVowel] <> ending "sy" := "zi"], ruleExamples = []}
+pronunciationRules :: Pron.Table
+pronunciationRules =
+  [ "chrysanthemum" := Rule{rulePron = ["chry" := "kɹɪ", "san" := "ˈsæn", "the" := "θə", "mum" := "məm"], ruleExamples = ["chrysanthemum" := "kɹɪ.ˈsæn.θə.məm"]}
+  , "Andúril" := Rule{rulePron = ["An" := "æn", "dú" := "dy", "ril" := "ɹil"], ruleExamples = ["Andúril" := "æn.dy.ɹil"]}
+  , "Angmar" := Rule{rulePron = ["Ang" := "ˈæng", "mar" := "maɹ"], ruleExamples = ["Angmar" := "ˈæng.maɹ"]}
+  , "Aragorn" := Rule{rulePron = ["A" := "ˈa", "ra" := "ra", "gorn" := "ɡɔrn"], ruleExamples = ["Aragorn" := "ˈa.ra.ɡɔrn"]}
+  , "Arwen" := Rule{rulePron = ["Ar" := "ɑɹ", "wen" := "wɛn"], ruleExamples = ["Arwen" := "ɑɹ.wɛn"]}
+  , "Barad-dûr" := Rule{rulePron = ["Ba" := "ba", "rad" := "ɹad", "-" := [], "dûr" := "dyɹ"], ruleExamples = ["Barad-dûr" := "ba.ɹad.dyɹ"]}
+  , "Boromir" := Rule{rulePron = ["Bo" := "bo", "ro" := "ɹəʊ", "mir" := "miɹ"], ruleExamples = ["Boromir" := "bo.ɹəʊ.miɹ"]}
+  , "Elendil" := Rule{rulePron = ["E" := "ɛ", "len" := "ˈlen", "dil" := "dil"], ruleExamples = ["Elendil" := "ɛ.ˈlen.dil"]}
+  , "Escherichia" := Rule{rulePron = ["E" := "ˌɛ", "sche" := "ʃə", "ri" := "ˈɹɪ", "chia" := "kiə"], ruleExamples = ["Escherichia" := "ˌɛ.ʃə.ˈɹɪ.kiə"]}
+  , "Frodo" := Rule{rulePron = ["Fro" := "ˈfɹɒd", "do" := "dəʊ"], ruleExamples = ["Frodo" := "ˈfɹɒd.dəʊ"]}
+  , "Galadriel" := Rule{rulePron = ["Ga" := "ɡa", "la" := "ˈla", "dri" := "dri", "el" := "ɛl"], ruleExamples = ["Galadriel" := "ɡa.ˈla.dri.ɛl"]}
+  , "Gandalf" := Rule{rulePron = ["gand" := "ˈgænd", "alf" := "ɑlf"], ruleExamples = ["Gandalf" := "ˈgænd.ɑlf"]}
+  , "Gimli" := Rule{rulePron = ["Gim" := "ˈgɪm", "li" := "liː"], ruleExamples = ["Gimli" := "ˈgɪm.liː"]}
+  , "Gollum" := Rule{rulePron = ["Go" := "ˈgɑ", "llum" := "ləm"], ruleExamples = ["Gollum" := "ˈgɑ.ləm"]}
+  , "Gondor" := Rule{rulePron = ["gon" := "ɡɒn", "dor" := "dɔɹ"], ruleExamples = ["Gondor" := "ɡɒn.dɔɹ"]}
+  , "Gwaihir" := Rule{rulePron = ["gwai" := "gwaɪ", "hir" := "hɪɹ"], ruleExamples = ["Gwaihir" := "gwaɪ.hɪɹ"]}
+  , "Isildur" := Rule{rulePron = ["I" := "i", "sil" := "ˈsil", "dur" := "duɹ"], ruleExamples = ["Isildur" := "i.ˈsil.duɹ"]}
+  , "Khazad-dûm" := Rule{rulePron = ["Kha" := "kə", "zad" := "ˈzɑd", "-" := [], "dûm" := "dum"], ruleExamples = ["Khazad-dûm" := "kə.ˈzɑd.dum"]}
+  , "Legolas" := Rule{rulePron = ["Le" := "ˈlɛ", "go" := "ɡɔ", "las" := "las"], ruleExamples = ["Legolas" := "ˈlɛ.ɡɔ.las"]}
+  , "Lindon" := Rule{rulePron = ["Lin" := "ˈlɪn", "don" := "dɒn"], ruleExamples = ["Lindon" := "ˈlɪn.dɒn"]}
+  , "Mordor" := Rule{rulePron = ["Mor" := "ˈmɔɹ", "dor" := "dɔɹ"], ruleExamples = ["Mordor" := "ˈmɔɹ.dɔɹ"]}
+  , "Moria" := Rule{rulePron = ["Mo" := "mɔ", "ria" := "ʁja"], ruleExamples = ["Moria" := "mɔ.ʁja"]}
+  , "Narsil" := Rule{rulePron = ["Nar" := "naɹ", "sil" := "sil"], ruleExamples = ["Narsil" := "naɹ.sil"]}
+  , "Pippin" := Rule{rulePron = ["pi" := "ˈpɪ", "ppin" := "pɪn"], ruleExamples = ["Pippin" := "ˈpɪ.pɪn"]}
+  , "Sam" := Rule{rulePron = ["Sam" := "ˈsæm"], ruleExamples = ["Sam" := "ˈsæm"]}
+  , "Saruman" := Rule{rulePron = ["sa" := "ˈsɑ", "ru" := "ru", "man" := "mɑn"], ruleExamples = ["Saruman" := "ˈsɑ.ru.mɑn"]}
+  , "Sauron" := Rule{rulePron = ["Sau" := "ˈsaʊ", "ron" := "ɹɒn"], ruleExamples = ["Sauron" := "ˈsaʊ.ɹɒn"]}
+  , "Shelob" := Rule{rulePron = ["she" := "ʃiː", "lob" := "lɒb"], ruleExamples = ["Shelob" := "ʃiː.lɒb"]}
+  , "Smaug" := Rule{rulePron = ["Smaug" := "smaʊɡ"], ruleExamples = ["Smaug" := "smaʊɡ"]}
+  , "Thorin" := Rule{rulePron = ["Tho" := "θɔː", "rin" := "ɹɪn"], ruleExamples = ["Thorin" := "θɔː.ɹɪn"]}
+  , "Thranduil" := Rule{rulePron = ["Thran" := "θɹæn", "duil" := "dyil"], ruleExamples = ["Thranduil" := "θɹæn.dyil"]}
+  , "Uruk-hai" := Rule{rulePron = ["U" := "u", "ruk" := "ɹuk", "-" := [], "hai" := "aj"], ruleExamples = ["Uruk-hai" := "u.ɹuk.aj"]}
+  , "Valinor" := Rule{rulePron = ["Va" := "va", "li" := "lɪ", "nor" := "nɔɹ"], ruleExamples = ["Valinor" := "va.lɪ.nɔɹ"]}
+  , "above" := Rule{rulePron = ["a" := "ə", "bove" := "ˈbʌv"], ruleExamples = ["above" := "ə.ˈbʌv"]}
+  , "adventure" := Rule{rulePron = ["ad" := "əd", "ven" := "ˈvɛn", "ture" := "t͡ʃə"], ruleExamples = ["adventure" := "əd.ˈvɛn.t͡ʃə"]}
+  , "against" := Rule{rulePron = ["a" := "ə", "gainst" := "ˈɡɛnst"], ruleExamples = ["against" := "ə.ˈɡɛnst"]}
+  , "alligator" := Rule{rulePron = ["all" := "ˈæl", "i" := "ɪ", "ga" := "geɪ", "tor" := "tə"], ruleExamples = ["alligator" := "ˈæl.ɪ.geɪ.tə"]}
+  , "an" := Rule{rulePron = ["an" := "ˈæn"], ruleExamples = ["an" := "ˈæn"]}
+  , "anchor" := Rule{rulePron = ["an" := "ˈæŋ", "kor" := "kə"], ruleExamples = ["anchor" := "ˈæŋ.kə"]}
+  , "ant" := Rule{rulePron = ["ant" := "ænt"], ruleExamples = ["ant" := "ænt"]}
+  , "ants" := Rule{rulePron = ["ants" := "ænts"], ruleExamples = ["ants" := "ænts"]}
+  , "are" := Rule{rulePron = ["are" := "ɑː"], ruleExamples = ["are" := "ɑː"]}
+  , "around" := Rule{rulePron = ["a" := "ə", "round" := "ˈɹaʊnd"], ruleExamples = ["around" := "ə.ˈɹaʊnd"]}
+  , "assault" := Rule{rulePron = ["a" := "ə", "ssault" := "ˈsɒlt"], ruleExamples = ["assault" := "ə.ˈsɒlt"]}
+  , "assaults" := Rule{rulePron = ["a" := "ə", "ssaults" := "ˈsɒlts"], ruleExamples = ["assaults" := "ə.ˈsɒlts"]}
+  , "at" := Rule{rulePron = ["at" := "æt"], ruleExamples = ["at" := "æt"]}
+  , "axe" := Rule{rulePron = ["axe" := "æks"], ruleExamples = ["axe" := "æks"]}
+  , "back" := Rule{rulePron = ["back" := "bæk"], ruleExamples = ["back" := "bæk"]}
+  , "baggins" := Rule{rulePron = ["ba" := "ˈbæ", "ggins" := "gɪnz"], ruleExamples = ["baggins" := "ˈbæ.gɪnz"]}
+  , "balrog" := Rule{rulePron = ["bal" := "ˈbal", "rog" := "ɹɑg"], ruleExamples = ["balrog" := "ˈbal.ɹɑg"]}
+  , "bat" := Rule{rulePron = ["bat" := "bæt"], ruleExamples = ["bat" := "bæt"]}
+  , "be" := Rule{rulePron = ["be" := "biː"], ruleExamples = ["be" := "biː"]}
+  , "bee" := Rule{rulePron = ["bee" := "ˈbiː"], ruleExamples = ["beeing" := "ˈbiː.ɪŋ"]}
+  , "before" := Rule{rulePron = ["be" := "bɪ", "fore" := "ˈfɔː"], ruleExamples = ["before" := "bɪ.ˈfɔː"]}
+  , "big" := Rule{rulePron = ["big" := "bɪg"], ruleExamples = ["big" := "bɪg"]}
+  , "bilbo" := Rule{rulePron = ["bil" := "ˈbɪl", "bo" := "bəʊ"], ruleExamples = ["bilbo" := "ˈbɪl.bəʊ"]}
+  , "bird" := Rule{rulePron = ["bird" := "bəːd"], ruleExamples = ["blackbird" := "blak.bəːd"]}
+  , "black" := Rule{rulePron = ["black" := "blak"], ruleExamples = ["blackbird" := "blak.bəːd"]}
+  , "blade" := Rule{rulePron = ["blade" := "bleɪd"], ruleExamples = ["blade" := "bleɪd"]}
+  , "bladed" := Rule{rulePron = ["bla" := "ˈbleɪ", "ded" := "dɪd"], ruleExamples = ["bladed" := "ˈbleɪ.dɪd"]}
+  , "blocks" := Rule{rulePron = ["blocks" := "blɒks"], ruleExamples = ["blocks" := "blɒks"]}
+  , "board" := Rule{rulePron = ["board" := "bɔːd"], ruleExamples = ["board" := "bɔːd"]}
+  , "boat" := Rule{rulePron = ["boat" := "bəʊt"], ruleExamples = ["boat" := "bəʊt"]}
+  , "body" := Rule{rulePron = ["bod" := "ˈbɒd", "y" := "i"], ruleExamples = ["body" := "ˈbɒd.i"]}
+  , "both" := Rule{rulePron = ["both" := "bəʊθ"], ruleExamples = ["both" := "bəʊθ"]}
+  , "breath" := Rule{rulePron = ["breath" := "ˈbɹiːð"], ruleExamples = ["breath" := "ˈbɹiːð"]}
+  , "bridge" := Rule{rulePron = ["bridge" := "bɹɪd͡ʒ"], ruleExamples = ["bridge" := "bɹɪd͡ʒ"]}
+  , "bright" := Rule{rulePron = ["bright" := "bɹaɪt"], ruleExamples = ["bright" := "bɹaɪt"]}
+  , "buoy" := Rule{rulePron = ["buoy" := "ˈbɔɪ"], ruleExamples = ["buoy" := "ˈbɔɪ"]}
+  , "busy" := Rule{rulePron = ["bu" := "ˈbɪ", "sy" := "zi"], ruleExamples = ["busy" := "ˈbɪ.zi"]}
+  , "buzzard" := Rule{rulePron = ["buzz" := "ˈbʌz", "ard" := "əɹd"], ruleExamples = ["buzzard" := "ˈbʌz.əɹd"]}
+  , "by" := Rule{rulePron = ["by" := "baɪ"], ruleExamples = ["by" := "baɪ"]}
+  , "calla" := Rule{rulePron = ["ca" := "kæ", "lla" := "lə"], ruleExamples = ["calla" := "kæ.lə"]}
+  , "can" := Rule{rulePron = ["can" := "ˈkæn"], ruleExamples = ["can" := "ˈkæn"]}
+  , "canal" := Rule{rulePron = ["ca" := "kə", "nal" := "ˈnæl"], ruleExamples = ["canal" := "kə.ˈnæl"]}
+  , "canoe" := Rule{rulePron = ["ca" := "kə", "noe" := "ˈnu"], ruleExamples = ["canoeing" := "kə.ˈnu.ɪŋ"]}
+  , "cap" := Rule{rulePron = ["cap" := "kæp"], ruleExamples = ["cap" := "kæp"]}
+  , "car" := Rule{rulePron = ["car" := "kɑː"], ruleExamples = ["car" := "kɑː"]}
+  , "carnation" := Rule{rulePron = ["car" := "kɑː", "na" := "ˈneɪ", "tion" := "ʃən"], ruleExamples = ["carnation" := "kɑː.ˈneɪ.ʃən"]}
+  , "cast" := Rule{rulePron = ["cast" := "kɑːst"], ruleExamples = ["cast" := "kɑːst"]}
+  , "castle" := Rule{rulePron = ["castle" := "kɑːsl̩"], ruleExamples = ["castle" := "kɑːsl̩"]}
+  , "casts" := Rule{rulePron = ["casts" := "kɑːsts"], ruleExamples = ["casts" := "kɑːsts"]}
+  , "cat" := Rule{rulePron = ["cat" := "kæt"], ruleExamples = ["cat" := "kæt"]}
+  , "close" := Rule{rulePron = ["close" := "kləʊz"], ruleExamples = ["close" := "kləʊz"]}
+  , "coli" := Rule{rulePron = ["co" := "ˈkoʊ", "li" := "laɪ"], ruleExamples = ["Escherichia coli" := "ˌɛ.ʃə.ˈɹɪ.kiə.ˈkoʊ.laɪ"]}
+  , "command" := Rule{rulePron = ["co" := "kə", "mmand" := "ˈmɑːnd"], ruleExamples = ["command" := "kə.ˈmɑːnd"]}
+  , "control" := Rule{rulePron = ["con" := "kən", "trol" := "ˈtɹəʊl"], ruleExamples = ["control" := "kən.ˈtɹəʊl"]}
+  , "crane" := Rule{rulePron = ["crane" := "kɹeɪn"], ruleExamples = ["crane" := "kɹeɪn"]}
+  , "crow" := Rule{rulePron = ["crow" := "kɹəʊ"], ruleExamples = ["crow" := "kɹəʊ"]}
+  , "crown" := Rule{rulePron = ["crown" := "kɹaʊn"], ruleExamples = ["crown" := "kɹaʊn"]}
+  , "cub" := Rule{rulePron = ["cub" := "kʌb"], ruleExamples = ["cub" := "kʌb"]}
+  , "cut" := Rule{rulePron = ["cut" := "kʌt"], ruleExamples = ["cut" := "kʌt"]}
+  , "daffodil" := Rule{rulePron = ["da" := "ˈdæ", "ffo" := "fə", "dil" := "ˌdɪl"], ruleExamples = ["daffodil" := "ˈdæ.fə.ˌdɪl"]}
+  , "dagger" := Rule{rulePron = ["da" := "ˈdæ", "gger" := "gə"], ruleExamples = ["dagger" := "ˈdæ.gə"]}
+  , "daisy" := Rule{rulePron = ["dai" := "ˈdeɪ", "sy" := "zi"], ruleExamples = ["daisy" := "ˈdeɪ.zi"]}
+  , "dandelion" := Rule{rulePron = ["dan" := "ˈdæn", "de" := "dɪ", "li" := "ˌlaɪ", "on" := "ən"], ruleExamples = ["dandelion" := "ˈdæn.dɪ.ˌlaɪ.ən"]}
+  , "dark" := Rule{rulePron = ["dark" := "dɑːk"], ruleExamples = ["dark" := "dɑːk"]}
+  , "dead" := Rule{rulePron = ["dead" := "dɛd"], ruleExamples = ["dead" := "dɛd"]}
+  , "death" := Rule{rulePron = ["death" := "dɛθ"], ruleExamples = ["death" := "dɛθ"]}
+  , "deceiver" := Rule{rulePron = ["de" := "dɪ", "cei" := "ˈsiː", "ver" := "və"], ruleExamples = ["deceiver" := "dɪ.ˈsiː.və"]}
+  , "dinghy" := Rule{rulePron = ["dingh" := "ˈdɪŋ", "y" := "i"], ruleExamples = ["dinghy" := "ˈdɪŋ.i"]}
+  , "diving" := Rule{rulePron = ["di" := "ˈdaɪ", "ving" := "vɪŋ"], ruleExamples = ["diving" := "ˈdaɪ.vɪŋ"]}
+  , "doom" := Rule{rulePron = ["doom" := "duːm"], ruleExamples = ["doom" := "duːm"]}
+  , "door" := Rule{rulePron = ["door" := "dɔː"], ruleExamples = ["door" := "dɔː"]}
+  , "doors" := Rule{rulePron = ["doors" := "dɔːz"], ruleExamples = ["doors" := "dɔːz"]}
+  , "double" := Rule{rulePron = ["dou" := "ˈdʌ", "ble" := "bl"], ruleExamples = ["double" := "ˈdʌ.bl"]}
+  , "dove" := Rule{rulePron = ["dove" := "dʌv"], ruleExamples = ["dove" := "dʌv"]}
+  , "dragon" := Rule{rulePron = ["dra" := "ˈdɹæ", "gon" := "ɡən"], ruleExamples = ["dragon" := "ˈdɹæ.ɡən"]}
+  , "drive" := Rule{rulePron = ["drive" := "dɹaɪv"], ruleExamples = ["drive" := "dɹaɪv"]}
+  , "drives" := Rule{rulePron = ["drives" := "dɹaɪvs"], ruleExamples = ["drives" := "dɹaɪvs"]}
+  , "dwarf" := Rule{rulePron = ["dwarf" := "dwɔɹf"], ruleExamples = ["dwarf" := "dwɔɹf"]}
+  , "dwarves" := Rule{rulePron = ["dwarves" := "dwɔːvz"], ruleExamples = ["dwarves" := "dwɔːvz"]}
+  , "eagle" := Rule{rulePron = ["ea" := "ˈiː", "gle" := "gɫ̩"], ruleExamples = ["eagle" := "ˈiː.gɫ̩"]}
+  , "earth" := Rule{rulePron = ["earth" := "ɜːθ"], ruleExamples = ["earth" := "ɜːθ"]}
+  , "eight" := Rule{rulePron = ["eight" := "eɪt"], ruleExamples = ["eight" := "eɪt"]}
+  , "elf" := Rule{rulePron = ["elf" := "ɛlf"], ruleExamples = ["elf" := "ɛlf"]}
+  , "elven" := Rule{rulePron = ["el" := "ˈɛl", "ven" := "vn"], ruleExamples = ["elven" := "ˈɛl.vn"]}
+  , "elves" := Rule{rulePron = ["elves" := "elvz"], ruleExamples = ["elves" := "elvz"]}
+  , "en" := Rule{rulePron = ["en" := "ɛn"], ruleExamples = ["golden" := "gəʊld.ɛn"]}
+  , "exhausted" := Rule{rulePron = ["e" := "ɪ", "x" := ["g", "ˈz"], "haus" := "ɔːs", "ted" := "tɪd"], ruleExamples = ["exhausted" := "ɪg.ˈzɔːs.tɪd"]}
+  , "eye" := Rule{rulePron = ["eye" := "aɪ"], ruleExamples = ["eye" := "aɪ"]}
+  , "face" := Rule{rulePron = ["face" := "feɪs"], ruleExamples = ["face" := "feɪs"]}
+  , "faces" := Rule{rulePron = ["fa" := "ˈfeɪ", "ses" := "ɪz"], ruleExamples = ["faces" := "ˈfeɪ.sɪz"]}
+  , "family" := Rule{rulePron = ["fa" := "ˈfæ", "mi" := "mɪ", "ly" := "li"], ruleExamples = ["family" := "ˈfæ.mɪ.li"]}
+  , "fatally" := Rule{rulePron = ["fa" := "ˈfeɪ", "ta" := "tə", "lly" := "li"], ruleExamples = ["fatally" := "ˈfeɪ.tə.li"]}
+  , "fax" := Rule{rulePron = ["fax" := "fæks"], ruleExamples = ["fax" := "fæks"]}
+  , "fellow" := Rule{rulePron = ["fe" := "ˈfɛ", "llow" := "ləʊ"], ruleExamples = ["fellow" := "ˈfɛ.ləʊ"]}
+  , "fight" := Rule{rulePron = ["fight" := "faɪt"], ruleExamples = ["fight" := "faɪt"]}
+  , "fights" := Rule{rulePron = ["fights" := "faɪts"], ruleExamples = ["fights" := "faɪts"]}
+  , "filled" := Rule{rulePron = ["filled" := "fɪld"], ruleExamples = ["filled" := "fɪld"]}
+  , "finger" := Rule{rulePron = ["fin" := "ˈfɪŋ", "ger" := "gə"], ruleExamples = ["finger" := "ˈfɪŋ.gə"]}
+  , "fire" := Rule{rulePron = ["fi" := "ˈfaɪ", "re" := "ə"], ruleExamples = ["fire" := "ˈfaɪ.ə"]}
+  , "flail" := Rule{rulePron = ["flail" := "fleɪl"], ruleExamples = ["flail" := "fleɪl"]}
+  , "flaming" := Rule{rulePron = ["fla" := "ˈfleɪ", "ming" := "mɪŋ"], ruleExamples = ["flaming" := "ˈfleɪ.mɪŋ"]}
+  , "flies" := Rule{rulePron = ["flies" := "flaɪz"], ruleExamples = ["flies" := "flaɪz"]}
+  , "friends" := Rule{rulePron = ["friends" := "fɹɛndz"], ruleExamples = ["friends" := "fɹɛndz"]}
+  , "frighten" := Rule{rulePron = ["frigh" := "ˈfɹaɪ", "ten" := "tən"], ruleExamples = ["frighten" := "ˈfɹaɪ.tən"]}
+  , "frightened" := Rule{rulePron = ["frigh" := "ˈfɹaɪ", "tened" := "tn̩d"], ruleExamples = ["frightened" := "ˈfɹaɪ.tn̩d"]}
+  , "frightens" := Rule{rulePron = ["frigh" := "ˈfɹaɪ", "tens" := "təns"], ruleExamples = ["frightens" := "ˈfɹaɪ.təns"]}
+  , "gangway" := Rule{rulePron = ["gang" := "ˈgæŋ", "way" := "weɪ"], ruleExamples = ["gangway" := "ˈgæŋ.weɪ"]}
+  , "giant" := Rule{rulePron = ["gi" := "ˈd͡ʒaɪ", "ant" := "ənt"], ruleExamples = ["giant" := "ˈd͡ʒaɪ.ənt"]}
+  , "gifts" := Rule{rulePron = ["gifts" := "gɪfts"], ruleExamples = ["gifts" := "gɪfts"]}
+  , "giraffe" := Rule{rulePron = ["gi" := "dʒɪ", "raffe" := "ˈɹɑːf"], ruleExamples = ["giraffe" := "dʒɪ.ˈɹɑːf"]}
+  , "goggles" := Rule{rulePron = ["go" := "ˈgɑ", "ggles" := "gəlz"], ruleExamples = ["goggles" := "ˈgɑ.gəlz"]}
+  , "gold" := Rule{rulePron = ["gold" := "gəʊld"], ruleExamples = ["gold" := "gəʊld"]}
+  , "grab" := Rule{rulePron = ["grab" := "gɹæb"], ruleExamples = ["grab" := "gɹæb"]}
+  , "grabs" := Rule{rulePron = ["grabs" := "gɹæbs"], ruleExamples = ["grabs" := "gɹæbs"]}
+  , "great" := Rule{rulePron = ["great" := "ˈgɹeɪt"], ruleExamples = ["great" := "ˈgɹeɪt"]}
+  , "grey" := Rule{rulePron = ["grey" := "gɹeɪ"], ruleExamples = ["grey" := "gɹeɪ"]}
+  , "hand" := Rule{rulePron = ["hand" := "hænd"], ruleExamples = ["hand" := "hænd"]}
+  , "hands" := Rule{rulePron = ["hands" := "hænds"], ruleExamples = ["hands" := "hænds"]}
+  , "has" := Rule{rulePron = ["has" := "hæz"], ruleExamples = ["has" := "hæz"]}
+  , "head" := Rule{rulePron = ["head" := "ˈhɛd"], ruleExamples = ["head" := "ˈhɛd"]}
+  , "her" := Rule{rulePron = ["her" := "ˈhɜː"], ruleExamples = ["her" := "ˈhɜː"]} -- stressed
+  , "hippopotamus" := Rule{rulePron = ["hippo" := "ˌhɪpə", "pot" := "ˈpɒt", "a" := "ə", "mus" := "məs"], ruleExamples = ["hippopotamus" := "ˌhɪpə.ˈpɒt.ə.məs"]}
+  , "his" := Rule{rulePron = ["his" := "ˈhɪz"], ruleExamples = ["his" := "ˈhɪz"]}
+  , "hobbit" := Rule{rulePron = ["ho" := "ˈhɒ", "bbit" := "bɪt"], ruleExamples = ["hobbit" := "ˈhɒ.bɪt"]}
+  , "hobbits" := Rule{rulePron = ["ho" := "ˈhɒ", "bbits" := "bɪts"], ruleExamples = ["hobbits" := "ˈhɒ.bɪts"]}
+  , "hold" := Rule{rulePron = ["hold" := "həʊld"], ruleExamples = ["hold" := "həʊld"]}
+  , "holds" := Rule{rulePron = ["holds" := "həʊldz"], ruleExamples = ["holds" := "həʊldz"]}
+  , "honey" := Rule{rulePron = ["ho" := "ˈhʌ", "ney" := "ni"], ruleExamples = ["honey" := "ˈhʌ.ni"]}
+  , "hood" := Rule{rulePron = ["hood" := "hʊd"], ruleExamples = ["hood" := "hʊd"]}
+  , "horse" := Rule{rulePron = ["horse" := "hɔːs"], ruleExamples = ["horse" := "hɔːs"]}
+  , "hyacinth" := Rule{rulePron = ["hy" := "ˈhaɪ", "a" := "ə", "cinth" := "sɪnθ"], ruleExamples = ["hyacinth" := "ˈhaɪ.ə.sɪnθ"]}
+  , "index" := Rule{rulePron = ["in" := "ˈɪn", "dex" := "dɛks"], ruleExamples = ["index" := "ˈɪn.dɛks"]}
+  , "inflatable" := Rule{rulePron = ["in" := "ɪn", "fla" := "ˈfleɪ", "ta" := "tə", "ble" := "bəl"], ruleExamples = ["inflatable" := "ɪn.ˈfleɪ.tə.bəl"]}
+  , "iris" := Rule{rulePron = ["i" := "ˈaɪ", "ris" := "ɹɪs"], ruleExamples = ["iris" := "ˈaɪ.ɹɪs"]}
+  , "is" := Rule{rulePron = ["is" := "ɪz"], ruleExamples = ["is" := "ɪz"]}
+  , "jacket" := Rule{rulePron = ["jack" := "ˈd͡ʒæk", "et" := "ɪt"], ruleExamples = ["jacket" := "ˈd͡ʒæk.ɪt"]}
+  , "jasmine" := Rule{rulePron = ["jas" := "d͡ʒæz", "mine" := "ˈmɪn"], ruleExamples = ["jasmine" := "d͡ʒæz.ˈmɪn"]}
+  , "jet" := Rule{rulePron = ["jet" := "d͡ʒɛt"], ruleExamples = ["jet" := "d͡ʒɛt"]}
+  , "jetty" := Rule{rulePron = ["jett" := "d͡ʒɛt", "y" := "i"], ruleExamples = ["jetty" := "d͡ʒɛt.i"]}
+  , "journey" := Rule{rulePron = ["jour" := "ˈd͡ʒɜː", "ney" := "ni"], ruleExamples = ["journey" := "ˈd͡ʒɜː.ni"]}
+  , "kangaroo" := Rule{rulePron = ["kan" := "ˌkæŋ", "ga" := "gə", "roo" := "ˈɹu"], ruleExamples = ["kangaroo" := "ˌkæŋ.gə.ˈɹu"]}
+  , "kid" := Rule{rulePron = ["kid" := "kɪd"], ruleExamples = ["kid" := "kɪd"]}
+  , "king" := Rule{rulePron = ["king" := "kɪŋ"], ruleExamples = ["king" := "kɪŋ"]}
+  , "kneel" := Rule{rulePron = ["kneel" := "niːl"], ruleExamples = ["kneel" := "niːl"]}
+  , "kneels" := Rule{rulePron = ["kneels" := "niːlz"], ruleExamples = ["kneels" := "niːlz"]}
+  , "knight" := Rule{rulePron = ["knight" := "naɪt"], ruleExamples = ["knight" := "naɪt"]}
+  , "life" := Rule{rulePron = ["life" := "laɪf"], ruleExamples = ["life" := "laɪf"]}
+  , "light" := Rule{rulePron = ["light" := "laɪt"], ruleExamples = ["light" := "laɪt"]}
+  , "lilly" := Rule{rulePron = ["lill" := "ˈlɪl", "y" := "i"], ruleExamples = ["lilly" := "ˈlɪl.i"]}
+  , "lily" := Rule{rulePron = ["lil" := "ˈlɪ", "ly" := "li"], ruleExamples = ["lily" := "ˈlɪ.li"]}
+  , "liner" := Rule{rulePron = ["li" := "ˈlaɪ", "ner" := "nə"], ruleExamples = ["liner" := "ˈlaɪ.nə"]}
+  , "lion" := Rule{rulePron = ["lion" := "ˈlaɪən"], ruleExamples = ["lion" := "ˈlaɪən"]}
+  , "lioness" := Rule{rulePron = ["li" := "ˈlaɪ", "o" := "ə", "ness" := "nɪs"], ruleExamples = ["lioness" := "ˈlaɪ.ə.nɪs"]}
+  , "little" := Rule{rulePron = ["li" := "ˈlɪ", "ttle" := "tl"], ruleExamples = ["little" := "ˈlɪ.tl"]}
+  , "long" := Rule{rulePron = ["long" := "lɔːŋ"], ruleExamples = ["long" := "lɔːŋ"]}
+  , "look" := Rule{rulePron = ["look" := "ˈlʊk"], ruleExamples = ["look" := "ˈlʊk"]}
+  , "looks" := Rule{rulePron = ["looks" := "ˈlʊks"], ruleExamples = ["looks" := "ˈlʊks"]}
+  , "lord" := Rule{rulePron = ["lord" := "lɔːd"], ruleExamples = ["lord" := "lɔːd"]}
+  , "mace" := Rule{rulePron = ["mace" := "meɪs"], ruleExamples = ["mace" := "meɪs"]}
+  , "magic" := Rule{rulePron = ["ma" := "ˈma", "gic" := "d͡ʒɪk"], ruleExamples = ["magic" := "ˈma.d͡ʒɪk"]}
+  , "master" := Rule{rulePron = ["mas" := "ˈmɑːs", "ter" := "tə"], ruleExamples = ["master" := "ˈmɑːs.tə"]}
+  , "men" := Rule{rulePron = ["men" := "mɛn"], ruleExamples = ["men" := "mɛn"]}
+  , "middle" := Rule{rulePron = ["mi" := "ˈmɪ", "ddle" := "dəl"], ruleExamples = ["middle" := "ˈmɪ.dəl"]}
+  , "mines" := Rule{rulePron = ["mines" := "maɪnz"], ruleExamples = ["mines" := "maɪnz"]}
+  , "misty" := Rule{rulePron = ["mis" := "ˈmɪs", "ty" := "ti"], ruleExamples = ["misty" := "ˈmɪs.ti"]}
+  , "monkey" := Rule{rulePron = ["monk" := "ˈmʌŋk", "ey" := "i"], ruleExamples = ["monkey" := "ˈmʌŋk.i"]}
+  , "mount" := Rule{rulePron = ["mount" := "maʊnt"], ruleExamples = ["mount" := "maʊnt"]}
+  , "mountain" := Rule{rulePron = ["moun" := "maʊn", "tain" := "tɪn"], ruleExamples = ["mountain" := "maʊn.tɪn"]}
+  , "nazgûl" := Rule{rulePron = ["naz" := "ˈnæz", "gûl" := "gul"], ruleExamples = ["nazgûl" := "ˈnæz.gul"]}
+  , "nazgûls" := Rule{rulePron = ["naz" := "ˈnæz", "gûls" := "guls"], ruleExamples = ["nazgûls" := "ˈnæz.guls"]}
+  , "necromancer" := Rule{rulePron = ["ne" := "ˈnɛ", "cro" := "kɹəʊ", "man" := "ˌmæn", "cer" := "sə"], ruleExamples = ["necromancer" := "ˈnɛ.kɹəʊ.ˌmæn.sə"]}
+  , "ness" := Rule{rulePron = ["ness" := "nɛs"], ruleExamples = ["ness" := "nɛs"]}
+  , "next" := Rule{rulePron = ["next" := "nɛkst"], ruleExamples = ["next" := "nɛkst"]}
+  , "north" := Rule{rulePron = ["north" := "nɔːθ"], ruleExamples = ["north" := "nɔːθ"]}
+  , "on" := Rule{rulePron = ["on" := "ɒn"], ruleExamples = ["on" := "ɒn"]}
+  , "open" := Rule{rulePron = ["o" := "ˈəʊ", "pen" := "pn"], ruleExamples = ["open" := "ˈəʊ.pn"]}
+  , "orc" := Rule{rulePron = ["orc" := "ɔːk"], ruleExamples = ["orc" := "ɔːk"]}
+  , "orcs" := Rule{rulePron = ["orcs" := "ɔːks"], ruleExamples = ["orcs" := "ɔːks"]}
+  , "out" := Rule{rulePron = ["out" := "aʊt"], ruleExamples = ["out" := "aʊt"]}
+  , "paddle" := Rule{rulePron = ["pa" := "ˈpæ", "ddle" := "dəl"], ruleExamples = ["paddle" := "ˈpæ.dəl"]}
+  , "palantír" := Rule{rulePron = ["pa" := "pa", "lan" := "ˈlan", "tír" := "ˌtiːr"], ruleExamples = ["palantír" := "pa.ˈlan.ˌtiːr"]}
+  , "phial" := Rule{rulePron = ["phial" := "ˈfaɪəl"], ruleExamples = ["phial" := "ˈfaɪəl"]}
+  , "picture" := Rule{rulePron = ["pic" := "ˈpɪk", "ture" := "ʃə"], ruleExamples = ["picture" := "ˈpɪk.ʃə"]}
+  , "pipe" := Rule{rulePron = ["pipe" := "ˈpaɪp"], ruleExamples = ["pipe" := "ˈpaɪp"]}
+  , "pointy" := Rule{rulePron = ["poin" := "pɔɪn", "ty" := "ti"], ruleExamples = ["pointy" := "pɔɪn.ti"]}
+  , "polo" := Rule{rulePron = ["po" := "ˈpəʊ", "lo" := "ləʊ"], ruleExamples = ["polo" := "ˈpəʊ.ləʊ"]}
+  , "pool" := Rule{rulePron = ["pool" := "pul"], ruleExamples = ["pool" := "pul"]}
+  , "power" := Rule{rulePron = ["power" := "ˈpaʊ̯ə̯"], ruleExamples = ["power" := "ˈpaʊ̯ə̯"]}
+  , "powers" := Rule{rulePron = ["powers" := "ˈpaʊəz"], ruleExamples = ["powers" := "ˈpaʊəz"]}
+  , "queen" := Rule{rulePron = ["queen" := "kwiːn"], ruleExamples = ["queen" := "kwiːn"]}
+  , "raft" := Rule{rulePron = ["raft" := "ɹɑːft"], ruleExamples = ["raft" := "ɹɑːft"]}
+  , "ranger" := Rule{rulePron = ["ran" := "ˈɹeɪn", "ger" := "d͡ʒə"], ruleExamples = ["ranger" := "ˈɹeɪn.d͡ʒə"]}
+  , "real" := Rule{rulePron = ["real" := "ˈɹiːəl"], ruleExamples = ["real" := "ˈɹiːəl"]}
+  , "really" := Rule{rulePron = ["rea" := "ˈɹɪə", "lly" := "li"], ruleExamples = ["really" := "ˈɹɪə.li"]}
+  , "realm" := Rule{rulePron = ["realm" := "ɹɛlm"], ruleExamples = ["realm" := "ɹɛlm"]}
+  , "red" := Rule{rulePron = ["red" := "ɹɛd"], ruleExamples = ["red" := "ɹɛd"]}
+  , "rhinoceros" := Rule{rulePron = ["rhi" := "ɹaɪ", "noc" <> [LexemeVowel] := "ˈnɒs", "e" := "ə", "ros" := "ɹəs"], ruleExamples = ["rhinoceros" := "ɹaɪ.ˈnɒs.ə.ɹəs"]}
+  , "riding" := Rule{rulePron = ["ri" := "ˈɹaɪ", "ding" := "dɪŋ"], ruleExamples = ["riding" := "ˈɹaɪ.dɪŋ"]}
+  , "ring" := Rule{rulePron = ["ring" := "ɹɪŋ"], ruleExamples = ["ring" := "ɹɪŋ"]}
+  , "rings" := Rule{rulePron = ["rings" := "ɹɪŋz"], ruleExamples = ["rings" := "ɹɪŋz"]}
+  , "run" := Rule{rulePron = ["run" := "ɹʌn"], ruleExamples = ["run" := "ɹʌn"]}
+  , "runs" := Rule{rulePron = ["runs" := "ɹʌns"], ruleExamples = ["runs" := "ɹʌns"]}
+  , "sailing" := Rule{rulePron = ["sai" := "ˈseɪ", "ling" := "lɪŋ"], ruleExamples = ["sailing" := "ˈseɪ.lɪŋ"]}
+  , "scare" := Rule{rulePron = ["scare" := "skɛə"], ruleExamples = ["scare" := "skɛə"]}
+  , "scares" := Rule{rulePron = ["scares" := "skɛɹz"], ruleExamples = ["scares" := "skɛɹz"]}
+  , "scary" := Rule{rulePron = ["sca" := "ˈskɛə", "ry" := "ɹi"], ruleExamples = ["scary" := "ˈskɛə.ɹi"]}
+  , "scuba" := Rule{rulePron = ["scu" := "ˈskuː", "ba" := "bə"], ruleExamples = ["scuba" := "ˈskuː.bə"]}
+  , "seek" := Rule{rulePron = ["seek" := "siːk"], ruleExamples = ["seek" := "siːk"]}
+  , "shadow" := Rule{rulePron = ["sha" := "ˈʃæ", "dow" := "dəʊ"], ruleExamples = ["shadow" := "ˈʃæ.dəʊ"]}
+  , "ship" := Rule{rulePron = ["ship" := "ʃɪp"], ruleExamples = ["ship" := "ʃɪp"]}
+  , "shoot" := Rule{rulePron = ["shoot" := "ʃuːt"], ruleExamples = ["shoot" := "ʃuːt"]}
+  , "shoots" := Rule{rulePron = ["shoots" := "ʃuːts"], ruleExamples = ["shoots" := "ʃuːts"]}
+  , "short" := Rule{rulePron = ["short" := "ʃɔːt"], ruleExamples = ["short" := "ʃɔːt"]}
+  , "sick" := Rule{rulePron = ["sick" := "sɪk"], ruleExamples = ["sick" := "sɪk"]}
+  , "sit" := Rule{rulePron = ["sit" := "ˈsɪt"], ruleExamples = ["sit" := "ˈsɪt"]}
+  , "skeleton" := Rule{rulePron = ["ske" := "ˈskɛ", "le" := "lɪ", "ton" := "tn"], ruleExamples = ["skeleton" := "ˈskɛ.lɪ.tn"]}
+  , "ski" := Rule{rulePron = ["ski" := "skiː"], ruleExamples = ["ski" := "skiː"]}
+  , "smoke" := Rule{rulePron = ["smoke" := "sməʊk"], ruleExamples = ["smoke" := "sməʊk"]}
+  , "smokes" := Rule{rulePron = ["smokes" := "sməʊks"], ruleExamples = ["smokes" := "sməʊks"]}
+  , "snorkel" := Rule{rulePron = ["snor" := "ˈsnɔː", "kel" := "kəl"], ruleExamples = ["snorkel" := "ˈsnɔː.kəl"]}
+  , "stab" := Rule{rulePron = ["stab" := "stæb"], ruleExamples = ["stab" := "stæb"]}
+  , "stabs" := Rule{rulePron = ["stabs" := "stæbs"], ruleExamples = ["stabs" := "stæbs"]}
+  , "staff" := Rule{rulePron = ["staff" := "stɑːf"], ruleExamples = ["staff" := "stɑːf"]}
+  , "stand" := Rule{rulePron = ["stand" := "stænd"], ruleExamples = ["stand" := "stænd"]}
+  , "get" := Rule{rulePron = ["get" := "gɛt"], ruleExamples = ["get" := "gɛt"]}
+  , "stealthy" := Rule{rulePron = ["steal" := "ˈstɛl", "thy" := "θɪ"], ruleExamples = ["stealthy" := "ˈstɛl.θɪ"]}
+  , "suit" := Rule{rulePron = ["suit" := "suːt"], ruleExamples = ["suit" := "suːt"]}
+  , "swim" := Rule{rulePron = ["swim" := "swɪm"], ruleExamples = ["swim" := "swɪm"]}
+  , "swimmer" := Rule{rulePron = ["swi" := "ˈswɪ", "mmer" := "mə"], ruleExamples = ["swimmer" := "ˈswɪ.mə"]}
+  , "swimming" := Rule{rulePron = ["swi" := "ˈswɪ", "mming" := "mɪŋ"], ruleExamples = ["swimming" := "ˈswɪ.mɪŋ"]}
+  , "sword" := Rule{rulePron = ["sword" := "sɔːd"], ruleExamples = ["sword" := "sɔːd"]}
+  , "teeth" := Rule{rulePron = ["teeth" := "ˈtiːθ"], ruleExamples = ["teeth" := "ˈtiːθ"]}
+  , "terrifying" := Rule{rulePron = ["te" := "ˈtɛ", "rri" := "ɹɪ", "fy" := "faɪ", "ing" := "ɪŋ"], ruleExamples = ["terrifying" := "ˈtɛ.ɹɪ.faɪ.ɪŋ"]}
+  , "tiara" := Rule{rulePron = ["ti" := "ti", "ra" := "ˈɑːɹə"], ruleExamples = ["tiara" := "ti.ˈɑːɹə"]}
+  , "tiger" := Rule{rulePron = ["ti" := "ˈtaɪ", "ger" := "gə"], ruleExamples = ["tiger" := "ˈtaɪ.gə"]}
+  , "tigress" := Rule{rulePron = ["ti" := "ˈtaɪ", "gress" := "gɹɪs"], ruleExamples = ["tigress" := "ˈtaɪ.gɹɪs"]}
+  , "together" := Rule{rulePron = ["to" := "tʊ", "geth" := "ˈgɛð", "er" := "ə"], ruleExamples = ["together" := "tʊ.ˈgɛð.ə"]}
+  , "top" := Rule{rulePron = ["top" := "tɒp"], ruleExamples = ["top" := "tɒp"]}
+  , "touches" := Rule{rulePron = ["tou" := "ˈtʌ", "ches" := "t͡ʃɪz"], ruleExamples = ["touches" := "ˈtʌ.t͡ʃɪz"]}
+  , "track" := Rule{rulePron = ["track" := "tɹæk"], ruleExamples = ["track" := "tɹæk"]}
+  , "trawler" := Rule{rulePron = ["traw" := "ˈtrɔː", "ler" := "lə"], ruleExamples = ["trawler" := "ˈtrɔː.lə"]}
+  , "tree" := Rule{rulePron = ["tree" := "tɹiː"], ruleExamples = ["tree" := "tɹiː"]}
+  , "trees" := Rule{rulePron = ["trees" := "tɹiːs"], ruleExamples = ["trees" := "tɹiːs"]}
+  , "tries" := Rule{rulePron = ["tries" := "tɹaɪz"], ruleExamples = ["tries" := "tɹaɪz"]}
+  , "trunks" := Rule{rulePron = ["trunks" := "tɹʌŋks"], ruleExamples = ["trunks" := "tɹʌŋks"]}
+  , "two" := Rule{rulePron = ["two" := "tu"], ruleExamples = ["two" := "tu"]}
+  , "under" := Rule{rulePron = ["un" := "ˈʌn", "der" := "də"], ruleExamples = ["under" := "ˈʌn.də"]}
+  , "unexpected" := Rule{rulePron = ["un" := "ʌn", "e" := "ɪ", "x" := ["k", "ˈs"], "pec" := "pɛk", "ted" := "tɪd"], ruleExamples = ["unexpected" := "ʌn.ɪk.ˈspɛk.tɪd"]}
+  , "up" := Rule{rulePron = ["up" := "ʌp"], ruleExamples = ["up" := "ʌp"]}
+  , "wait" := Rule{rulePron = ["wait" := "weɪt"], ruleExamples = ["wait" := "weɪt"]}
+  , "waits" := Rule{rulePron = ["waits" := "weɪts"], ruleExamples = ["waits" := "weɪts"]}
+  , "walk" := Rule{rulePron = ["walk" := "wɔːk"], ruleExamples = ["walk" := "wɔːk"]}
+  , "walks" := Rule{rulePron = ["walks" := "wɔːks"], ruleExamples = ["walks" := "wɔːks"]}
+  , "war" := Rule{rulePron = ["war" := "wɔː"], ruleExamples = ["war" := "wɔː"]}
+  , "wars" := Rule{rulePron = ["wars" := "wɔːz"], ruleExamples = ["wars" := "wɔːz"]}
+  , "water" := Rule{rulePron = ["wa" := "ˈwɔː", "ter" := "tə"], ruleExamples = ["water" := "ˈwɔː.tə"]}
+  , "wears" := Rule{rulePron = ["wears" := "wɛəz"], ruleExamples = ["wears" := "wɛəz"]}
+  , "white" := Rule{rulePron = ["white" := "waɪt"], ruleExamples = ["white" := "waɪt"]}
+  , "wield" := Rule{rulePron = ["wield" := "wiːld"], ruleExamples = ["wield" := "wiːld"]}
+  , "wields" := Rule{rulePron = ["wields" := "wiːlds"], ruleExamples = ["wields" := "wiːlds"]}
+  , "witch" := Rule{rulePron = ["witch" := "wɪt͡ʃ"], ruleExamples = ["witch" := "wɪt͡ʃ"]}
+  , "women" := Rule{rulePron = ["wom" := "ˈwɪm", "en" := "ɪn"], ruleExamples = ["women" := "ˈwɪm.ɪn"]}
+  , "wood" := Rule{rulePron = ["wood" := "wʊd"], ruleExamples = ["wood" := "wʊd"]}
+  , "wraith" := Rule{rulePron = ["wraith" := "ɹeɪθ"], ruleExamples = ["wraith" := "ɹeɪθ"]}
+  , "yacht" := Rule{rulePron = ["yacht" := "jɒt"], ruleExamples = ["yacht" := "jɒt"]}
+  , "cherry" := Rule{rulePron = ["che" := "ˈt͡ʃɛ", "rry" := "ɹi"], ruleExamples = ["cherry" := "ˈt͡ʃɛ.ɹi"]}
+  , "blue" := Rule{rulePron = ["blue" := "ˈbluː"], ruleExamples = ["blue" := "ˈbluː"]}
+  , "peach" := Rule{rulePron = ["peach" := "piːt͡ʃ"], ruleExamples = ["peach" := "piːt͡ʃ"]}
+  , "wild" := Rule{rulePron = ["wild" := "waɪld"], ruleExamples = ["wild" := "waɪld"]}
+  , "straw" := Rule{rulePron = ["straw" := "stɹɔː"], ruleExamples = ["straw" := "stɹɔː"]}
+  , "green" := Rule{rulePron = ["green" := "gɹiːn"], ruleExamples = ["green" := "gɹiːn"]}
+  , "syrup" := Rule{rulePron = ["sy" := "sɪ", "rup" := "ɹəp"], ruleExamples = ["syrup" := "sɪ.ɹəp"]}
+  , "berry" := Rule{rulePron = ["be" := "ˈbɛ", "rry" := "ɹi"], ruleExamples = ["blueberry" := "ˈbluː.ˈbɛ.ɹi"]}
+  , "cantaloupe" := Rule{rulePron = ["can" := "ˈkæn", "ta" := "tə", "loupe" := "luːp"], ruleExamples = ["cantaloupe" := "ˈkæn.tə.luːp"]}
+  , "zombie" := Rule{rulePron = ["zom" := "zɒm", "bie" := "bi"], ruleExamples = ["zombie" := "zɒm.bi"]}
+  , "must" := Rule{rulePron = ["must" := "mʌst"], ruleExamples = ["must" := "mʌst"]}
+  , "mustang" := Rule{rulePron = ["mus" := "ˈmʌs", "tang" := "ˌtæŋ"], ruleExamples = ["mustang" := "ˈmʌs.ˌtæŋ"]}
+  , "leans" := Rule{rulePron = ["leans" := "liːnz"], ruleExamples = ["leans" := "liːnz"]}
+  , "apple" := Rule{rulePron = ["a" := "ˈæ", "pple" := "pl"], ruleExamples = ["apple" := "ˈæ.pl"]}
+  , "orange" := Rule{rulePron = ["o" := "ˈɒ", "range" := "ɹɪnd͡ʒ"], ruleExamples = ["orange" := "ˈɒ.ɹɪnd͡ʒ"]}
+  , "banana" := Rule{rulePron = ["ba" := "bə", "na" := "ˈnɑː", "na" := "nə"], ruleExamples = ["banana" := "bə.ˈnɑː.nə"]}
+  , "ananas" := Rule{rulePron = ["a" := "ə", "na" := "ˈneɪ", "nas" := "nəs"], ruleExamples = ["ananas" := "ə.ˈneɪ.nəs"]}
+  , "apricot" := Rule{rulePron = ["a" := "ˈeɪ", "pri" := "pɹɪ", "cot" := "kɒt"], ruleExamples = ["apricot" := "ˈeɪ.pɹɪ.kɒt"]}
+  , "lemon" := Rule{rulePron = ["lem" := "ˈlɛm", "on" := "ən"], ruleExamples = ["lemon" := "ˈlɛm.ən"]}
+  , "sweet" := Rule{rulePron = ["sweet" := "swiːt"], ruleExamples = ["sweet" := "swiːt"]}
+  , "lime" := Rule{rulePron = ["lime" := "laɪm"], ruleExamples = ["lime" := "laɪm"]}
+  , "ginger" := Rule{rulePron = ["gin" := "ˈdʒɪn", "ger" := "dʒə"], ruleExamples = ["ginger" := "ˈdʒɪn.dʒə"]}
+  , "raspberry" := Rule{rulePron = ["ras" := "ˈɹɑːz", "be" := "bə", "rry" := "ɹi"], ruleExamples = ["raspberry" := "ˈɹɑːz.bə.ɹi"]}
+  , "hibiscus" := Rule{rulePron = ["hi" := "hɪ", "bis" := "ˈbɪs", "cus" := "kəs"], ruleExamples = ["hibiscus" := "hɪ.ˈbɪs.kəs"]}
+  , "mandarin" := Rule{rulePron = ["man" := "ˈmæn", "da" := "də", "rin" := "ɹɪn"], ruleExamples = ["mandarin" := "ˈmæn.də.ɹɪn"]}
+  , "party" := Rule{rulePron = ["par" := "ˈpɑː", "ty" := "ti"], ruleExamples = ["party" := "ˈpɑː.ti"]}
+  , "greetings" := Rule{rulePron = ["gree" := "ˈgɹiː", "tings" := "tɪŋz"], ruleExamples = ["greetings" := "ˈgɹiː.tɪŋz"]}
+  , "decorations" := Rule{rulePron = ["de" := "ˌdɛ", "co" := "kə", "ra" := "ˈɹeɪ", "tions" := "ʃənz"], ruleExamples = ["decorations" := "ˌdɛ.kə.ˈɹeɪ.ʃənz"]}
+  , "tart" := Rule{rulePron = ["tart" := "tɑːt"], ruleExamples = ["tart" := "tɑːt"]}
+  , "cake" := Rule{rulePron = ["cake" := "keɪk"], ruleExamples = ["cake" := "keɪk"]}
+  , "fruit" := Rule{rulePron = ["fruit" := "fɹuːt"], ruleExamples = ["fruit" := "fɹuːt"]}
+  , "gift" := Rule{rulePron = ["gift" := "gɪft"], ruleExamples = ["gift" := "gɪft"]}
+  , "juice" := Rule{rulePron = ["juice" := "d͡ʒuːs"], ruleExamples = ["juice" := "d͡ʒuːs"]}
+  , "works" := Rule{rulePron = ["works" := "wɜːks"], ruleExamples = ["fireworks" := "ˈfaɪ.ə.wɜːks"]}
+  , "drink" := Rule{rulePron = ["drink" := "dɹɪŋk"], ruleExamples = ["drink" := "dɹɪŋk"]}
+  , "fizzy" := Rule{rulePron = ["fi" := "ˈfɪ", "zzy" := "zi"], ruleExamples = ["fizzy" := "ˈfɪ.zi"]}
+  , "Éowyn" := Rule{rulePron = ["Eo" := "ˈeɪoʊ", "wyn" := "wɪn"], ruleExamples = ["Éowyn" := "ˈeɪoʊ.wɪn"]}
+  , -- , "her" := Rule{rulePron = ["her" := "ə"], ruleExamples = ["her" := "ə"]} -- unstressed
+    ending "'s" := Rule{rulePron = ["'" := [], ending "s" := "s"], ruleExamples = ["tiger's" := "ˈtaɪ.gə.s"]}
+  , ending "for" := Rule{rulePron = [word "for" := "fɔː"], ruleExamples = ["for" := "fɔː"]}
+  , ending "ing" := Rule{rulePron = [ending "ing" := "ɪŋ"], ruleExamples = ["beeing" := "ˈbiː.ɪŋ"]}
+  , ending "ling" := Rule{rulePron = [ending "ling" := "lɪŋ"], ruleExamples = ["snorkelling" := "ˈsnɔː.kəl.lɪŋ"]}
+  , ending "with" := Rule{rulePron = [ending "with" := "wɪθ"], ruleExamples = ["with" := "wɪθ"]}
+  , ending "with" <> " " <> begining [LexemeSemiVowel] := Rule{rulePron = [ending "with" <> " " <> begining [LexemeSemiVowel] := "wɪð"], ruleExamples = ["with you" := "wɪð.ju"]}
+  , ending "with" <> " " <> begining [LexemeSemiVowel] := Rule{rulePron = [ending "with" <> " " <> begining [LexemeSemiVowel] := "wɪð"], ruleExamples = ["with you" := "wɪð.ju"]}
+  , -- , ending "with" <> " " <> [LexemeVowel] := Rule{rulePron = [ending "with" <> " " <> [LexemeVowel] := "wɪð"], ruleExamples = ["with you" := "wɪð.ju"]}
+    word "a" := Rule{rulePron = [word "a" := "ə"], ruleExamples = ["a" := "ə"]}
+  , word "and" := Rule{rulePron = [word "and" := "ænd"], ruleExamples = ["and" := "ænd"]}
+  , word "end" := Rule{rulePron = ["end" := "ɛnd"], ruleExamples = ["end" := "ɛnd"]}
+  , word "in" := Rule{rulePron = [word "in" := "ɪn"], ruleExamples = ["in" := "ɪn"]}
+  , word "its" := Rule{rulePron = [word "its" := "ɪts"], ruleExamples = ["its" := "ɪts"]}
+  , word "of" := Rule{rulePron = [word "of" := "ɒv"], ruleExamples = ["of" := "ɒv"]}
+  , word "the" := Rule{rulePron = [word "the" := "ðə"], ruleExamples = ["the" := "ðə"]}
+  , word "the" <> " " <> [LexemeBorder, LexemeVowel] := Rule{rulePron = [word "the" <> " " <> [LexemeBorder, LexemeVowel] := "ði"], ruleExamples = ["the eye" := "ði.aɪ"]}
+  , word "the" <> " " <> [LexemeVowel] := Rule{rulePron = [word "the" <> " " <> [LexemeVowel] := "ði"], ruleExamples = ["the end" := "ði.ɛnd"]}
+  , word "to" := Rule{rulePron = [word "to" := "tuː"], ruleExamples = ["to" := "tuː"]}
+  , word "you" := Rule{rulePron = [word "you" := "ju"], ruleExamples = ["you" := "ju"]}
+  -- , "with" := Rule{rulePron = ["with" := ""], ruleExamples = ["with" := ""]}
+  -- , ending "s" := Rule{rulePron = [[LexemeConsonant] <> "s" := "ɪŋ"], ruleExamples = ["beeing" := "ˈbiː.ɪŋ"]}
+  ]
+    -- , "" := Rule{rulePron = ["" := ""], ruleExamples = ["" := ""]}
+    & Pron.withCapital
+    & fromList
diff --git a/tests/Language/FrenchSpec.hs b/tests/Language/FrenchSpec.hs
new file mode 100644 (file)
index 0000000..5b4f06d
--- /dev/null
@@ -0,0 +1,651 @@
+{-# LANGUAGE OverloadedLists #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Language.FrenchSpec where
+
+import Data.ByteString.Builder qualified as ByteString.Builder
+import Data.Char qualified as Char
+import Data.GenValidity.Map ()
+import Data.GenValidity.Sequence ()
+import Data.GenValidity.Set ()
+import Data.GenValidity.Text ()
+import Data.List qualified as List
+import Data.Map.Strict qualified as Map
+import Data.Set qualified as Set
+import Data.Text qualified as Text
+import Data.Text.Encoding qualified as Text
+import Data.Text.Lazy.Encoding qualified as Text.Lazy
+import Data.Text.Short qualified as ShortText
+import Data.Validity.Map ()
+import Data.Validity.Set ()
+import Data.Validity.Text ()
+import Language
+import Language.French qualified as French
+import Language.Pronunciation (ExampleLiteral (..), Lexeme (..), Rule (..), RuleLexemes, after, before, begining, ending, meaning, occurence, rule, silent, word)
+import Language.Pronunciation qualified as Pron
+import Paths_worksheets qualified as Self
+import System.Directory qualified as IO
+import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
+import System.FilePath.Posix qualified as File
+import System.IO qualified as IO
+import Test.Syd
+import Text.Blaze.Html5.Attributes qualified as HA
+import Utils.Pronunciation qualified as Pron
+import Utils.Tests
+import Wiktionary qualified
+import Worksheets.Utils.HTML (Html, className, classes, cm, styles, (!))
+import Worksheets.Utils.HTML qualified as HTML
+import Worksheets.Utils.IPA qualified as IPA
+import Worksheets.Utils.Paper qualified as Paper
+import Worksheets.Utils.Prelude
+import Worksheets.Utils.SQL qualified as SQL
+import Prelude (error, even, mod)
+
+{-
+instance IsString Rule where
+  fromString s = rule {ruleLexemes = fromString s}
+  [ ful "de" := single "də" ["de" & occurence]
+  , inf "'" := single "" []
+  , inf "-" := single "" []
+  , inf "," := single "" []
+  , inf "?" := single "" []
+  , inf "!" := single "" []
+  , inf borderLeftText := single "" []
+  , inf borderRightText := single "" []
+
+  , inf "demi" := single "dəmi" ["demi" & occurence]
+  , -- , inf "amb" := single "ɑ̃b" ["amb" & occurence, "ulance"]
+    -- , inf "amp" := single "ɑ̃p" ["amp" & occurence, "oule"]
+    -- , inf "amph" := single "ɑ̃f" ["amph" & occurence, "ithéâtre"]
+    -- , inf "an" := multi
+    --    [ [PronContextBeforeBorder] := LexemePron{lexemePronunciation="ɑ̃", lexemeExample=["pl", "an" & occurence]}
+    --    , [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation="an", lexemeExample=["an" & occurence, "imal"]}
+    --    , [PronContextBeforeAny] := LexemePron{lexemePronunciation="ɑ̃", lexemeExample=["an" & occurence, "tilope"]}
+    --    ]
+  , -- , inf "coin" := single "kwɛ̃" ["coin" & occurence, "cer"]
+
+  , -- , inf "im"
+    --    := multi
+    --      [ [PronContextBeforeBorder] := LexemePron{lexemePronunciation = "", lexemeExample = }
+    --      , [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "im", lexemeExample = ["im" & occurence, "ortel"]}
+    --      , [PronContextBeforeAny] := LexemePron{lexemePronunciation = "ɛ̃", lexemeExample = ["im" & occurence, "primer"]}
+    --      ]
+  , -- , inf "in" := single "ɛ̃" ["merl", "in" & occurence]
+    -- , inf "ina" := single "ina" ["ord", "ina" & occurence, "teur"]
+    -- , inf "ine" := single "in" ["rout", "ine" & occurence]
+    -- , inf "inent" := single "in" ["dess", "inent" & occurence]
+    -- , inf "iner" := single "inɛʁ" ["iner" & occurence, "tie"]
+    -- , inf "inex" := single "inɛgz" ["inex" & occurence, "istant"]
+    -- , inf "inexp" := single "inɛksp" ["inexp" & occurence, "licable"]
+    -- , inf "inima" := single "inima" ["inima" & occurence, "ginable"]
+    -- , inf "inimi" := single "inimi" ["inimi" & occurence, "table"]
+    -- , inf "inimp" := single "inimp" ["inimp" & occurence, "ortant"]
+    -- , inf "ininf" := single "inɛ̃" ["ininf" & occurence, "lammation"]
+    -- , inf "inint" := single "inɛ̃t" ["inint" & occurence, "éressant"]
+    -- , inf "inn" := single "in" ["inn" & occurence, "ocent"]
+    -- , inf "ino" := single "ino" ["ino" & occurence, "dore"]
+    -- , inf "inu" := single "inu" ["inu" & occurence, "tile"]
+    -- , inf "ix" := single "iks" ["phén", "ix" & occurence]
+    -- , inf "gine" := single "ʒin" ["an", "gine" & occurence]
+  -- , inf "era" := single "əʁa" ["s", "era" & occurence]
+  -- , inf "erai" := single "əʁɛ" ["s", "erai" & occurence]
+  , inf "era" :=
+      multi
+        [ [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "əʁ", lexemeExample = ["mer" & occurence, "ingue"]}
+        , [PronContextBeforeAny] := LexemePron{lexemePronunciation = "ɛʁ", lexemeExample = ["mer" & occurence, "le"]}
+        ]
+  , inf "erin" := single "əʁɛ̃" ["m", "erin" & occurence, "gue"]
+  , inf "s" :=
+      multi
+        [ [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "z", lexemeExample = ["ti", "s" & occurence, "ane"]}
+        , [PronContextBeforeAnySemiVowel] := LexemePron{lexemePronunciation = "z", lexemeExample = ["pari", "s" & occurence, "ienne"]}
+        , [PronContextBeforeAny] := LexemePron{lexemePronunciation = "s", lexemeExample = ["s", "a" & occurence]}
+        ]
+  , -- , inf "shirt" := single "ʃœʁt" ["shirt" & occurence]
+  , -- , inf "teau" := single "to" ["teau" & occurence]
+    -- , inf "ti" := single "ti" ["ti" & occurence, "gre"]
+  , pre "ukulele" := single "jukulele" ["ukulele" & occurence]
+  , -- , inf "ui" := single "ɥi" ["ling", "ui" & occurence, "stique"]
+  , pre "abrivent" := single "abʁivɑ̃" ["abrivent" & occurence]
+  , pre "adjuvent" := single "adʒyvɑ̃" ["adjuvent" & occurence]
+  , pre "antivent" := single "ɑ̃tivɑ̃" ["antivent" & occurence]
+  , pre "auvent" := single "ovɑ̃" ["auvent" & occurence]
+  , pre "avent" := single "avɑ̃" ["avent" & occurence]
+  , pre "aï" := single "ai" ["c", "aï" & occurence, "man"]
+  , pre "bavent" := single "bavɑ̃" ["bavent" & occurence]
+  , pre "boutavent" := single "butavɑ̃" ["boutavent" & occurence]
+  , pre "bouvent" := single "buvɑ̃" ["bouvent" & occurence]
+  , pre "bénévent" := single "benevɑ̃" ["bénévent" & occurence]
+  , pre "connivent" := single "konivɑ̃" ["connivenr" & occurence]
+  , pre "contrevent" := single "kɔ̃tʁəvɑ̃" ["contrevent" & occurence]
+  , pre "convent" := single "kɔ̃vɑ̃" ["convent" & occurence]
+  , pre "couvent" := single "kuvɑ̃" ["couvent" & occurence]
+  , pre "couvents" := single "kuvɑ̃" ["couvents" & occurence]
+  , pre "engoulevent" := single "ɑ̃gulvɑ̃" ["engoulevent" & occurence]
+  , pre "fervent" := single "fɛʁvɑ̃" ["fervent" & occurence]
+  , pre "frévent" := single "fʁevɑ̃" ["frévent" & occurence]
+  , pre "heurtevent" := single "œʁtəvɑ̃" ["heurtevent" & occurence]
+  , pre "her" := single "ɛʁ" ["her" & occurence, "be"]
+  , pre "hi" := single "i" ["hi" & occurence, "ver"]
+  , pre "ill" := single "il" ["ill" & occurence, "étrisme"]
+  , pre "jack" := single "dʒak" ["jack" & occurence]
+  , pre "jazz" := single "dʒaz" ["jazz" & occurence]
+  , pre "montsurvent" := single "mɔ̃syʁvɑ̃" ["montsurvent" & occurence]
+  , -- , pre "ni" := single "ni" ["ni" & occurence, "ais"]
+    pre "niai" := single "njɛ" ["niai" & occurence, "s"]
+  , pre "paravent" := single "paʁavɑ̃" ["paravent" & occurence]
+  , pre "sen" :=
+      multi
+        [ [PronContextBeforeAny] := LexemePron{lexemePronunciation = "sɑ̃", lexemeExample = ["sen" & occurence, "t"]}
+        , [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "sen", lexemeExample = ["sen" & occurence, "a"]}
+        -- , inf "a" := LexemePron{lexemePronunciation="sen", lexemeExample=["sen" & occurence, "a"]}
+        -- , inf "e" := LexemePron{lexemePronunciation="sən", lexemeExample=["sen" & occurence, "estre"]}
+        -- , inf "i" := LexemePron{lexemePronunciation="sen", lexemeExample=["sen" & occurence, "ior"]}
+        -- , inf "o" := LexemePron{lexemePronunciation="sen", lexemeExample=["Sen" & occurence, "oueix"]}
+        -- , inf "u" := LexemePron{lexemePronunciation="sen", lexemeExample=[]}
+        ]
+  , pre "souvent" := single "suvɑ̃" ["souvent" & occurence]
+  , pre "taillevent" := single "tɑjvɑ̃" ["taillevent" & occurence]
+  , pre "tournevent" := single "tuʁnəvɑ̃" ["tournevent" & occurence]
+  , pre "vent" := single "vɑ̃" ["vent" & occurence]
+  , pre "virevent" := single "viʁvɑ̃" ["virevent" & occurence]
+  , pre "volvent" := single "vɔlvɑ̃" ["volvent" & occurence]
+  , pre "évent" := single "evɑ̃" ["évent" & occurence]
+  , pre "œ" := single "œ" ["œ" & occurence, "uf"]
+  , pre "fier" := single "fjɛʁ" ["fier" & occurence]
+  , pre "tier" := single "tjɛʁ" ["tier" & occurence]
+
+  ]
+    & list
+    & foldMap (\(ks, v) -> [(k, v) | k <- ks])
+    & mapFromListCheckingDuplicates
+  where
+    single pron exs =
+      Map.singleton PronContextBeforeAny $ LexemePron{lexemePronunciation = pron, lexemeExample = exs}
+    multi l =
+      l
+        & list
+        & foldMap (\(ks, v) -> [(k, v) | k <- ks])
+        & mapFromListCheckingDuplicates
+-}
+
+spec :: HasCallStack => Spec
+spec = do
+  -- Pron.lexerRender $ French.pronunciationDict
+  describe "pronunciation" do
+    -- describe "decomposition" do
+    --  forM_ sentences \sentence ->
+    --    Pron.pronunciationDecompositionTest French.pronunciationDict $ sentence & Text.unpack
+    -- describe "result" do
+    --  forM_ sentences \sentence ->
+    --    Pron.pronunciationResultTest French.pronunciationDict $ sentence & Text.unpack
+    describe "parser" do
+      Pron.pronunciationParserTest pronunciationRules sentences
+
+{-
+withoutRetries do
+  withoutTimeout do
+    around (\k -> SQL.withConnection "data/langs/français/kaikki/wiktionary=fr.lang=fr.sqlite3" k) do
+      outDB <- goldenPath "wiktionary" "sqlite"
+      outDBExists <- IO.doesFileExist outDB & liftIO
+      when (outDBExists) do
+        IO.removeFile outDB & liftIO
+      aroundWith
+        ( \k wiktConn -> do
+            SQL.withConnection outDB \outConn ->
+              k (wiktConn, outConn)
+        )
+        do
+          it "check-against-wiktionary" \(wiktConn, outConn) -> do
+            SQL.execute_ outConn $ "PRAGMA journal_mode = OFF"
+            SQL.execute_ outConn $ "PRAGMA synchronous = OFF"
+            SQL.execute_ outConn $ "CREATE TABLE IF NOT EXISTS results (exprLit TEXT NON NULL, wiktBroad TEXT NON NULL, wiktBroadSegments TEXT NON NULL, synthBroad TEXT NON NULL, synthExplain TEXT NON NULL)"
+            SQL.execute_ outConn $ "CREATE INDEX results__exprLit ON results (exprLit);"
+            SQL.execute_ outConn $ "CREATE INDEX results__wiktBroad ON results (wiktBroad);"
+            SQL.execute_ outConn $ "CREATE INDEX results__synthBroad ON results (synthBroad);"
+            SQL.execute_ outConn $ "CREATE TABLE IF NOT EXISTS errors (exprId INTEGER NON NULL, exprLit TEXT NON NULL, error TEXT NON NULL)"
+            SQL.fold
+              wiktConn
+              "SELECT id,word,sounds FROM wiktionary WHERE lang_code='fr' LIMIT 1000"
+              ()
+              (1 :: Int)
+              \ !i
+                ( exprId :: Int
+                  , maybeWord :: Maybe Text
+                  , sounds :: [Wiktionary.Sound]
+                  ) -> do
+                  case maybeWord of
+                    Nothing -> return ()
+                    Just exprLit ->
+                      case exprLit & Pron.run French.pronunciationRules of
+                        Left err -> do
+                          SQL.execute
+                            outConn
+                            "INSERT INTO errors (exprId, exprLit, error) VALUES (?,?,?)"
+                            ( exprId
+                            , exprLit
+                            , err & pShowNoColor
+                            )
+                        Right lexemes -> do
+                          let synthExplain = lexemes <&> (\Pron.Pron{pronInput, pronRule} -> Pron.chars pronInput <> " → " <> show (Pron.rulePron pronRule)) & List.intercalate "; "
+                          let synthBroad = lexemes & foldMap (Pron.pronRule >>> Pron.rulePron >>> Pron.pronunciationText)
+                          forM_ sounds \Wiktionary.Sound{..} -> do
+                            -- IO.hPrint IO.stderr (i, ident::Int, maybeWord)
+                            case sound_ipa of
+                              Just (IPA.IPAPhons exprIPAs) -> do
+                                forM_ exprIPAs \case
+                                  IPA.IPAPhonemic exprBroad -> do
+                                    when (i `mod` 5000 == 0) do
+                                      IO.hPrint IO.stderr (i, exprLit, exprBroad)
+                                    SQL.execute
+                                      outConn
+                                      "INSERT INTO results(exprLit, wiktBroad, wiktBroadSegments, synthBroad, synthExplain) VALUES(?,?,?,?,?);"
+                                      ( exprLit
+                                      , exprBroad & IPA.ipaWordsToText Nothing
+                                      , exprBroad & IPA.dropSupraSegmentalFeatures & IPA.ipaWordsToText Nothing
+                                      , synthBroad
+                                      , synthExplain
+                                      ) -- & traceShowId
+                                  IPA.IPAPhonError (_errMsg, _err) -> return ()
+                                  _ -> return ()
+                              _ -> return ()
+                  return (i + 1)
+            return @IO ()
+-}
+
+{-
+mangleSupraSegmentalFeatures :: [IPA.Syllable []] -> [[IPA.Segment]]
+mangleSupraSegmentalFeatures = \case
+  [] -> []
+  IPA.Syllable syl : ts -> syl : mangleSupraSegmentalFeatures ts
+  IPA.WithSuprasegmentalFeature IPA.Linking syl : ts ->
+    case mangleSupraSegmentalFeatures ts of
+      [] -> [dropSupraSegmentalFeatures syl]
+      x : xs -> (dropSupraSegmentalFeatures syl <> x) : xs
+  IPA.WithSuprasegmentalFeature _feat syl : xs ->
+    mangleSupraSegmentalFeatures (syl : xs)
+-}
+
+-- cardsHtml "syllabes" $ French.syllablesTable & French.syllablesTableToHTML
+
+sentences :: Map Pron.InputLexemes Pron.Pronunciation
+sentences =
+  [ -- [ ["aiguille"]
+    -- , ["ail"]
+    -- , ["aimer"]
+    -- , ["ampoules"]
+    -- , ["couvent"{exampleLiteralMeaning = "couver"}]
+    -- , ["couvent"{exampleLiteralMeaning = "monastère"}]
+    -- , ["papillon"]
+    -- ] :: [[]]
+    pronunciationRules
+      & Pron.examples
+  ]
+    & list
+    & Map.unionsWith (curry errorShow)
+pronunciationRules :: Pron.Table
+pronunciationRules =
+  [ "Escherichia" := Rule{rulePron = ["E" := "ɛ", "sche" := "ʃe", "ri" := "ʁi", "chia" := "ʃja"], ruleExamples = ["Escherichia" := "ɛ.ʃe.ʁi.ʃja"]}
+  , "Maël" := Rule{rulePron = ["ma" := "ma", "ël" := "ɛl"], ruleExamples = ["Maël" := "ma.ɛl"]}
+  , "a" := Rule{rulePron = ["a" := "a"], ruleExamples = ["allume" := "a.lym"]}
+  , "au" := Rule{rulePron = ["au" := "o"], ruleExamples = ["au" := "o"]}
+  , "à" := Rule{rulePron = ["à" := "a"], ruleExamples = ["à" := "a"]}
+  , "arc" := Rule{rulePron = ["arc" := "aʁk"], ruleExamples = ["arc" := "aʁk"]}
+  , word "l" := Rule{rulePron = ["l" := "l"], ruleExamples = ["l" := "l"]}
+  , "ancrage" := Rule{rulePron = ["an" := "ɑ̃", "crage" := "kʁaʒ"], ruleExamples = ["ancrage" := "ɑ̃.kʁaʒ"]}
+  , "ancre" := Rule{rulePron = ["ancre" := "ɑ̃kʁ"], ruleExamples = ["ancre" := "ɑ̃kʁ"]}
+  , "ba" := Rule{rulePron = ["ba" := "ba"], ruleExamples = ["bateau" := "ba.to"]}
+  , "bal" := Rule{rulePron = ["bal" := "bal"], ruleExamples = ["bal" := "bal"]}
+  , "balle" := Rule{rulePron = ["balle" := "bal"], ruleExamples = ["balle" := "bal"]}
+  , "bain" := Rule{rulePron = ["bain" := "bɛ̃"], ruleExamples = ["bain" := "bɛ̃"]}
+  , "bile" := Rule{rulePron = ["bile" := "bil"], ruleExamples = ["immobile" := "i.mɔ.bil"]}
+  , "bo" := Rule{rulePron = ["bo" := "bɔ"], ruleExamples = ["bobo" := "bɔ.bo"]}
+  , "boi" := Rule{rulePron = ["boi" := "bwa"], ruleExamples = ["boit" := "bwa"]}
+  , "boué" := Rule{rulePron = ["boué" := "bwe"], ruleExamples = ["boué" := "bwe"]}
+  , "bri" := Rule{rulePron = ["bri" := "bʁi"], ruleExamples = ["sabrina" := "sa.bʁi.na"]}
+  , "brou" := Rule{rulePron = ["brou" := "bʁu"], ruleExamples = ["brouette" := "bʁu.ɛt"]}
+  , "ca" := Rule{rulePron = ["ca" := "ka"], ruleExamples = ["calla" := "ka.la"]}
+  , "cha" := Rule{rulePron = ["cha" := "ʃa"], ruleExamples = ["chamotté" := "ʃa.mɔ.te"]}
+  , "cham" <> [LexemeConsonant] := Rule{rulePron = ["cham" := "ʃɑ̃"], ruleExamples = ["champignon" := "ʃɑ̃.pi.ɲɔ̃"]}
+  , "chon" := Rule{rulePron = ["chon" := "ʃɔ̃"], ruleExamples = ["cochon" := "kɔ.ʃɔ̃"]}
+  , "chry" := Rule{rulePron = ["chry" := "kʁi"], ruleExamples = ["chrysanthème" := "kʁi.zɑ̃.tɛm"]}
+  , "ci" := Rule{rulePron = ["ci" := "si"], ruleExamples = ["mucidule" := "my.si.dyl"]}
+  , "cla" := Rule{rulePron = ["cla" := "kla"], ruleExamples = ["éclat" := "e.kla"]}
+  , "clate" := Rule{rulePron = ["clate" := "klat"], ruleExamples = ["éclate" := "e.klat"]}
+  , "clatent" := Rule{rulePron = ["clatent" := "klat"], ruleExamples = ["éclatent" := "e.klat"]}
+  , "cinthe" := Rule{rulePron = ["cinthe" := "sɛ̃t"], ruleExamples = ["jacinthe" := "ʒa.sɛ̃t"]}
+  , "co" := Rule{rulePron = ["co" := "kɔ"], ruleExamples = ["cochon" := "kɔ.ʃɔ̃"]}
+  , "de" := Rule{rulePron = ["de" := "də"], ruleExamples = ["demi" := "də.mi"]}
+  , "de" := Rule{rulePron = ["de" := "də"], ruleExamples = ["demi" := "də.mi"]}
+  , "deau" := Rule{rulePron = ["deau" := "do"], ruleExamples = ["rideau" := "ʁi.do"]}
+  , "dent" := Rule{rulePron = ["dent" := "dɑ̃"], ruleExamples = ["dent" := "dɑ̃"]}
+  , "deuil" := Rule{rulePron = ["deuil" := "dœj"], ruleExamples = ["deuil" := "dœj"]}
+  , "do" := Rule{rulePron = ["do" := "dɔ"], ruleExamples = ["doré" := "dɔ.ʁe"]}
+  , "drai" := Rule{rulePron = ["drai" := "dʁɛ"], ruleExamples = ["draisienne" := "dʁɛ.zjɛn"]}
+  , "du" := Rule{rulePron = ["du" := "dy"], ruleExamples = ["du" := "dy"]}
+  , "dule" := Rule{rulePron = ["dule" := "dyl"], ruleExamples = ["mucidule" := "my.si.dyl"]}
+  , "en" := Rule{rulePron = ["en" := "ɑ̃"], ruleExamples = ["en" := "ɑ̃"]}
+  , "ette" := Rule{rulePron = ["ette" := "ɛt"], ruleExamples = ["brouette" := "bʁu.ɛt"]}
+  , ending "blanc" := Rule{rulePron = [ending "blanc" := "blɑ̃"], ruleExamples = ["blanc" := "blɑ̃"]}
+  , "blanche" := Rule{rulePron = ["blanche" := "blɑ̃ʃ"], ruleExamples = ["blanche" := "blɑ̃ʃ"]}
+  , "blan" <> [LexemeConsonant] := Rule{rulePron = ["blan" <> [LexemeConsonant] := "blɑ̃"], ruleExamples = ["blanc" := "blɑ̃"]}
+  , "che" := Rule{rulePron = ["che" := "ʃə"], ruleExamples = ["cheval" := "ʃə.val"]}
+  , "val" := Rule{rulePron = ["val" := "val"], ruleExamples = ["cheval" := "ʃə.val"]}
+  , "fait" := Rule{rulePron = ["fait" := "fɛ"], ruleExamples = ["fait" := "fɛ"]}
+  , "fa" <> [LexemeConsonant] := Rule{rulePron = ["fa" <> [LexemeConsonant] := "fa"], ruleExamples = ["famille" := "fa.mij"]}
+  , "da" <> [LexemeConsonant] := Rule{rulePron = ["da" <> [LexemeConsonant] := "da"], ruleExamples = ["mandarine" := "mɑ̃.da.ʁin"]}
+  , "gin" <> [LexemeConsonant] := Rule{rulePron = ["gin" := "ʒɛ̃"], ruleExamples = ["gingembre" := "ʒɛ̃.ʒɑ̃bʁ"]}
+  , "gembre" := Rule{rulePron = ["gembre" := "ʒɑ̃bʁ"], ruleExamples = ["gingembre" := "ʒɛ̃.ʒɑ̃bʁ"]}
+  , "mille" := Rule{rulePron = ["mille" := "mij"], ruleExamples = ["famille" := "fa.mij"]}
+  , "man" <> [LexemeConsonant] := Rule{rulePron = ["man" <> [LexemeConsonant] := "mɑ̃"], ruleExamples = ["mandarine" := "mɑ̃.da.ʁin"]}
+  , "fram" <> [LexemeConsonant] := Rule{rulePron = ["fram" <> [LexemeConsonant] := "fʁɑ̃"], ruleExamples = ["framboise" := "fʁɑ̃.bwaz"]}
+  , "boise" := Rule{rulePron = ["boise" := "bwaz"], ruleExamples = ["framboise" := "fʁɑ̃.bwaz"]}
+  , "hibiscus" := Rule{rulePron = ["hi" := "i", "bis" := "bis", "cus" := "kys"], ruleExamples = ["hibiscus" := "i.bis.kys"]}
+  , word "mille" := Rule{rulePron = [word "mille" := "mil"], ruleExamples = ["mille" := "mil"]}
+  , "feu" := Rule{rulePron = ["feu" := "fø"], ruleExamples = ["feu" := "fø"]}
+  , "four" := Rule{rulePron = ["four" := "fuʁ"], ruleExamples = ["four" := "fuʁ"]}
+  , "feuille" := Rule{rulePron = ["feuille" := "fœj"], ruleExamples = ["feuille" := "fœj"]}
+  , "font" := Rule{rulePron = ["font" := "fɔ̃"], ruleExamples = ["font" := "fɔ̃"]}
+  , "fraise" := Rule{rulePron = ["fraise" := "fʁɛz"], ruleExamples = ["fraise" := "fʁɛz"]}
+  , "ga" := Rule{rulePron = ["ga" := "ga"], ruleExamples = ["alligator" := "a.li.ga.tɔʁ"]}
+  , "ge" := Rule{rulePron = ["ge" := "ʒə"], ruleExamples = ["gelée" := "ʒə.le"]}
+  , "grue" := Rule{rulePron = ["grue" := "gʁy"], ruleExamples = ["grue" := "gʁy"]}
+  , "sque" := Rule{rulePron = ["sque" := "skə"], ruleExamples = ["squelette" := "skə.lɛt"]}
+  , "lette" := Rule{rulePron = ["lette" := "lɛt"], ruleExamples = ["squelette" := "skə.lɛt"]}
+  , "geoir" := Rule{rulePron = ["geoir" := "ʒwaʁ"], ruleExamples = ["plongeoir" := "plɔ̃.ʒwaʁ"]}
+  , "geur" := Rule{rulePron = ["geur" := "ʒœʁ"], ruleExamples = ["nageur" := "na.ʒœʁ"]}
+  , "geuse" := Rule{rulePron = ["geuse" := "ʒøz"], ruleExamples = ["nageuse" := "na.ʒøz"]}
+  , "gi" <> [LexemeConsonant] := Rule{rulePron = ["gi" <> [LexemeConsonant] := "ʒi"], ruleExamples = ["gilet" := "ʒi.lɛ"]}
+  , "glace" := Rule{rulePron = ["glace" := "glas"], ruleExamples = ["glace" := "glas"]}
+  , "gnon" := Rule{rulePron = ["gnon" := "ɲɔ̃"], ruleExamples = ["champignon" := "ʃɑ̃.pi.ɲɔ̃"]}
+  , "gou" := Rule{rulePron = ["gou" := "gu"], ruleExamples = ["gouttière" := "gu.tjɛʁ"]}
+  , "gue" := Rule{rulePron = ["gue" := "gə"], ruleExamples = ["marguerite" := "maʁ.gə.ʁit"]}
+  , "gâ" := Rule{rulePron = ["gâ" := "ga"], ruleExamples = ["gâté" := "ga.te"]}
+  , "gé" := Rule{rulePron = ["gé" := "ʒe"], ruleExamples = ["orangé" := "ɔ.ʁɑ̃.ʒe"]}
+  , "gée" := Rule{rulePron = ["gée" := "ʒe"], ruleExamples = ["orangée" := "ɔ.ʁɑ̃.ʒe"]}
+  , "hi" := Rule{rulePron = ["hi" := "i"], ruleExamples = ["hippopotame" := "i.pɔ.pɔ.tam"]}
+  , "ppo" := Rule{rulePron = ["ppo" := "pɔ"], ruleExamples = ["hippopotame" := "i.pɔ.pɔ.tam"]}
+  , "tame" := Rule{rulePron = ["tame" := "tam"], ruleExamples = ["hippopotame" := "i.pɔ.pɔ.tam"]}
+  , "ho" := Rule{rulePron = ["ho" := "o"], ruleExamples = ["homo" := "o.mo"]}
+  , "hêtre" := Rule{rulePron = ["hêtre" := "ɛtʁ"], ruleExamples = ["hêtre" := "ɛtʁ"]}
+  , "é" := Rule{rulePron = ["é" := "e"], ruleExamples = ["éclat" := "e.kla"]}
+  , "i" := Rule{rulePron = ["i" := "i"], ruleExamples = ["ibis" := "i.bis"]}
+  , "illet" := Rule{rulePron = ["illet" := "jɛ"], ruleExamples = ["œillet" := "œ.jɛ"]}
+  , "illo" := Rule{rulePron = ["illo" := "jo"], ruleExamples = ["maillot" := "ma.jo"]}
+  , "ja" := Rule{rulePron = ["ja" := "ʒa"], ruleExamples = ["jacinthe" := "ʒa.sɛ̃t"]}
+  , "jas" := Rule{rulePron = ["jas" := "ʒas"], ruleExamples = ["jasmin" := "ʒas.mɛ̃"]}
+  , "je" := Rule{rulePron = ["je" := "ʒə"], ruleExamples = ["jetée" := "ʒə.te"]}
+  , "jon" <> [LexemeConsonant] := Rule{rulePron = ["jon" := "ʒɔ̃"], ruleExamples = ["jonquille" := "ʒɔ̃.kij"]}
+  , "ju" := Rule{rulePron = ["ju" := "ʒy"], ruleExamples = ["judo" := "ʒy.do"]}
+  , "kan" <> [LexemeConsonant] := Rule{rulePron = ["kan" <> [LexemeConsonant] := "kɑ̃"], ruleExamples = ["kangourou" := "kɑ̃.gu.ʁu"]}
+  , "gou" := Rule{rulePron = ["gou" := "gu"], ruleExamples = ["kangourou" := "kɑ̃.gu.ʁu"]}
+  , "rou" := Rule{rulePron = ["rou" := "ʁu"], ruleExamples = ["kangourou" := "kɑ̃.gu.ʁu"]}
+  , "rousse" := Rule{rulePron = ["rousse" := "ʁus"], ruleExamples = ["rousse" := "ʁus"]}
+  , "la" := Rule{rulePron = ["la" := "la"], ruleExamples = ["la" := "la"]}
+  , "lac" := Rule{rulePron = ["lac" := "lak"], ruleExamples = ["lac" := "lak"]}
+  , "langue" := Rule{rulePron = ["langue" := "lɑ̃g"], ruleExamples = ["langue" := "lɑ̃g"]}
+  , "le" := Rule{rulePron = ["le" := "lə"], ruleExamples = ["le" := "lə"]}
+  , "li" := Rule{rulePron = ["li" := "li"], ruleExamples = ["pissenlit" := "pi.sɑ̃.li"]}
+  , "lier" := Rule{rulePron = ["lier" := "lje"], ruleExamples = ["voilier" := "vwa.lje"]}
+  , "lin" <> [LexemeBorder] := Rule{rulePron = ["lin" := "lɛ̃"], ruleExamples = ["merlin" := "mɛʁ.lɛ̃"]}
+  , "lion" := Rule{rulePron = ["lion" := "ljɔ̃"], ruleExamples = ["lion" := "ljɔ̃"]}
+  , "lionne" := Rule{rulePron = ["lionne" := "ljɔ̃n"], ruleExamples = ["lionne" := "ljɔ̃n"]}
+  , "lla" := Rule{rulePron = ["lla" := "la"], ruleExamples = ["calla" := "ka.la"]}
+  , "lli" := Rule{rulePron = ["lli" := "li"], ruleExamples = ["alligator" := "a.li.ga.tɔʁ"]}
+  , "llon" := Rule{rulePron = ["llon" := "jɔ̃"], ruleExamples = ["papillon" := "pa.pi.jɔ̃"]}
+  , "llume" := Rule{rulePron = ["llume" := "lym"], ruleExamples = ["allume" := "a.lym", "allume-feu" := "a.lym.fø"]}
+  , "lu" := Rule{rulePron = ["lu" := "ly"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+  , "ly" := Rule{rulePron = ["ly" := "li"], ruleExamples = ["polypore" := "pɔ.li.pɔʁ"]}
+  , "lé" := Rule{rulePron = ["lé" := "le"], ruleExamples = ["gelé" := "ʒə.le"]}
+  , "leur" := Rule{rulePron = ["leur" := "lœʁ"], ruleExamples = ["leur" := "lœʁ"]}
+  , "griffe" := Rule{rulePron = ["griffe" := "gʁif"], ruleExamples = ["griffe" := "gʁif"]}
+  , "ra" := Rule{rulePron = ["ra" := "ʁa"], ruleExamples = ["ra" := "ʁa"]}
+  , "ma" := Rule{rulePron = ["ma" := "ma"], ruleExamples = ["ma" := "ma"]}
+  , "mar" <> [LexemeConsonant] := Rule{rulePron = ["mar" <> [LexemeConsonant] := "maʁ"], ruleExamples = ["marguerite" := "maʁ.gə.ʁit"]}
+  , "masque" := Rule{rulePron = ["masque" := "mask"], ruleExamples = ["masque" := "mask"]}
+  , "mer" <> [LexemeConsonant] := Rule{rulePron = ["mer" <> [LexemeConsonant] := "mɛʁ"], ruleExamples = ["merlin" := "mɛʁ.lɛ̃"]}
+  , "mi" := Rule{rulePron = ["mi" := "mi"], ruleExamples = ["demi" := "də.mi"]}
+  , "miel" := Rule{rulePron = ["miel" := "mjɛl"], ruleExamples = ["miel" := "mjɛl"]}
+  , "mmo" := Rule{rulePron = ["mmo" := "mɔ"], ruleExamples = ["immobile" := "i.mɔ.bil"]}
+  , "mo" := Rule{rulePron = ["mo" := "mɔ"], ruleExamples = ["moto" := "mɔ.to"]}
+  , -- , "mon" := Rule{rulePron = ["mon" := "mɔ̃"], ruleExamples = ["montre" := "mɔ̃"]}
+    "montre" := Rule{rulePron = ["montre" := "mɔ̃tʁ"], ruleExamples = ["montre" := "mɔ̃tʁ"]}
+  , "montrent" := Rule{rulePron = ["montrent" := "mɔ̃tʁ"], ruleExamples = ["montrent" := "mɔ̃tʁ"]}
+  , -- , "tre" := Rule{rulePron = ["tre" := "tʁ"], ruleExamples = ["montre" := "tʁ"]}
+    "mu" := Rule{rulePron = ["mu" := "my"], ruleExamples = ["mucidule" := "my.si.dyl"]}
+  , "mène" := Rule{rulePron = ["mène" := "mɛn"], ruleExamples = ["promène" := "pʁɔ.mɛn"]}
+  , "mènent" := Rule{rulePron = ["mènent" := "mɛn"], ruleExamples = ["promènent" := "pʁɔ.mɛn"]}
+  , "na" := Rule{rulePron = ["na" := "na"], ruleExamples = ["na" := "na"]}
+  , "nette" := Rule{rulePron = ["nette" := "nɛt"], ruleExamples = ["lunette" := "ly.nɛt", "lunettes" := "ly.nɛt"]}
+  , "niche" := Rule{rulePron = ["niche" := "niʃ"], ruleExamples = ["péniche" := "pe.niʃ"]}
+  , "nnet" := Rule{rulePron = ["nnet" := "nɛ"], ruleExamples = ["bonnet" := "bɔ.nɛ"]}
+  , "noc" := Rule{rulePron = ["noc" := "nɔk"], ruleExamples = ["nocturne" := "nɔk.tyʁn"]}
+  , "nou" := Rule{rulePron = ["nou" := "nu"], ruleExamples = ["nourrit" := "nu.ʁi"]}
+  , "o" := Rule{rulePron = ["o" := "ɔ"], ruleExamples = ["orange" := "ɔ.ʁɑ̃ʒ"]}
+  , "ou" := Rule{rulePron = ["ou" := "u"], ruleExamples = ["ou" := "u"]}
+  , "pa" := Rule{rulePron = ["pa" := "pa"], ruleExamples = ["papillon" := "pa.pi.jɔ̃"]}
+  , "paque" := Rule{rulePron = ["paque" := "pak"], ruleExamples = ["paquebot" := "pak.bo"]}
+  , "passe" := Rule{rulePron = ["passe" := "pas"], ruleExamples = ["passerelle" := "pas.ʁɛl"]}
+  , "pi" := Rule{rulePron = ["pi" := "pi"], ruleExamples = ["papillon" := "pa.pi.jɔ̃"]}
+  , "pi" := Rule{rulePron = ["pi" := "pi"], ruleExamples = ["pissenlit" := "pi.sɑ̃.li"]}
+  , "plon" := Rule{rulePron = ["plon" := "plɔ̃"], ruleExamples = ["plongeoir" := "plɔ̃.ʒwaʁ"]}
+  , "pneu" := Rule{rulePron = ["pneu" := "pnø"], ruleExamples = ["pneumatique" := "pnø.ma.tik"]}
+  , "po" := Rule{rulePron = ["po" := "pɔ"], ruleExamples = ["polypore" := "pɔ.li.pɔʁ"]}
+  , "foin" := Rule{rulePron = ["foin" := "fwɛ̃"], ruleExamples = ["foin" := "fwɛ̃"]}
+  , "pon" := Rule{rulePron = ["pon" := "pɔ̃"], ruleExamples = ["pont" := "pɔ̃"]}
+  , "pore" := Rule{rulePron = ["pore" := "pɔʁ"], ruleExamples = ["polypore" := "pɔ.li.pɔʁ"]}
+  , "porte" := Rule{rulePron = ["porte" := "pɔʁt"], ruleExamples = ["porte" := "pɔʁt"]}
+  , "pro" := Rule{rulePron = ["pro" := "pʁɔ"], ruleExamples = ["promène" := "pʁɔ.mɛn"]}
+  , "pâ" := Rule{rulePron = ["pâ" := "pa"], ruleExamples = ["pâquerette" := "pa.kʁɛt"]} -- ɑ
+  , "pé" := Rule{rulePron = ["pé" := "pe"], ruleExamples = ["péniche" := "pe.niʃ"]}
+  , "que" := Rule{rulePron = ["que" := "kə"], ruleExamples = ["querelle" := "kə.ʁɛl"]}
+  , "querette" := Rule{rulePron = ["querette" := "kʁɛt"], ruleExamples = ["pâquerette" := "pa.kʁɛt"]}
+  , "queuse" := Rule{rulePron = ["queuse" := "køz"], ruleExamples = ["visqueuse" := "vis.køz"]}
+  , "quille" := Rule{rulePron = ["quille" := "kij"], ruleExamples = ["jonquille" := "ʒɔ̃.kij"]}
+  , "quipe" := Rule{rulePron = ["quipe" := "kip"], ruleExamples = ["équipe" := "e.kip"]}
+  , "range" := Rule{rulePron = ["range" := "ʁɑ̃ʒ"], ruleExamples = ["orange" := "ɔ.ʁɑ̃ʒ"]}
+  , "rangent" := Rule{rulePron = ["rangent" := "ʁɑ̃ʒ"], ruleExamples = ["rangent" := "ʁɑ̃ʒ"]}
+  , "ran" <> [LexemeConsonant] := Rule{rulePron = ["range" <> [LexemeConsonant] := "ʁɑ̃"], ruleExamples = ["orangé" := "ɔ.ʁɑ̃.ʒe"]}
+  , "relle" := Rule{rulePron = ["relle" := "ʁɛl"], ruleExamples = ["passerelle" := "pas.ʁɛl"]}
+  , -- , "ra" := Rule{rulePron = ["ra" := "ʁa"], ruleExamples = ["girafe" := "ʒi.ʁaf"]}
+    "rafe" := Rule{rulePron = ["rafe" := "ʁaf"], ruleExamples = ["girafe" := "ʒi.ʁaf"]}
+  , "aigle" := Rule{rulePron = ["aigle" := "ɛgl"], ruleExamples = ["aigle" := "ɛgl"]}
+  , "cor" <> [LexemeConsonant] := Rule{rulePron = ["cor" <> [LexemeConsonant] := "kɔʁ"], ruleExamples = ["corbeau" := "kɔʁ.bo"]}
+  , "ri" := Rule{rulePron = ["ri" := "ʁi"], ruleExamples = ["rideau" := "ʁi.do"]}
+  , "rhi" := Rule{rulePron = ["rhi" := "ʁi"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+  , "no" := Rule{rulePron = ["no" := "nɔ"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+  , "cé" := Rule{rulePron = ["cé" := "se"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+  , "rhinocéros" := Rule{rulePron = ["rhi" := "ʁi", "no" := "nɔ", "cé" := "se", "ros" <> [LexemeMeaning "animal"] := "ʁɔs"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+  , "no" := Rule{rulePron = ["no" := "nɔ"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+  , "cé" := Rule{rulePron = ["cé" := "se"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+  , "rine" := Rule{rulePron = ["rine" := "ʁin"], ruleExamples = ["marine" := "ma.ʁin"]}
+  , "rite" := Rule{rulePron = ["rite" := "ʁit"], ruleExamples = ["marguerite" := "maʁ.gə.ʁit"]}
+  , "ro" := Rule{rulePron = ["ro" := "rɔ"], ruleExamples = ["robot" := "rɔ.bo"]}
+  , "rose" := Rule{rulePron = ["rose" := "rɔz"], ruleExamples = ["rose" := "rɔz"]}
+  , "rou" := Rule{rulePron = ["rou" := "ʁu"], ruleExamples = ["rouler" := "ʁu.le"]}
+  , "rouge" := Rule{rulePron = ["rouge" := "ʁuʒ"], ruleExamples = ["rouge" := "ʁuʒ"]}
+  , "rri" := Rule{rulePron = ["rri" := "ʁi"], ruleExamples = ["nourrit" := "nu.ʁi"]}
+  , "ré" := Rule{rulePron = ["ré" := "ʁe"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+  , "sa" := Rule{rulePron = ["sa" := "sa"], ruleExamples = ["satellite" := "sa.te.lit"]}
+  , begining "singe" := Rule{rulePron = [begining "singe" := "sɛ̃ʒ"], ruleExamples = ["singe" := "sɛ̃ʒ"]}
+  , "buse" := Rule{rulePron = ["buse" := "byz"], ruleExamples = ["buse" := "byz"]}
+  , "bulle" := Rule{rulePron = ["bulle" := "byl"], ruleExamples = ["bulle" := "byl"]}
+  , "tigre" := Rule{rulePron = ["tigre" := "tigʁ"], ruleExamples = ["tigre" := "tigʁ"]}
+  , "tigresse" := Rule{rulePron = ["ti" := "ti", "gresse" := "gʁɛs"], ruleExamples = ["tigresse" := "ti.gʁɛs"]}
+  , "lombe" := Rule{rulePron = ["lombe" := "lɔ̃b"], ruleExamples = ["colombe" := "kɔ.lɔ̃b"]}
+  , "sauve" := Rule{rulePron = ["sauve" := "sov"], ruleExamples = ["sauvetage" := "sov.taʒ"]}
+  , "scine" := Rule{rulePron = ["scine" := "sin"], ruleExamples = ["piscine" := "pi.sin"]}
+  , "short" := Rule{rulePron = ["short" := "ʃɔʁt"], ruleExamples = ["short" := "ʃɔʁt"]}
+  , "ssen" := Rule{rulePron = ["ssen" := "sɑ̃"], ruleExamples = ["pissenlit" := "pi.sɑ̃.li"]}
+  , "cha" := Rule{rulePron = ["cha" := "ʃa"], ruleExamples = ["cha" := "ʃa"]}
+  , "chasse" := Rule{rulePron = ["chasse" := "ʃas"], ruleExamples = ["chasse" := "ʃas"]}
+  , "chassent" := Rule{rulePron = ["chassent" := "ʃas"], ruleExamples = ["chassent" := "ʃas"]}
+  , "sur" := Rule{rulePron = ["sur" := "syʁ"], ruleExamples = ["sur" := "syʁ"]}
+  , "ta" := Rule{rulePron = ["ta" := "ta"], ruleExamples = ["ta" := "ta"]}
+  , "tage" := Rule{rulePron = ["tage" := "taʒ"], ruleExamples = ["sauvetage" := "sov.taʒ"]}
+  , "tan" <> [LexemeConsonant] := Rule{rulePron = ["tan" <> [LexemeConsonant] := "tɑ̃"], ruleExamples = ["tan" := "tɑ̃"]}
+  , "tellite" := Rule{rulePron = ["te" <> [LexemeDoubleConsonant] := "te", "llite" := "lit"], ruleExamples = ["satellite" := "sa.te.lit"]}
+  , "terie" := Rule{rulePron = ["terie" := "tʁi"], ruleExamples = ["poterie" := "pɔ.tʁi"]}
+  , "thème" := Rule{rulePron = ["thème" := "tɛm"], ruleExamples = ["chrysanthème" := "kʁi.zɑ̃.tɛm"]}
+  , "tient" := Rule{rulePron = ["tient" := "tjɛ̃"], ruleExamples = ["tient" := "tjɛ̃"]}
+  , "tier" := Rule{rulePron = ["tier" := "tje"], ruleExamples = ["chalutier" := "ʃa.ly.tje"]}
+  , "tion" := Rule{rulePron = ["tion" := "sjɔ̃"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+  , "ssion" := Rule{rulePron = ["ssion" := "sjɔ̃"], ruleExamples = ["passion" := "pa.sjɔ̃"]}
+  , "tille" := Rule{rulePron = ["tille" := "tij"], ruleExamples = ["myrtille" := "miʁ.tij"]}
+  , "tique" := Rule{rulePron = ["tique" := "tik"], ruleExamples = ["pneumatique" := "pnø.ma.tik"]}
+  , "tir" := Rule{rulePron = ["tir" := "tiʁ"], ruleExamples = ["tire" := "tiʁ"]}
+  , "pêche" := Rule{rulePron = ["pêche" := "pɛʃ"], ruleExamples = ["pêche" := "pɛʃ"]}
+  , "vert" := Rule{rulePron = ["vert" := "vɛʁ"], ruleExamples = ["vert" := "vɛʁ"]}
+  , "myr" := Rule{rulePron = ["myr" := "miʁ"], ruleExamples = ["myrtille" := "miʁ.tij"]}
+  , begining "si" := Rule{rulePron = [begining "si" := "si"], ruleExamples = ["sirop" := "si.ʁo"]}
+  , ending "rop" := Rule{rulePron = ["rop" := "ʁo"], ruleExamples = ["sirop" := "si.ʁo"]}
+  , "tor" := Rule{rulePron = ["tor" := "tɔʁ"], ruleExamples = ["alligator" := "a.li.ga.tɔʁ"]}
+  , "touche" := Rule{rulePron = ["touche" := "tuʃ"], ruleExamples = ["touche" := "tuʃ"]}
+  , "tris" <> [LexemeConsonant] := Rule{rulePron = ["tris" := "tʁis"], ruleExamples = ["ma" := "ma"]}
+  , "truffe" := Rule{rulePron = ["truffe" := "tʁyf"], ruleExamples = ["Truffe" := "tʁyf"]}
+  , "trône" := Rule{rulePron = ["trône" := "tʁon"], ruleExamples = ["trône" := "tʁon"]}
+  , "ttière" := Rule{rulePron = ["ttière" := "tjɛʁ"], ruleExamples = ["gouttière" := "gu.tjɛʁ"]}
+  , "tu" := Rule{rulePron = ["tu" := "ty"], ruleExamples = ["tuba" := "ty.ba"]}
+  , "turne" := Rule{rulePron = ["turne" := "tyʁn"], ruleExamples = ["nocturne" := "nɔk.tyʁn"]}
+  , "té" := Rule{rulePron = ["té" := "te"], ruleExamples = ["gâté" := "ga.te"]}
+  , "vache" := Rule{rulePron = ["vache" := "vaʃ"], ruleExamples = ["vache" := "vaʃ"]}
+  , "vec" := Rule{rulePron = ["vec" := "vɛk"], ruleExamples = ["avec" := "a.vɛk"]}
+  , "vis" := Rule{rulePron = ["vis" := "vis"], ruleExamples = ["visqueuse" := "vis.køz"]}
+  , "vo" := Rule{rulePron = ["vo" := "vɔ"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+  , "von" := Rule{rulePron = ["von" := "vɔ̃"], ruleExamples = ["savon" := "sa.vɔ̃"]}
+  , "sson" := Rule{rulePron = ["sson" := "sɔ̃"], ruleExamples = ["boisson" := "bwa.sɔ̃"]}
+  , "zeuse" := Rule{rulePron = ["zeuse" := "zøz"], ruleExamples = ["gazeuse" := "ga.zøz"]}
+  , "voi" := Rule{rulePron = ["voi" := "vwa"], ruleExamples = ["voilier" := "vwa.lje"]}
+  , "vé" := Rule{rulePron = ["vé" := "ve"], ruleExamples = ["vélo" := "ve.lo"]}
+  , "fête" := Rule{rulePron = ["fête" := "fɛt"], ruleExamples = ["fête" := "fɛt"]}
+  , "fruit" := Rule{rulePron = ["fruit" := "fʁɥi"], ruleExamples = ["fruit" := "fʁɥi"]}
+  , "nane" := Rule{rulePron = ["nane" := "nan"], ruleExamples = ["banane" := "ba.nan"]}
+  , "pomme" := Rule{rulePron = ["pomme" := "pɔm"], ruleExamples = ["pomme" := "pɔm"]}
+  , "ce" := Rule{rulePron = ["ce" := "sə"], ruleExamples = ["cerise" := "sə.ʁiz"]}
+  , "rise" := Rule{rulePron = ["rise" := "ʁiz"], ruleExamples = ["cerise" := "sə.ʁiz"]}
+  , "yo" := Rule{rulePron = ["yo" := "jo"], ruleExamples = ["Yohan" := "jo.an"]}
+  , "é" := Rule{rulePron = ["é" := "e"], ruleExamples = ["équipe" := "e.kip"]}
+  , "dé" := Rule{rulePron = ["dé" := "de"], ruleExamples = ["décorations" := "de.kɔ.ʁa.sjɔ̃"]}
+  , "œ" := Rule{rulePron = ["œ" := "œ"], ruleExamples = ["œillet" := "œ.jɛ"]}
+  , "ti" := Rule{rulePron = ["ti" := "ti"], ruleExamples = ["d'artifices" := "daʁ.ti.fis"]}
+  , "fice" := Rule{rulePron = ["fice" := "fis"], ruleExamples = ["d'artifices" := "daʁ.ti.fis"]}
+  , -- kɑ̃.ta.lu
+    "can" <> [LexemeConsonant] := Rule{rulePron = ["can" <> [LexemeConsonant] := "kɑ̃"], ruleExamples = ["cantaloup" := "kɑ̃.ta.lu"]}
+  , ending "loup" := Rule{rulePron = [ending "loup" := "lu"], ruleExamples = ["cantaloup" := "kɑ̃.ta.lu"]}
+  , begining "d'ar" := Rule{rulePron = [begining "d'ar" := "daʁ"], ruleExamples = ["d'artifices" := "daʁ.ti.fis"]}
+  , "mustang" := Rule{rulePron = ["mus" := "mys", "tang" := "tɑ̃g"], ruleExamples = ["mustang" := "mys.tɑ̃g"]}
+  , "tarte" := Rule{rulePron = ["tarte" := "taʁt"], ruleExamples = ["tarte" := "taʁt"]}
+  , "citron" := Rule{rulePron = ["ci" := "si", "tron" := "tʁɔ̃"], ruleExamples = ["citron" := "si.tʁɔ̃"]}
+  , begining "d'o" := Rule{rulePron = [begining "d'o" := "dɔ"], ruleExamples = ["d'orange" := "dɔ.ʁɑ̃ʒ"]}
+  , begining "d'a" <> [LexemeConsonant] := Rule{rulePron = [begining "d'a" <> [LexemeConsonant] := "da"], ruleExamples = ["d'ananas" := "da.na.nas"]}
+  , word "d'ananas" := Rule{rulePron = ["d'a" <> [LexemeMeaning "fruit"] := "da", "na" <> [LexemeMeaning "fruit"] := "na", "nas" <> [LexemeMeaning "fruit"] := "nas"], ruleExamples = ["d'ananas" := "da.na.nas"]}
+  , [LexemeVowel] <> "san" <> [LexemeConsonant] := Rule{rulePron = [[LexemeVowel] <> "san" <> [LexemeConsonant] := "zɑ̃"], ruleExamples = ["chrysanthème" := "kʁi.zɑ̃.tɛm"]}
+  , [LexemeVowel] <> "sienne" := Rule{rulePron = [[LexemeVowel] <> "sienne" := "zjɛn"], ruleExamples = ["draisienne" := "dʁɛ.zjɛn"]}
+  , [LexemeVowel] <> "ya" := Rule{rulePron = [[LexemeVowel] <> "ya" := "ja"], ruleExamples = ["ya" := "ja"]}
+  , begining "absent" := Rule{rulePron = [begining "ab" := "ab", "sent" := "sɑ̃"], ruleExamples = ["absent" := "ab.sɑ̃", "absents" := "ab.sɑ̃"]}
+  , begining "exer" := Rule{rulePron = ["e" := "ɛ", "x" := "g.z", "er" := "ɛʁ"], ruleExamples = ["exercice" := "ɛg.zɛʁ.sis"]}
+  , begining "ya" := Rule{rulePron = [begining "ya" := "ja"], ruleExamples = ["ya" := "ja"]}
+  , begining "yacht" := Rule{rulePron = ["yacht" := "jɔt"], ruleExamples = ["yacht" := "jɔt"]}
+  , ending "bis" := Rule{rulePron = [ending "bis" := "bis"], ruleExamples = ["ibis" := "i.bis"]}
+  , ending "bo" := Rule{rulePron = [ending "bo" := "bo"], ruleExamples = ["bobo" := "bɔ.bo"]}
+  , ending "bot" := Rule{rulePron = [ending "bot" := "bo"], ruleExamples = ["robot" := "rɔ.bo"]}
+  , ending "cice" := Rule{rulePron = [ending "cice" := ["sis"]], ruleExamples = ["exercice" := "ɛg.zɛʁ.sis"]}
+  , ending "cices" := Rule{rulePron = [ending "cices" := ["sis"]], ruleExamples = ["exercices" := "ɛg.zɛʁ.sis"]}
+  , ending "co" := Rule{rulePron = ["co" := "ko"], ruleExamples = ["cocorico" := "kɔ.kɔ.ʁi.ko"]}
+  , ending "do" := Rule{rulePron = [ending "do" := "do"], ruleExamples = ["judo" := "ʒy.do"]}
+  , ending "e" := Rule{rulePron = [ending "e" := [""]], ruleExamples = ["gelée" := "ʒə.le"]}
+  , ending "han" := Rule{rulePron = [ending "han" := "an"], ruleExamples = ["Yohan" := "jo.an"]}
+  , ending "ler" := Rule{rulePron = [ending "ler" := "le"], ruleExamples = ["rouler" := "ʁu.le"]}
+  , ending "let" := Rule{rulePron = [ending "let" := "lɛ"], ruleExamples = ["gilet" := "ʒi.lɛ"]}
+  , ending "lo" := Rule{rulePron = [ending "lo" := "lo"], ruleExamples = ["vélo" := "ve.lo"]}
+  , ending "min" := Rule{rulePron = [ending "min" := "mɛ̃"], ruleExamples = ["jasmin" := "ʒas.mɛ̃"]}
+  , ending "mmo" := Rule{rulePron = [ending "mmo" := "mo"], ruleExamples = ["immo" := "i.mo"]}
+  , ending "mo" := Rule{rulePron = [ending "mo" := "mo"], ruleExamples = ["homo" := "o.mo"]}
+  , ending "mot" := Rule{rulePron = [ending "mot" := "mo"], ruleExamples = ["mot" := "mo"]}
+  , ending "doux" := Rule{rulePron = [ending "doux" := "du"], ruleExamples = ["doux" := "du"]}
+  , ending "not" := Rule{rulePron = [ending "not" := "no"], ruleExamples = ["canot" := "ka.no"]}
+  , ending "s" := Rule{rulePron = [ending "s" := [""]], ruleExamples = ["bulles" := "byl"]}
+  , ending "ent" := Rule{rulePron = [ending "ent" := [""]], ruleExamples = ["tirent" := "tiʁ"]}
+  , ending "t" := Rule{rulePron = [ending "t" := [""]], ruleExamples = []}
+  , ending "tan" := Rule{rulePron = [ending "tan" := "tɑ̃"], ruleExamples = ["tan" := "tɑ̃"]}
+  , "teau" := Rule{rulePron = ["teau" := "to"], ruleExamples = ["bateau" := "ba.to"]}
+  , "beau" := Rule{rulePron = ["beau" := "bo"], ruleExamples = ["corbeau" := "kɔʁ.bo"]}
+  , "ceau" := Rule{rulePron = ["ceau" := "so"], ruleExamples = ["lionceau" := "ljɔ̃.so"]}
+  , ending "to" := Rule{rulePron = [ending "to" := "to"], ruleExamples = ["moto" := "mɔ.to"]}
+  , ending "ts" := Rule{rulePron = [ending "ts" := [""]], ruleExamples = ["maillots" := "ma.jo"]}
+  , word "dans" := Rule{rulePron = [word "dans" := "dɑ̃"], ruleExamples = ["dans" := "dɑ̃"]}
+  , word "et" := Rule{rulePron = [word "et" := "e"], ruleExamples = ["et" := "e"]}
+  , word "des" := Rule{rulePron = ["des" := "de"], ruleExamples = ["des" := "de"]}
+  , word "les" := Rule{rulePron = [word "les" := "le"], ruleExamples = ["les" := "le"]}
+  , word "sous" := Rule{rulePron = [word "sous" := "su"], ruleExamples = ["sous" := "su"]}
+  , word "un" := Rule{rulePron = [word "un" := "œ̃"], ruleExamples = ["un" := "œ̃"]}
+  , word "une" := Rule{rulePron = [word "une" := "yn"], ruleExamples = ["une" := "yn"]}
+  , "coli" := Rule{rulePron = ["co" := "kɔ", "li" := "li"], ruleExamples = ["Escherichia coli" := "ɛ.ʃe.ʁi.ʃja.kɔ.li"]}
+  ]
+    & Pron.withCapital
+    & fromList
+
+{-
+, word "mer" :=
+    Rule
+      { rulePron =
+          [ "mer" := ["mɛʁ"]
+          ]
+      , ruleExamples = [["mer" & occurence]]
+      }
+, begining "mer" <> [LexemeConsonant] :=
+    Rule
+      { rulePron = [ "mer" := ["mɛʁ"] ]
+      , ruleExamples = [["mer" & occurence, "le"]]
+      }
+, begining "Mer" <> [LexemeConsonant] :=
+    Rule
+      { rulePron = [ "Mer" := ["mɛʁ"] ]
+      , ruleExamples = [["Mer" & occurence, "lin"]]
+      }
+, begining "Mer" <> [LexemeConsonant] :=
+    Rule
+      { rulePron = [ "Mer" := ["mɛʁ"] ]
+      , ruleExamples = [["Mer" & occurence, "lin"]]
+      }
+, "abstrait" :=
+    Rule
+      { rulePron =
+          [ "ab" := ["ap"] -- sic
+          , "strait" := ["stʁɛ"]
+          ]
+      , ruleExamples = [["abstrait" & occurence]]
+      }
+, "ab" :=
+    Rule
+      { rulePron = ["ab" := ["ab"]]
+      , ruleExamples = [["ab" & occurence, "solu"]]
+      }
+, "so" :=
+    Rule
+      { rulePron = ["so" := ["sɔ"]]
+      , ruleExamples = [["ab", "so" & occurence, "lu"]]
+      }
+, "lu" :=
+    Rule
+      { rulePron = ["lu" := ["ly"]]
+      , ruleExamples = [["lu" & occurence], ["abso", "lu" & occurence]]
+      }
+, "a" :=
+    Rule
+      { rulePron = ["a" := ["a"]]
+      , ruleExamples = [["a" & occurence]]
+      }
+, "llume" :=
+    Rule
+      { rulePron = ["llume" := ["lym"]]
+      , ruleExamples = [["a", "llume" & occurence]]
+      }
+, "cice" :=
+    Rule
+      { rulePron =
+          [ "cice" := ["sis"]
+          ]
+      , ruleExamples = [["exer", "cice" & occurence]]
+      }
+-}
diff --git a/tests/Recipes/recipe.css b/tests/Recipes/recipe.css
new file mode 100644 (file)
index 0000000..82e13b1
--- /dev/null
@@ -0,0 +1,3 @@
+text {
+   font-variant-ligatures:none;
+}
index 80da72f747d8cf476e45d600178874e7bd377c19..ea3cfe8ca340ff06e5023a3b240d87cb0b9ec464 100644 (file)
@@ -1,15 +1,41 @@
 {-# OPTIONS_GHC -w -Wall -fno-warn-missing-signatures -fno-warn-unused-imports #-}
 
 import Test.Syd
-import Prelude qualified
 
-import Worksheets.Writing.LatinSpec qualified
+import Language.ChineseSpec qualified
+import Language.EnglishSpec qualified
+import Language.FrenchSpec qualified
+import RecipesSpec qualified
+import Rosetta.ReadingSpec qualified
+import Rosetta.WritingSpec qualified
+import WiktionarySpec qualified
+import Worksheets.Utils.Prelude
 
-main :: Prelude.IO ()
+main :: IO ()
 main = sydTest spec
 
 spec = do
-  describe "Worksheets" do
-    describe "Writing" do
-      describe "LatinSpec" do
-        Worksheets.Writing.LatinSpec.spec
+  RecipesSpec.spec
+
+-- WiktionarySpec.spec
+---- xdescribe "Language" do
+----  describe "Chinese" do
+----    Language.ChineseSpec.spec
+-- withTimeout 3000000 do
+--  withoutRetries do
+--    describe "Language" do
+--      describe "EnglishSpec" do
+--        Language.EnglishSpec.spec
+--      describe "FrenchSpec" do
+--       Language.FrenchSpec.spec
+
+-- withoutRetries do
+--  describe "Rosetta" do
+--    describe "ReadingSpec" do
+--      Rosetta.ReadingSpec.spec
+
+--    --describe "WritingSpec" do
+--  Rosetta.WritingSpec.spec
+
+--    describe "RosettaSpec" do
+--      Worksheets.Writing.RosettaSpec.spec
diff --git a/tests/Worksheets/Writing/LatinSpec.hs b/tests/Worksheets/Writing/LatinSpec.hs
deleted file mode 100644 (file)
index a825453..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-module Worksheets.Writing.LatinSpec where
-
-import Data.Function (($), (&), (.))
-import Data.Functor ((<&>))
-import Data.GenValidity.Map ()
-import Data.GenValidity.Sequence ()
-import Data.GenValidity.Set ()
-import Data.GenValidity.Text ()
-import Data.List qualified as List
-import Data.Text qualified as Text
-import Data.Validity.Map ()
-import Data.Validity.Set ()
-import Data.Validity.Text ()
-import GHC.Stack (HasCallStack)
-import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
-import System.FilePath qualified as Sys
-import Test.Syd
-
-import Worksheets.Writing.Latin qualified
-
-runPart :: Sys.FilePath -> TestDefM outers () ()
-runPart part = do
-  descrPath <- getTestDescriptionPath
-  let dirPath =
-        List.reverse descrPath
-          <&> Text.unpack
-            . Text.replace
-              (Text.pack ".")
-              (Text.singleton pathSeparator)
-          & joinPath
-  let inpPath = "tests" </> dirPath </> part <.> "txt"
-  let outPath = "tests" </> dirPath </> part <.> "html"
-  it part do
-    goldenByteStringBuilderFile outPath $
-      Worksheets.Writing.Latin.worksheet inpPath
-
-spec :: HasCallStack => Spec
-spec = do
-  describe "frozen" do
-    describe "let-it-go" do
-      describe "en" do
-        runPart "part1"
-        runPart "part2"
-      describe "fr" do
-        runPart "part1"
-        runPart "part2"
-        runPart "part3"
-        runPart "part4"
-        runPart "part5"
-        runPart "part6"
-        runPart "part7"
-    describe "in-summer" do
-      describe "en" do
-        runPart "part1"
-        runPart "part2"
-        runPart "part3"
-        runPart "part4"
diff --git a/tests/Worksheets/Writing/LatinSpec/TheHobbit/FarOverTheMistyMountainsCold/full.txt b/tests/Worksheets/Writing/LatinSpec/TheHobbit/FarOverTheMistyMountainsCold/full.txt
new file mode 100644 (file)
index 0000000..794de5b
--- /dev/null
@@ -0,0 +1,129 @@
+Far over the Misty Mountains cold
+To dungeons deep and caverns old
+We must away, ere break of day
+To seek our pale enchanted gold
+
+The dwarves of yore made mighty spells
+While hammers fell like ringing bells
+In places deep, where dark things sleep
+In hollow halls beneath the fells
+
+For ancient king and elvish lord
+There many a gleaming golden hoard
+They shaped and wrought, and light they caught
+To hide in gems on hilt of sword
+
+On silver necklaces they strung
+The flowering stars, on crowns they hung
+The dragon-fire, on twisted wire
+They meshed the light of moon and sun
+
+Far over the Misty Mountains cold
+To dungeons deep and caverns old
+We must away, ere break of day
+To claim our long-forgotten gold
+
+Goblets they carved there for themselves
+And harps of gold, where no man delves
+There lay they long, and many a song
+Was sung unheard by men or elves
+The pines were roaring on the heights
+The wind was moaning in the night
+The fire was red, it flaming spread
+The trees like torches blazed with light
+
+The bells were ringing in the dale
+And men looked up with faces pale
+The dragon's ire, more fierce than fire
+Laid low their towers and houses frail
+
+The mountain smoked beneath the moon
+The dwarves, they heard the tramp of doom
+They fled the hall to dying fall
+Beneath his feet, beneath the moon
+
+Far over the Misty Mountains grim
+To dungeons deep and caverns dim
+We must away, ere break of day
+To win our harps and gold from him!
+
+The wind was on the withered heath
+But in the forest stirred no leaf
+There shadows lay be night or day
+And dark things silent crept beneath
+
+The wind came down from mountains cold
+And like a tide it roared and rolled
+The branches groaned, the forest moaned
+And leaves were laid upon the mould
+The wind went on from West to East;
+All movement in the forest ceased
+But shrill and harsh across the marsh
+Its whistling voices were released
+
+The grasses hissed, their tassels bent
+The reeds were rattling--on it went
+O'er shaken pool under heavens cool
+Where racing clouds were torn and rent
+
+It passed the Lonely Mountain bare
+And swept above the dragon's lair
+There black and dark lay boulders stark
+And flying smoke was in the air
+
+It left the world and took its flight
+Over the wide seas of the night
+The moon set sail upon the gale
+And stars were fanned to leaping light
+
+Under the Mountain dark and tall
+The King has come unto his hall!
+His foe is dead, the Worm of Dread
+And ever so his foes shall fall!
+
+The sword is sharp, the spear is long
+The arrow swift, the Gate is strong
+The heart is bold that looks on gold
+The dwarves no more shall suffer wrong
+The dwarves of yore made mighty spells
+While hammers fell like ringing bells
+In places deep, where dark things sleep
+In hollow halls beneath the fells
+
+On silver necklaces they strung
+The light of stars, on crowns they hung
+The dragon-fire, from twisted wire
+The melody of harps they wrung
+
+The mountain throne once more is freed!
+O! Wandering folk, the summons heed!
+Come haste! Come haste! Across the waste!
+The king of friend and kin has need
+
+Now call we over the mountains cold
+'Come back unto the caverns old!
+Here at the gates the king awaits
+His hands are rich with gems and gold
+
+The king has come unto his hall
+Under the Mountain dark and tall
+The Wyrm of Dread is slain and dead
+And ever so our foes shall fall
+
+Farewell we call to hearth and hall!
+Though wind may blow and rain may fall
+We must away, ere break of day
+Far over the wood and mountain tall
+
+To Rivendell, where Elves yet dwell
+In glades beneath the misty fell
+Through moor and waste we ride in haste
+And whither then we cannot tell
+
+With foes ahead, behind us dread
+Beneath the sky shall be our bed
+Until at last our toil be passed
+Our journey done, our errand sped
+
+We must away! We must away!
+We ride before the break of day!
diff --git a/tests/Worksheets/Writing/LatinSpec/TheHobbit/FarOverTheMistyMountainsCold/part1.txt b/tests/Worksheets/Writing/LatinSpec/TheHobbit/FarOverTheMistyMountainsCold/part1.txt
new file mode 100644 (file)
index 0000000..88132e0
--- /dev/null
@@ -0,0 +1,4 @@
+Far over the Misty Mountains cold
+To dungeons deep and caverns old
+We must away, ere break of day
+To seek our pale enchanted gold
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part1.html b/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part1.html
deleted file mode 100644 (file)
index 84e0baa..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part1</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">B</div><div class="cell">e</div><div class="cell">e</div><div class="cell">s</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">u</div><div class="cell">z</div><div class="cell">z</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">k</div><div class="cell">i</div><div class="cell">d</div><div class="cell">s</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">l</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell">e</div><div class="cell">l</div><div class="cell">i</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">u</div><div class="cell">z</div><div class="cell">z</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell">e</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">e</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">r</div><div class="cell">i</div><div class="cell">n</div><div class="cell">k</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div></div>
-<div class="row"><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">u</div><div class="cell">p</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">g</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">u</div><div class="cell">r</div><div class="cell">n</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">r</div><div class="cell">o</div><div class="cell">b</div><div class="cell">a</div><div class="cell">b</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">t</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">r</div><div class="cell">g</div><div class="cell">e</div><div class="cell">o</div><div class="cell">u</div><div class="cell">s</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">n</div><div class="cell">e</div><div class="cell">d</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part2.html b/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part2.html
deleted file mode 100644 (file)
index 180b9f9..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part2</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">I</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">i</div><div class="cell">n</div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">r</div><div class="cell">e</div><div class="cell">e</div><div class="cell">z</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">b</div><div class="cell">l</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">w</div><div class="cell">a</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">i</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">p</div><div class="cell">p</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">l</div><div class="cell">i</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">a</div><div class="cell">t</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">a</div><div class="cell">r</div><div class="cell">m</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">a</div><div class="cell">n</div><div class="cell">&#39;</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">a</div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">u</div><div class="cell">d</div><div class="cell">d</div><div class="cell">i</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">i</div><div class="cell">n</div><div class="cell">k</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">u</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">m</div><div class="cell">a</div><div class="cell">g</div><div class="cell">i</div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">u</div><div class="cell">c</div><div class="cell">h</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">o</div><div class="cell">l</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
index eb8be58a57a73e05fe430fae2253bbb56df4278f..e8f24797bb24bc5139f5b02542b3539b154c0d65 100644 (file)
@@ -4,5 +4,6 @@ And find out what happens
 to solid water when it gets warm
 And I can't wait to see
 what my buddies all think of me
-Just imagine how much cooler I'll be
+Just imagine how much cooler
+I'll be
 In summer
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part3.html b/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part3.html
deleted file mode 100644 (file)
index eb674df..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part3</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">D</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">o</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">o</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">o</div><div class="cell">t</div><div class="cell">h</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">r</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">u</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">a</div><div class="cell">k</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">R</div><div class="cell">a</div><div class="cell">t</div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">a</div><div class="cell">t</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">o</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">W</div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell">e</div><div class="cell">r</div><div class="cell">&#39;</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">o</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">i</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">a</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">u</div><div class="cell">d</div><div class="cell">d</div><div class="cell">l</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">B</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">p</div><div class="cell">p</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell">m</div><div class="cell">a</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part4.html b/tests/Worksheets/Writing/LatinSpec/frozen/in-summer/en/part4.html
deleted file mode 100644 (file)
index e08987e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part4</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">W</div><div class="cell">h</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">f</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">o</div><div class="cell">u</div><div class="cell">g</div><div class="cell">h</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">k</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">n</div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">r</div><div class="cell">e</div><div class="cell">a</div><div class="cell">m</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">O</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">e</div><div class="cell">l</div><div class="cell">a</div><div class="cell">x</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">n</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">u</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell">t</div><div class="cell">t</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">f</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">e</div><div class="cell">a</div><div class="cell">m</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">O</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">k</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">i</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">l</div><div class="cell">u</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">y</div><div class="cell">o</div><div class="cell">u</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">u</div><div class="cell">y</div><div class="cell">s</div><div class="cell">&#39;</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">W</div><div class="cell">h</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">i</div><div class="cell">n</div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">r</div><div class="cell">o</div><div class="cell">z</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/en/part1.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/en/part1.html
deleted file mode 100644 (file)
index 5c6b768..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part1</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">l</div><div class="cell">o</div><div class="cell">w</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">i</div><div class="cell">t</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">u</div><div class="cell">n</div><div class="cell">t</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">n</div><div class="cell">i</div><div class="cell">g</div><div class="cell">h</div><div class="cell">t</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">N</div><div class="cell">o</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">o</div><div class="cell">o</div><div class="cell">t</div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">e</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell cell-space"> </div><div class="cell">k</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell">d</div><div class="cell">o</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">s</div><div class="cell">o</div><div class="cell">l</div><div class="cell">a</div><div class="cell">t</div><div class="cell">i</div><div class="cell">o</div><div class="cell">n</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">o</div><div class="cell">o</div><div class="cell">k</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">k</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">&#39;</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">Q</div><div class="cell">u</div><div class="cell">e</div><div class="cell">e</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">i</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">w</div><div class="cell">l</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">l</div><div class="cell">i</div><div class="cell">k</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">w</div><div class="cell">i</div><div class="cell">r</div><div class="cell">l</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">i</div><div class="cell">d</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">C</div><div class="cell">o</div><div class="cell">u</div><div class="cell">l</div><div class="cell">d</div><div class="cell">n</div><div class="cell">&#39;</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">k</div><div class="cell">e</div><div class="cell">e</div><div class="cell">p</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">H</div><div class="cell">e</div><div class="cell">a</div><div class="cell">v</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">k</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">r</div><div class="cell">i</div><div class="cell">e</div><div class="cell">d</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/en/part2.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/en/part2.html
deleted file mode 100644 (file)
index 038e835..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part2</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">C</div><div class="cell">a</div><div class="cell">n</div><div class="cell">&#39;</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">c</div><div class="cell">k</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">y</div><div class="cell">m</div><div class="cell">o</div><div class="cell">r</div><div class="cell">e</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">u</div><div class="cell">r</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">w</div><div class="cell">a</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">l</div><div class="cell">a</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">o</div><div class="cell">r</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">n</div><div class="cell">&#39;</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">a</div><div class="cell">r</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">y</div><div class="cell">&#39;</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">a</div><div class="cell">y</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">a</div><div class="cell">g</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">o</div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">r</div><div class="cell">e</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">a</div><div class="cell">n</div><div class="cell">y</div><div class="cell">w</div><div class="cell">a</div><div class="cell">y</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part1.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part1.html
deleted file mode 100644 (file)
index b6f6644..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part1</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">’</div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">t</div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">u</div><div class="cell">c</div><div class="cell">e</div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">u</div><div class="cell">i</div><div class="cell">t</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell">i</div><div class="cell">g</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">e</div><div class="cell">i</div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">U</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">o</div><div class="cell">y</div><div class="cell">a</div><div class="cell">u</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">l</div><div class="cell">i</div><div class="cell">t</div><div class="cell">u</div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">:</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">m</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">a</div><div class="cell">c</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">j</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">q</div><div class="cell">u</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">u</div><div class="cell">r</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">i</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">m</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">r</div><div class="cell">o</div><div class="cell">p</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">o</div><div class="cell">r</div><div class="cell">t</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">j</div><div class="cell">’</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">u</div><div class="cell">t</div><div class="cell">t</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part2.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part2.html
deleted file mode 100644 (file)
index 71ff112..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part2</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">C</div><div class="cell">a</div><div class="cell">c</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">r</div><div class="cell">s</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">’</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">r</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">F</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">t</div><div class="cell">t</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">i</div><div class="cell">o</div><div class="cell">n</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">c</div><div class="cell">r</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">r</div><div class="cell">v</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">a</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">a</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">’</div><div class="cell">é</div><div class="cell">t</div><div class="cell">a</div><div class="cell">t</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">’</div><div class="cell">â</div><div class="cell">m</div><div class="cell">e</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">s</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">i</div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part3.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part3.html
deleted file mode 100644 (file)
index eb78690..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part3</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">D</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">i</div><div class="cell">r</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">a</div><div class="cell">m</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">D</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">C</div><div class="cell">’</div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">c</div><div class="cell">i</div><div class="cell">d</div><div class="cell">é</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">’</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">’</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div><div class="cell">s</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell">f</div><div class="cell">a</div><div class="cell">n</div><div class="cell">c</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">é</div><div class="cell">t</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">e</div><div class="cell">r</div><div class="cell">d</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">r</div><div class="cell">o</div><div class="cell">i</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">i</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">b</div><div class="cell">e</div><div class="cell">r</div><div class="cell">t</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part4.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part4.html
deleted file mode 100644 (file)
index bbf850e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part4</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">Q</div><div class="cell">u</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">e</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">u</div><div class="cell">t</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">m</div><div class="cell">b</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">i</div><div class="cell">g</div><div class="cell">n</div><div class="cell">i</div><div class="cell">f</div><div class="cell">i</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">r</div><div class="cell">i</div><div class="cell">s</div><div class="cell">t</div><div class="cell">e</div><div class="cell">s</div><div class="cell">s</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">a</div><div class="cell">n</div><div class="cell">g</div><div class="cell">o</div><div class="cell">i</div><div class="cell">s</div><div class="cell">s</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">m</div><div class="cell">’</div><div class="cell">o</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">q</div><div class="cell">u</div><div class="cell">i</div><div class="cell">t</div><div class="cell">t</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">p</div><div class="cell">u</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">o</div><div class="cell">n</div><div class="cell">g</div><div class="cell">t</div><div class="cell">e</div><div class="cell">m</div><div class="cell">p</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">e</div><div class="cell">u</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">q</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">u</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">a</div><div class="cell">i</div><div class="cell">r</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">D</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">e</div><div class="cell">t</div><div class="cell">t</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">a</div><div class="cell">g</div><div class="cell">i</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">e</div><div class="cell">i</div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell">s</div><div class="cell">t</div><div class="cell">è</div><div class="cell">r</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">a</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">i</div><div class="cell">s</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">i</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part5.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part5.html
deleted file mode 100644 (file)
index c12e22b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part5</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">é</div><div class="cell">t</div><div class="cell">o</div><div class="cell">i</div><div class="cell">l</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">e</div><div class="cell">n</div><div class="cell">d</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">r</div><div class="cell">a</div><div class="cell">s</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">M</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">l</div><div class="cell">à</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">u</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">à</div><div class="cell">.</div><div class="cell cell-space"> </div><div class="cell">P</div><div class="cell">e</div><div class="cell">r</div><div class="cell">d</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part6.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part6.html
deleted file mode 100644 (file)
index 510a692..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part6</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">M</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">u</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">i</div><div class="cell">e</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell">v</div><div class="cell">a</div><div class="cell">h</div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">e</div><div class="cell">s</div><div class="cell">p</div><div class="cell">a</div><div class="cell">c</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">M</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">â</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">’</div><div class="cell">e</div><div class="cell">x</div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">s</div><div class="cell">s</div><div class="cell">i</div><div class="cell">n</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">c</div><div class="cell">u</div><div class="cell">l</div><div class="cell">p</div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">l</div><div class="cell">a</div><div class="cell">c</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">E</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">é</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">l</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">r</div><div class="cell">i</div><div class="cell">s</div><div class="cell">t</div><div class="cell">a</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">l</div><div class="cell">é</div><div class="cell">e</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">e</div><div class="cell">v</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell">d</div><div class="cell">r</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">s</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">s</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
diff --git a/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part7.html b/tests/Worksheets/Writing/LatinSpec/frozen/let-it-go/fr/part7.html
deleted file mode 100644 (file)
index b22e449..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><title>part7</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">d</div><div class="cell">é</div><div class="cell">s</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">’</div><div class="cell">a</div><div class="cell">r</div><div class="cell">r</div><div class="cell">ê</div><div class="cell">t</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">n</div><div class="cell">c</div><div class="cell">e</div><div class="cell">s</div><div class="cell">s</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">r</div><div class="cell">f</div><div class="cell">a</div><div class="cell">i</div><div class="cell">t</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">ê</div><div class="cell">v</div><div class="cell">é</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">e</div><div class="cell">r</div><div class="cell">d</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">r</div><div class="cell">o</div><div class="cell">i</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">i</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">b</div><div class="cell">e</div><div class="cell">r</div><div class="cell">t</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
index f5883ea6036647ecacdb0ec74f672250cc8c626e..e99f3068aa9c258cc33f24c7ff6bf2856e7150a3 100644 (file)
@@ -13,7 +13,7 @@ copyright:       Julien Moutinho <julm+worksheets@sourcephile.fr>
 -- PVP:             +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version:         0.0.0.20250503
+version:         0.0.0.20250617
 stability:       experimental
 category:        Worksheets
 synopsis:        Worksheets
@@ -22,7 +22,7 @@ build-type:      Simple
 tested-with:     GHC ==9.6.6
 extra-doc-files:
 extra-tmp-files:
-data-dir:        style
+data-dir:        data
 
 source-repository head
   type:     git
@@ -36,6 +36,7 @@ source-repository head
 common haskell
   default-language:   Haskell2010
   default-extensions:
+    BangPatterns
     BlockArguments
     DataKinds
     DefaultSignatures
@@ -73,29 +74,120 @@ common haskell
 common library-deps
   import:
   build-depends:
-    , base           >=4.10 && <5
+    , aeson               >=2.1.2.1
+    , anki
+    , array
+    , attoparsec
+    , attoparsec-aeson
+    , base                >=4.10    && <5
     , blaze-builder
     , blaze-html
     , blaze-markup
     , bytestring
+    , cassava
+    , containers
+    , data-default
+    , direct-sqlite
     , filepath
+    , generic-data
+    , ipa
+    , ListZipper
+    , megaparsec
+    , parser-combinators
     , pretty-simple
-    , text           >=2.1
+    , radix-tree
+    , safe-decimal
+    , scientific
+    , split
+    , sqlite-simple
+    , text                >=2.1
+    , text-short
     , transformers
+    , validity
+    , vector
+
+-- , large-records
+-- , large-generics
+-- , symantic-base
+--, pandoc-types
+--, pandoc
 
 library
   import:          haskell, library-deps
   hs-source-dirs:  src
   autogen-modules: Paths_worksheets
-  exposed-modules: Worksheets.Writing.Latin
-  other-modules:
-    Paths_worksheets
-    Prelude
+  exposed-modules:
+    Graph.DOT
+    Language
+    Language.Chinese
+    Language.Chinese.Pinyin
+    Language.English
+    Language.French
+    Language.Pronunciation
+    Rosetta.Reading
+    Rosetta.Writing
+    Wiktionary
+    Worksheets.Utils.Char
+    Worksheets.Utils.Generics
+    Worksheets.Utils.HTML
+    Worksheets.Utils.IPA
+    Worksheets.Utils.JSON
+    Worksheets.Utils.Paper
+    Worksheets.Utils.Prelude
+    Worksheets.Utils.Probability
+    Worksheets.Utils.SQL
+    Worksheets.Utils.TypeDefault
 
+  other-modules:   Paths_worksheets
   build-depends:   base >=4.10 && <5
 
+common anki-deps
+  import:
+  build-depends:
+    , aeson             >=2.1.2.1
+    , array
+    , attoparsec
+    , attoparsec-aeson
+    , base              >=4.10    && <5
+    , bytestring
+    , containers
+    , direct-sqlite
+    , directory
+    , filepath
+    , ipa
+    , pretty-simple
+    , python-pickle
+    , scientific
+    , sqlite-simple
+    , text              >=2.1
+    , text-short
+    , time
+    , transformers
+
+library anki
+  import:          haskell, anki-deps
+  hs-source-dirs:  libs/anki/src
+  exposed-modules:
+    Anki
+    Anki.Fields
+    Anki.Tables.Cards
+    Anki.Tables.Collections
+    Anki.Tables.Configs
+    Anki.Tables.DeckConfigs
+    Anki.Tables.Decks
+    Anki.Tables.Fields
+    Anki.Tables.Graves
+    Anki.Tables.Notes
+    Anki.Tables.Notetypes
+    Anki.Tables.Profiles
+    Anki.Tables.ReviewLogs
+    Anki.Tables.Tags
+    Anki.Tables.Templates
+    Anki.Utils.Prelude
+    Anki.Utils.SQL
+
 test-suite worksheets-tests
-  import:          haskell, library-deps
+  import:          haskell, library-deps, anki-deps
   type:            exitcode-stdio-1.0
   hs-source-dirs:  tests
   main-is:         Spec.hs
@@ -106,8 +198,17 @@ test-suite worksheets-tests
   ghc-options:     -threaded -rtsopts -with-rtsopts=-N
   autogen-modules: Paths_worksheets
   other-modules:
+    Language.ChineseSpec
+    Language.EnglishSpec
+    Language.FrenchSpec
     Paths_worksheets
-    Worksheets.Writing.LatinSpec
+    Recipes
+    RecipesSpec
+    Rosetta.ReadingSpec
+    Rosetta.WritingSpec
+    Utils.Pronunciation
+    Utils.Tests
+    WiktionarySpec
 
   build-depends:
     , filepath
@@ -116,6 +217,7 @@ test-suite worksheets-tests
     , genvalidity-sydtest
     , genvalidity-text
     , genvalidity-time
+    , ipa
     , pretty-simple
     , relude
     , sydtest                 >=0.19