From 2872dca785533756f61e319cabbf05d96c1e43ae Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 18 Aug 2020 09:35:36 +0200 Subject: [PATCH 001/127] first --- .gitignore | 2 ++ Makefile | 25 +++++++++++++++++++++++++ data/template.html | 39 +++++++++++++++++++++++++++++++++++++++ pages/index.md | 11 +++++++++++ 4 files changed, 77 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 data/template.html create mode 100644 pages/index.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d4f4b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +_build +_tmp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7aa5ac0 --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +TMPDIR ?= _tmp +BUILDDIR ?= _build +PAGESDIR ?= pages +DATADIR ?= data +TEMPLATE ?= $(DATADIR)/template.html + +PAGES != find $(PAGESDIR) -name '*.md' +OUTPUTPAGES = $(patsubst $(PAGESDIR)/%.md,$(BUILDDIR)/%.html,$(PAGES)) + + +.PHONY: all +all: build + +.PHONY: build +build: $(OUTPUTPAGES) + +$(BUILDDIR)/%.html: $(PAGESDIR)/%.md $(TEMPLATE) + mkdir -p $(dir $@) + pandoc -s --toc --template $(TEMPLATE) -o $@ $< + +.PHONY: clean distclean +clean: + rm -rf $(BUILDDIR) +distclean: clean + rm -rf $(TMPDIR) diff --git a/data/template.html b/data/template.html new file mode 100644 index 0000000..cd59485 --- /dev/null +++ b/data/template.html @@ -0,0 +1,39 @@ + + + + +$for(css)$ + +$endfor$ + +$for(header-includes)$ +$header-includes$ +$endfor$ + +$pagetitle$ + +$for(include-before)$ +$include-before$ +$endfor$ + +$if(title)$ +
+

$title$

+ $if(subtitle)$ +

$subtitle$

+ $endif$ +
+ +$endif$ +$if(toc)$ + +$endif$ + +$body$ + +$for(include-after)$ +$include-after$ +$endfor$ diff --git a/pages/index.md b/pages/index.md new file mode 100644 index 0000000..8bc2c2f --- /dev/null +++ b/pages/index.md @@ -0,0 +1,11 @@ +--- +title: hello +... + +# bleep + +yes + +# bloop + +yes!!! From 22b44116413aecf1619f8f0a78026b62e43642cc Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 18 Aug 2020 10:33:25 +0200 Subject: [PATCH 002/127] add some style stuff --- .gitattributes | 5 + Makefile | 10 +- data/template.html | 3 + style/counters.css | 62 +++++++++ style/fonts/andika/Andika-R.woff | 3 + style/fonts/andika/andika.css | 4 + style/fonts/muller/050.eot | 3 + style/fonts/muller/050.svg | 3 + style/fonts/muller/050.ttf | 3 + style/fonts/muller/050.woff | 3 + style/fonts/muller/050.woff2 | 3 + style/fonts/muller/050i.eot | 3 + style/fonts/muller/050i.svg | 3 + style/fonts/muller/050i.ttf | 3 + style/fonts/muller/050i.woff | 3 + style/fonts/muller/050i.woff2 | 3 + style/fonts/muller/100.eot | 3 + style/fonts/muller/100.svg | 3 + style/fonts/muller/100.ttf | 3 + style/fonts/muller/100.woff | 3 + style/fonts/muller/100.woff2 | 3 + style/fonts/muller/100i.eot | 3 + style/fonts/muller/100i.svg | 3 + style/fonts/muller/100i.ttf | 3 + style/fonts/muller/100i.woff | 3 + style/fonts/muller/100i.woff2 | 3 + style/fonts/muller/200.eot | 3 + style/fonts/muller/200.svg | 3 + style/fonts/muller/200.ttf | 3 + style/fonts/muller/200.woff | 3 + style/fonts/muller/200.woff2 | 3 + style/fonts/muller/200i.eot | 3 + style/fonts/muller/200i.svg | 3 + style/fonts/muller/200i.ttf | 3 + style/fonts/muller/200i.woff | 3 + style/fonts/muller/200i.woff2 | 3 + style/fonts/muller/300.eot | 3 + style/fonts/muller/300.svg | 3 + style/fonts/muller/300.ttf | 3 + style/fonts/muller/300.woff | 3 + style/fonts/muller/300.woff2 | 3 + style/fonts/muller/300i.eot | 3 + style/fonts/muller/300i.svg | 3 + style/fonts/muller/300i.ttf | 3 + style/fonts/muller/300i.woff | 3 + style/fonts/muller/300i.woff2 | 3 + style/fonts/muller/400.eot | 3 + style/fonts/muller/400.svg | 3 + style/fonts/muller/400.ttf | 3 + style/fonts/muller/400.woff | 3 + style/fonts/muller/400.woff2 | 3 + style/fonts/muller/400i.eot | 3 + style/fonts/muller/400i.svg | 3 + style/fonts/muller/400i.ttf | 3 + style/fonts/muller/400i.woff | 3 + style/fonts/muller/400i.woff2 | 3 + style/fonts/muller/500.eot | 3 + style/fonts/muller/500.svg | 3 + style/fonts/muller/500.ttf | 3 + style/fonts/muller/500.woff | 3 + style/fonts/muller/500.woff2 | 3 + style/fonts/muller/500i.eot | 3 + style/fonts/muller/500i.svg | 3 + style/fonts/muller/500i.ttf | 3 + style/fonts/muller/500i.woff | 3 + style/fonts/muller/500i.woff2 | 3 + style/fonts/muller/600.eot | 3 + style/fonts/muller/600.svg | 3 + style/fonts/muller/600.ttf | 3 + style/fonts/muller/600.woff | 3 + style/fonts/muller/600.woff2 | 3 + style/fonts/muller/600i.eot | 3 + style/fonts/muller/600i.svg | 3 + style/fonts/muller/600i.ttf | 3 + style/fonts/muller/600i.woff | 3 + style/fonts/muller/600i.woff2 | 3 + style/fonts/muller/700.eot | 3 + style/fonts/muller/700.svg | 3 + style/fonts/muller/700.ttf | 3 + style/fonts/muller/700.woff | 3 + style/fonts/muller/700.woff2 | 3 + style/fonts/muller/700i.eot | 3 + style/fonts/muller/700i.svg | 3 + style/fonts/muller/700i.ttf | 3 + style/fonts/muller/700i.woff | 3 + style/fonts/muller/700i.woff2 | 3 + style/fonts/muller/800.eot | 3 + style/fonts/muller/800.svg | 3 + style/fonts/muller/800.ttf | 3 + style/fonts/muller/800.woff | 3 + style/fonts/muller/800.woff2 | 3 + style/fonts/muller/800i.eot | 3 + style/fonts/muller/800i.svg | 3 + style/fonts/muller/800i.ttf | 3 + style/fonts/muller/800i.woff | 3 + style/fonts/muller/800i.woff2 | 3 + style/fonts/muller/900.eot | 3 + style/fonts/muller/900.svg | 3 + style/fonts/muller/900.ttf | 3 + style/fonts/muller/900.woff | 3 + style/fonts/muller/900.woff2 | 3 + style/fonts/muller/900i.eot | 3 + style/fonts/muller/900i.svg | 3 + style/fonts/muller/900i.ttf | 3 + style/fonts/muller/900i.woff | 3 + style/fonts/muller/900i.woff2 | 3 + style/fonts/muller/muller.css | 229 +++++++++++++++++++++++++++++++ style/page.css | 84 ++++++++++++ style/paper.png | Bin 0 -> 85055 bytes 109 files changed, 699 insertions(+), 1 deletion(-) create mode 100644 .gitattributes create mode 100644 style/counters.css create mode 100755 style/fonts/andika/Andika-R.woff create mode 100644 style/fonts/andika/andika.css create mode 100755 style/fonts/muller/050.eot create mode 100755 style/fonts/muller/050.svg create mode 100755 style/fonts/muller/050.ttf create mode 100755 style/fonts/muller/050.woff create mode 100755 style/fonts/muller/050.woff2 create mode 100755 style/fonts/muller/050i.eot create mode 100755 style/fonts/muller/050i.svg create mode 100755 style/fonts/muller/050i.ttf create mode 100755 style/fonts/muller/050i.woff create mode 100755 style/fonts/muller/050i.woff2 create mode 100755 style/fonts/muller/100.eot create mode 100755 style/fonts/muller/100.svg create mode 100755 style/fonts/muller/100.ttf create mode 100755 style/fonts/muller/100.woff create mode 100755 style/fonts/muller/100.woff2 create mode 100755 style/fonts/muller/100i.eot create mode 100755 style/fonts/muller/100i.svg create mode 100755 style/fonts/muller/100i.ttf create mode 100755 style/fonts/muller/100i.woff create mode 100755 style/fonts/muller/100i.woff2 create mode 100755 style/fonts/muller/200.eot create mode 100755 style/fonts/muller/200.svg create mode 100755 style/fonts/muller/200.ttf create mode 100755 style/fonts/muller/200.woff create mode 100755 style/fonts/muller/200.woff2 create mode 100755 style/fonts/muller/200i.eot create mode 100755 style/fonts/muller/200i.svg create mode 100755 style/fonts/muller/200i.ttf create mode 100755 style/fonts/muller/200i.woff create mode 100755 style/fonts/muller/200i.woff2 create mode 100755 style/fonts/muller/300.eot create mode 100755 style/fonts/muller/300.svg create mode 100755 style/fonts/muller/300.ttf create mode 100755 style/fonts/muller/300.woff create mode 100755 style/fonts/muller/300.woff2 create mode 100755 style/fonts/muller/300i.eot create mode 100755 style/fonts/muller/300i.svg create mode 100755 style/fonts/muller/300i.ttf create mode 100755 style/fonts/muller/300i.woff create mode 100755 style/fonts/muller/300i.woff2 create mode 100755 style/fonts/muller/400.eot create mode 100755 style/fonts/muller/400.svg create mode 100755 style/fonts/muller/400.ttf create mode 100755 style/fonts/muller/400.woff create mode 100755 style/fonts/muller/400.woff2 create mode 100755 style/fonts/muller/400i.eot create mode 100755 style/fonts/muller/400i.svg create mode 100755 style/fonts/muller/400i.ttf create mode 100755 style/fonts/muller/400i.woff create mode 100755 style/fonts/muller/400i.woff2 create mode 100755 style/fonts/muller/500.eot create mode 100755 style/fonts/muller/500.svg create mode 100755 style/fonts/muller/500.ttf create mode 100755 style/fonts/muller/500.woff create mode 100755 style/fonts/muller/500.woff2 create mode 100755 style/fonts/muller/500i.eot create mode 100755 style/fonts/muller/500i.svg create mode 100755 style/fonts/muller/500i.ttf create mode 100755 style/fonts/muller/500i.woff create mode 100755 style/fonts/muller/500i.woff2 create mode 100755 style/fonts/muller/600.eot create mode 100755 style/fonts/muller/600.svg create mode 100755 style/fonts/muller/600.ttf create mode 100755 style/fonts/muller/600.woff create mode 100755 style/fonts/muller/600.woff2 create mode 100755 style/fonts/muller/600i.eot create mode 100755 style/fonts/muller/600i.svg create mode 100755 style/fonts/muller/600i.ttf create mode 100755 style/fonts/muller/600i.woff create mode 100755 style/fonts/muller/600i.woff2 create mode 100755 style/fonts/muller/700.eot create mode 100755 style/fonts/muller/700.svg create mode 100755 style/fonts/muller/700.ttf create mode 100755 style/fonts/muller/700.woff create mode 100755 style/fonts/muller/700.woff2 create mode 100755 style/fonts/muller/700i.eot create mode 100755 style/fonts/muller/700i.svg create mode 100755 style/fonts/muller/700i.ttf create mode 100755 style/fonts/muller/700i.woff create mode 100755 style/fonts/muller/700i.woff2 create mode 100755 style/fonts/muller/800.eot create mode 100755 style/fonts/muller/800.svg create mode 100755 style/fonts/muller/800.ttf create mode 100755 style/fonts/muller/800.woff create mode 100755 style/fonts/muller/800.woff2 create mode 100755 style/fonts/muller/800i.eot create mode 100755 style/fonts/muller/800i.svg create mode 100755 style/fonts/muller/800i.ttf create mode 100755 style/fonts/muller/800i.woff create mode 100755 style/fonts/muller/800i.woff2 create mode 100755 style/fonts/muller/900.eot create mode 100755 style/fonts/muller/900.svg create mode 100755 style/fonts/muller/900.ttf create mode 100755 style/fonts/muller/900.woff create mode 100755 style/fonts/muller/900.woff2 create mode 100755 style/fonts/muller/900i.eot create mode 100755 style/fonts/muller/900i.svg create mode 100755 style/fonts/muller/900i.ttf create mode 100755 style/fonts/muller/900i.woff create mode 100755 style/fonts/muller/900i.woff2 create mode 100644 style/fonts/muller/muller.css create mode 100644 style/page.css create mode 100644 style/paper.png diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a06887d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +*.eot filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.woff filter=lfs diff=lfs merge=lfs -text +*.woff2 filter=lfs diff=lfs merge=lfs -text +style/fonts/**/*.svg filter=lfs diff=lfs merge=lfs -text diff --git a/Makefile b/Makefile index 7aa5ac0..91766c3 100644 --- a/Makefile +++ b/Makefile @@ -7,17 +7,25 @@ TEMPLATE ?= $(DATADIR)/template.html PAGES != find $(PAGESDIR) -name '*.md' OUTPUTPAGES = $(patsubst $(PAGESDIR)/%.md,$(BUILDDIR)/%.html,$(PAGES)) +STYLE != find style -type f +OUTPUTSTYLE = $(patsubst %,$(BUILDDIR)/%,$(STYLE)) + +OUTPUT = $(OUTPUTPAGES) $(OUTPUTSTYLE) .PHONY: all all: build .PHONY: build -build: $(OUTPUTPAGES) +build: $(OUTPUT) $(BUILDDIR)/%.html: $(PAGESDIR)/%.md $(TEMPLATE) mkdir -p $(dir $@) pandoc -s --toc --template $(TEMPLATE) -o $@ $< +$(BUILDDIR)/%: % + mkdir -p $(dir $@) + cp $< $@ + .PHONY: clean distclean clean: rm -rf $(BUILDDIR) diff --git a/data/template.html b/data/template.html index cd59485..de793c1 100644 --- a/data/template.html +++ b/data/template.html @@ -2,6 +2,7 @@ + $for(css)$ $endfor$ @@ -32,7 +33,9 @@ $if(toc)$ $endif$ +
$body$ +
$for(include-after)$ $include-after$ diff --git a/style/counters.css b/style/counters.css new file mode 100644 index 0000000..f473ce3 --- /dev/null +++ b/style/counters.css @@ -0,0 +1,62 @@ +:root { + --section-prefix: '§ '; +} + +main h1 { + counter-increment: h1; + counter-reset: h2 h3 h4 h5 h6; +} + +main h1::before { + content: var(--section-prefix) counter(h1); +} + +main h2 { + counter-increment: h2; + counter-reset: h3 h4 h5 h6; +} + +main h2::before { + content: var(--section-prefix) counter(h1) '.' counter(h2); +} + +main h3 { + counter-increment: h3; + counter-reset: h4 h5 h6; +} + +main h3::before { + content: var(--section-prefix) counter(h1) '.' counter(h2) '.' counter(h3); +} + +main h4 { + counter-increment: h4; + counter-reset: h5 h6; +} + +main h4::before { + content: var(--section-prefix) + counter(h1) '.' counter(h2) '.' counter(h3) '.' counter(h4); +} + +main h5 { + counter-increment: h5; + counter-reset: h6; +} + +main h5::before { + content: var(--section-prefix) + counter(h1) '.' counter(h2) '.' counter(h3) '.' counter(h4) '.' + counter(h5); +} + +main h6 { + counter-increment: h6; +} + +main h6::before { + content: var(--section-prefix) + counter(h1) '.' counter(h2) '.' counter(h3) '.' counter(h4) '.' + counter(h5) '.' counter(h6); +} + diff --git a/style/fonts/andika/Andika-R.woff b/style/fonts/andika/Andika-R.woff new file mode 100755 index 0000000..4f907a6 --- /dev/null +++ b/style/fonts/andika/Andika-R.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:924a7581590e0866ff8b1c61f9dd197cd180f4bc25dbdd11dbb01217179ac066 +size 535704 diff --git a/style/fonts/andika/andika.css b/style/fonts/andika/andika.css new file mode 100644 index 0000000..1015b67 --- /dev/null +++ b/style/fonts/andika/andika.css @@ -0,0 +1,4 @@ +@font-face { + font-family: Andika; + src: url(Andika-R.woff); +} diff --git a/style/fonts/muller/050.eot b/style/fonts/muller/050.eot new file mode 100755 index 0000000..599f873 --- /dev/null +++ b/style/fonts/muller/050.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e44414ccad3c94b9a0738be909e784e6d5731580cf0f1f383731f134d700d7a +size 24201 diff --git a/style/fonts/muller/050.svg b/style/fonts/muller/050.svg new file mode 100755 index 0000000..4ffecb0 --- /dev/null +++ b/style/fonts/muller/050.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19d6075dc0ca600e26e0ae9e3b6be623a6bf6d85bec303a4702aad3138e58b1d +size 282603 diff --git a/style/fonts/muller/050.ttf b/style/fonts/muller/050.ttf new file mode 100755 index 0000000..0fa912b --- /dev/null +++ b/style/fonts/muller/050.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52f180afcaf0d1e72e260699f4d4e144ef7c553a7c31aa1bb6b50ae245bf8bbf +size 68652 diff --git a/style/fonts/muller/050.woff b/style/fonts/muller/050.woff new file mode 100755 index 0000000..4463a96 --- /dev/null +++ b/style/fonts/muller/050.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:296c7b298d3a0aafb6612f19b4a90c46ff022f4661a7b364cf5e9eb7942d66c4 +size 28600 diff --git a/style/fonts/muller/050.woff2 b/style/fonts/muller/050.woff2 new file mode 100755 index 0000000..7c1d1b9 --- /dev/null +++ b/style/fonts/muller/050.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac30dab014abab62a14a22b20b7b13e161dee41befe70a459ef664aba5d9f6d6 +size 21336 diff --git a/style/fonts/muller/050i.eot b/style/fonts/muller/050i.eot new file mode 100755 index 0000000..7f07603 --- /dev/null +++ b/style/fonts/muller/050i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35e71b99444dea30b536ba7a68518e026c07ba134ef6b5983db70dd36acf8652 +size 25206 diff --git a/style/fonts/muller/050i.svg b/style/fonts/muller/050i.svg new file mode 100755 index 0000000..01fe07d --- /dev/null +++ b/style/fonts/muller/050i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e264374a1a6885c3e9a5195028d95e3635d9a8fba4032256e7e129e73e2b6b60 +size 284614 diff --git a/style/fonts/muller/050i.ttf b/style/fonts/muller/050i.ttf new file mode 100755 index 0000000..d358b19 --- /dev/null +++ b/style/fonts/muller/050i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37f0dae5c13681a2505d7a19b2bf6629895164a851b68dd7ab05944f8fb6bbd4 +size 71008 diff --git a/style/fonts/muller/050i.woff b/style/fonts/muller/050i.woff new file mode 100755 index 0000000..13278f1 --- /dev/null +++ b/style/fonts/muller/050i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af618dbb593d919752ba0d1444b99dd412d35bb9aa43894f4f8d85b1e63bc06a +size 29616 diff --git a/style/fonts/muller/050i.woff2 b/style/fonts/muller/050i.woff2 new file mode 100755 index 0000000..bdcc1c5 --- /dev/null +++ b/style/fonts/muller/050i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f55d2e3afd0661b39c62a97ce2dc466483f189e4d76f29a139f3f2ada78114e +size 22100 diff --git a/style/fonts/muller/100.eot b/style/fonts/muller/100.eot new file mode 100755 index 0000000..d049bda --- /dev/null +++ b/style/fonts/muller/100.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cf56c6a348d8e516d9842f13ab627bf877c64c95c63340330f51af867b209c3 +size 24521 diff --git a/style/fonts/muller/100.svg b/style/fonts/muller/100.svg new file mode 100755 index 0000000..5bf9d43 --- /dev/null +++ b/style/fonts/muller/100.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9fecfb517e96d50805a5cfd4818a01b29021b4ca6b321a25f7b29951ca02fcf +size 282489 diff --git a/style/fonts/muller/100.ttf b/style/fonts/muller/100.ttf new file mode 100755 index 0000000..56d05ca --- /dev/null +++ b/style/fonts/muller/100.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f93e0fb86a9b59d109da3518aa7d3d9f3e75bb16068f9430a5af441002f95493 +size 68660 diff --git a/style/fonts/muller/100.woff b/style/fonts/muller/100.woff new file mode 100755 index 0000000..8a3a9d1 --- /dev/null +++ b/style/fonts/muller/100.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e49f47fa903a8efdec708464eae65022be7e85942d013c479657709b4ad91b5 +size 28832 diff --git a/style/fonts/muller/100.woff2 b/style/fonts/muller/100.woff2 new file mode 100755 index 0000000..4dbb6db --- /dev/null +++ b/style/fonts/muller/100.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a90abe101fe0a5a4ec19a73f870e8ff912197ea708671c90a508a1a45073877 +size 21536 diff --git a/style/fonts/muller/100i.eot b/style/fonts/muller/100i.eot new file mode 100755 index 0000000..67b5ec3 --- /dev/null +++ b/style/fonts/muller/100i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f333b1d6a04ea1712d42b608975058916047c11566135ab614ff37c91c79c8ef +size 25651 diff --git a/style/fonts/muller/100i.svg b/style/fonts/muller/100i.svg new file mode 100755 index 0000000..eeb77ed --- /dev/null +++ b/style/fonts/muller/100i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f88bbf38fa55d08daf59c8c18f94a017150f2ae0f6cc4f26901883dacc406e3 +size 283344 diff --git a/style/fonts/muller/100i.ttf b/style/fonts/muller/100i.ttf new file mode 100755 index 0000000..bdf3e5e --- /dev/null +++ b/style/fonts/muller/100i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e072cc30559f26747dc7417ddac8120659345c0c5bc5d2be62d3dc4fdb06182d +size 70980 diff --git a/style/fonts/muller/100i.woff b/style/fonts/muller/100i.woff new file mode 100755 index 0000000..f28c412 --- /dev/null +++ b/style/fonts/muller/100i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a459ada2aa6be232a39cf9a149c9dd1504cc8f3e4e7527627a6ac4c46ec527e +size 30064 diff --git a/style/fonts/muller/100i.woff2 b/style/fonts/muller/100i.woff2 new file mode 100755 index 0000000..1382c5e --- /dev/null +++ b/style/fonts/muller/100i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba22cf2c94071430f3516c28b537541f338c7e45e42f13c498d3025c43db1392 +size 22456 diff --git a/style/fonts/muller/200.eot b/style/fonts/muller/200.eot new file mode 100755 index 0000000..6fe9581 --- /dev/null +++ b/style/fonts/muller/200.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:357fc0035dec53d6217cd676ec008ad3aacafde257eff0320a5fcd1aa037ee89 +size 24685 diff --git a/style/fonts/muller/200.svg b/style/fonts/muller/200.svg new file mode 100755 index 0000000..62cf5e6 --- /dev/null +++ b/style/fonts/muller/200.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40eaf5fb8a936d09924f1fa38e318a3385ac87f61c35a51e934d9a258d1b47e3 +size 284142 diff --git a/style/fonts/muller/200.ttf b/style/fonts/muller/200.ttf new file mode 100755 index 0000000..5c0b915 --- /dev/null +++ b/style/fonts/muller/200.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d37a07f36b2972392c99e153fd33b33002769f8f3864ad561666daa3f6abb791 +size 69032 diff --git a/style/fonts/muller/200.woff b/style/fonts/muller/200.woff new file mode 100755 index 0000000..1d38c56 --- /dev/null +++ b/style/fonts/muller/200.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcd537c70a6b7ab12b8dbc16bb1aee253224e3785e2d3b810810dd1ef5a05964 +size 28924 diff --git a/style/fonts/muller/200.woff2 b/style/fonts/muller/200.woff2 new file mode 100755 index 0000000..d1fc5d2 --- /dev/null +++ b/style/fonts/muller/200.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64de73aa065b57220ab7f19a731dd700df508dc8455be38b6c59d6ca79e50338 +size 21664 diff --git a/style/fonts/muller/200i.eot b/style/fonts/muller/200i.eot new file mode 100755 index 0000000..a1cb092 --- /dev/null +++ b/style/fonts/muller/200i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc6986e8514f84d9527bb9bf6fd33520107ec23248609ca8903f83a8ab2999f4 +size 25902 diff --git a/style/fonts/muller/200i.svg b/style/fonts/muller/200i.svg new file mode 100755 index 0000000..7c129c6 --- /dev/null +++ b/style/fonts/muller/200i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:526663b94eab1f840d7eea2bb4d29e0c6cf011495b0c87d464dad36578e27bd8 +size 283852 diff --git a/style/fonts/muller/200i.ttf b/style/fonts/muller/200i.ttf new file mode 100755 index 0000000..22b49cf --- /dev/null +++ b/style/fonts/muller/200i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9397a48d14cd3859cb1425a3506c7daf033c40dbf1778c01df2bb183dccf3f28 +size 70872 diff --git a/style/fonts/muller/200i.woff b/style/fonts/muller/200i.woff new file mode 100755 index 0000000..0459547 --- /dev/null +++ b/style/fonts/muller/200i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ab55e27f6f212cb7363660dcc602503946f99d147c01404e5e589753ea36ed2 +size 30196 diff --git a/style/fonts/muller/200i.woff2 b/style/fonts/muller/200i.woff2 new file mode 100755 index 0000000..3bac713 --- /dev/null +++ b/style/fonts/muller/200i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e6e6e31ffbd42f0733d292b92710114a82852e024c4e8387a760f45358e510d +size 22728 diff --git a/style/fonts/muller/300.eot b/style/fonts/muller/300.eot new file mode 100755 index 0000000..c03d7fa --- /dev/null +++ b/style/fonts/muller/300.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f6fb94c312166075d342b625a7d28ff1a73c8ec64610bd2f60a27015775bf2e +size 24398 diff --git a/style/fonts/muller/300.svg b/style/fonts/muller/300.svg new file mode 100755 index 0000000..ed218b3 --- /dev/null +++ b/style/fonts/muller/300.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a0eafd89a2064b2cd90e7737aa76cbc44bf26ad3b5f0c8469abed29f2423521 +size 276183 diff --git a/style/fonts/muller/300.ttf b/style/fonts/muller/300.ttf new file mode 100755 index 0000000..6857a19 --- /dev/null +++ b/style/fonts/muller/300.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6986d094480820d770cf9e02db8328e78da64ad09a20b9b9290b05bf2586e8a0 +size 68572 diff --git a/style/fonts/muller/300.woff b/style/fonts/muller/300.woff new file mode 100755 index 0000000..6b66428 --- /dev/null +++ b/style/fonts/muller/300.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb5fdefbffc1069bb6bbf299906552dbaf56430b7fc75710e170c96d4c28538 +size 28728 diff --git a/style/fonts/muller/300.woff2 b/style/fonts/muller/300.woff2 new file mode 100755 index 0000000..a2e61de --- /dev/null +++ b/style/fonts/muller/300.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e0a5bcf3c0ecdc9c7e9785901fbafe3194daaa6b9b71e73d54755d02ccf52b7 +size 21432 diff --git a/style/fonts/muller/300i.eot b/style/fonts/muller/300i.eot new file mode 100755 index 0000000..39a5d96 --- /dev/null +++ b/style/fonts/muller/300i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a64f4fe8e1571daac18c9193df7ce81077beffb8dbf8c083707b85f7b7c89420 +size 25784 diff --git a/style/fonts/muller/300i.svg b/style/fonts/muller/300i.svg new file mode 100755 index 0000000..b448f54 --- /dev/null +++ b/style/fonts/muller/300i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de37ef523b8db3d21a612fe1ec6d79e8dc460c3520db2c08d5514d6464731574 +size 280477 diff --git a/style/fonts/muller/300i.ttf b/style/fonts/muller/300i.ttf new file mode 100755 index 0000000..f809ce0 --- /dev/null +++ b/style/fonts/muller/300i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57409e7d0f70ba5ede1b775b522c5d6e94892e40679c26bad92a2f30a972234 +size 70828 diff --git a/style/fonts/muller/300i.woff b/style/fonts/muller/300i.woff new file mode 100755 index 0000000..aef8338 --- /dev/null +++ b/style/fonts/muller/300i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c3cd5c6242799ed32b98d4038a00d6568f2e8be1f0c45ef7c3aee718e413cae +size 30056 diff --git a/style/fonts/muller/300i.woff2 b/style/fonts/muller/300i.woff2 new file mode 100755 index 0000000..fbaf1a6 --- /dev/null +++ b/style/fonts/muller/300i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14d42ded5e0108bdadbf6e2363297809d11375cececba2ee36d6f63c34b01997 +size 22620 diff --git a/style/fonts/muller/400.eot b/style/fonts/muller/400.eot new file mode 100755 index 0000000..2e575cc --- /dev/null +++ b/style/fonts/muller/400.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e72f4c3b1509542b55a95ddc6799ee9a8e1b7cf156351defa4b848d0f739fdd +size 24089 diff --git a/style/fonts/muller/400.svg b/style/fonts/muller/400.svg new file mode 100755 index 0000000..5480220 --- /dev/null +++ b/style/fonts/muller/400.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b97b15cf950eaec29d5e62f3e19f9ea3e496564c1470ea7b1c8028684691bc05 +size 272826 diff --git a/style/fonts/muller/400.ttf b/style/fonts/muller/400.ttf new file mode 100755 index 0000000..7c5b205 --- /dev/null +++ b/style/fonts/muller/400.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bc771b4d8463643362455f3a9d7d13a507a28706a93aafa56148093ce53b4e1 +size 68512 diff --git a/style/fonts/muller/400.woff b/style/fonts/muller/400.woff new file mode 100755 index 0000000..6d90cbc --- /dev/null +++ b/style/fonts/muller/400.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f7f2025cecd3a1b41370031e1c87763f4a08d6e8d0a5be46248d1a227d9722d +size 28356 diff --git a/style/fonts/muller/400.woff2 b/style/fonts/muller/400.woff2 new file mode 100755 index 0000000..5d81916 --- /dev/null +++ b/style/fonts/muller/400.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0a9472e4e16b92c16ca037426bf26ef69acaa96636d513f5a75ec33cfd6d766 +size 21148 diff --git a/style/fonts/muller/400i.eot b/style/fonts/muller/400i.eot new file mode 100755 index 0000000..df2ff8a --- /dev/null +++ b/style/fonts/muller/400i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73642aee835769f42f6270b1225528ba4740b4c4f49c4c86265fd2e39c23b74e +size 25412 diff --git a/style/fonts/muller/400i.svg b/style/fonts/muller/400i.svg new file mode 100755 index 0000000..45c64a3 --- /dev/null +++ b/style/fonts/muller/400i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35842fcc78f7368b1452a6f3882d2191bee095fba3661644f4b54bef20b8f710 +size 274635 diff --git a/style/fonts/muller/400i.ttf b/style/fonts/muller/400i.ttf new file mode 100755 index 0000000..31fb9c0 --- /dev/null +++ b/style/fonts/muller/400i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47c1a42ebd2e0796ae3656088dc46d0e916d09612ff8c071362860c1e6f4615c +size 70280 diff --git a/style/fonts/muller/400i.woff b/style/fonts/muller/400i.woff new file mode 100755 index 0000000..3bcbb2e --- /dev/null +++ b/style/fonts/muller/400i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fbdb9519637cf87e1f0cb4d2473ff4bd16eefd01d051d11b3e5653953775399 +size 29600 diff --git a/style/fonts/muller/400i.woff2 b/style/fonts/muller/400i.woff2 new file mode 100755 index 0000000..b143a7c --- /dev/null +++ b/style/fonts/muller/400i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0e7890f3d935a1dea1ea7bf5f51b040e103093f0ebfb49678e92be13c0cfbe7 +size 22204 diff --git a/style/fonts/muller/500.eot b/style/fonts/muller/500.eot new file mode 100755 index 0000000..00e1122 --- /dev/null +++ b/style/fonts/muller/500.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38467009f2c711f68564e24ce31928a2aa5f70ff7eaef9ca265c32b65754b99e +size 24416 diff --git a/style/fonts/muller/500.svg b/style/fonts/muller/500.svg new file mode 100755 index 0000000..d4681a0 --- /dev/null +++ b/style/fonts/muller/500.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e1de04d160562b680d613a676ff799efc62f5dcd004de5539e6319227f7280d +size 268115 diff --git a/style/fonts/muller/500.ttf b/style/fonts/muller/500.ttf new file mode 100755 index 0000000..bffe25b --- /dev/null +++ b/style/fonts/muller/500.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ddf3152cc8cffde43b10d2a93c24c467b04cd1a7ed64c72e324c63df8d9bcfd +size 67624 diff --git a/style/fonts/muller/500.woff b/style/fonts/muller/500.woff new file mode 100755 index 0000000..0c0d505 --- /dev/null +++ b/style/fonts/muller/500.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:043fc171aba97d2786617412fd11920d4e16df3cfa10df54fda1f09ba91b513d +size 28680 diff --git a/style/fonts/muller/500.woff2 b/style/fonts/muller/500.woff2 new file mode 100755 index 0000000..219c2b4 --- /dev/null +++ b/style/fonts/muller/500.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0d9718ec88b598c4e5db394a45f65760acc9d90eaf76bc7f6853777710b45be +size 21424 diff --git a/style/fonts/muller/500i.eot b/style/fonts/muller/500i.eot new file mode 100755 index 0000000..429d797 --- /dev/null +++ b/style/fonts/muller/500i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c123d614d57a84674cb61e4da2cbf804383b3a44b932d7b080dd636e84d5d7c4 +size 25948 diff --git a/style/fonts/muller/500i.svg b/style/fonts/muller/500i.svg new file mode 100755 index 0000000..7cfb067 --- /dev/null +++ b/style/fonts/muller/500i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d49e02c380d91e2385e7a23a0537f4121f1e5b2824f7b3b669d20de5fc4a9169 +size 274132 diff --git a/style/fonts/muller/500i.ttf b/style/fonts/muller/500i.ttf new file mode 100755 index 0000000..15e8f10 --- /dev/null +++ b/style/fonts/muller/500i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c246f403fc11339312c5ef30967bb8e0b713efd221de4246b07b6f8e39527733 +size 70180 diff --git a/style/fonts/muller/500i.woff b/style/fonts/muller/500i.woff new file mode 100755 index 0000000..a93723e --- /dev/null +++ b/style/fonts/muller/500i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ea15190790fcbed36712abfa7554f29afa921e64a5f7ce0316d29ccb7758715 +size 30136 diff --git a/style/fonts/muller/500i.woff2 b/style/fonts/muller/500i.woff2 new file mode 100755 index 0000000..d45e43d --- /dev/null +++ b/style/fonts/muller/500i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:273553ccea914d7d0aee543d10731af652767fcd7375ed18288b05c89135b2b0 +size 22688 diff --git a/style/fonts/muller/600.eot b/style/fonts/muller/600.eot new file mode 100755 index 0000000..2b07fd3 --- /dev/null +++ b/style/fonts/muller/600.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2963b540d0d3ce74a6f0121230907ddd93411b424479d8ffa9f097ae00a60925 +size 24478 diff --git a/style/fonts/muller/600.svg b/style/fonts/muller/600.svg new file mode 100755 index 0000000..54f01b0 --- /dev/null +++ b/style/fonts/muller/600.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72a4afb4ead2b4e850d000c9cf8bad605f54310183cf7a26240d95d69704217d +size 265402 diff --git a/style/fonts/muller/600.ttf b/style/fonts/muller/600.ttf new file mode 100755 index 0000000..2d65606 --- /dev/null +++ b/style/fonts/muller/600.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2c1f8a459f5daf23a7522cdc0f99ac21f87918c81fda0bc5cb851bc51315012 +size 68080 diff --git a/style/fonts/muller/600.woff b/style/fonts/muller/600.woff new file mode 100755 index 0000000..bf711fd --- /dev/null +++ b/style/fonts/muller/600.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:279bde5fb66136c25a808d51a292e3865b53c94183d77abc63a33ff8c9baac65 +size 28844 diff --git a/style/fonts/muller/600.woff2 b/style/fonts/muller/600.woff2 new file mode 100755 index 0000000..9a56935 --- /dev/null +++ b/style/fonts/muller/600.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a72f804a297bc6acacf6fa5da21ce50b6e21fa841a47aaa6ab33200b6984b09c +size 21572 diff --git a/style/fonts/muller/600i.eot b/style/fonts/muller/600i.eot new file mode 100755 index 0000000..8787770 --- /dev/null +++ b/style/fonts/muller/600i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d1763d7140fddab89ae8ef7647747e040fd0c37bbd4d1b4e529afdb64bd4ce7 +size 25812 diff --git a/style/fonts/muller/600i.svg b/style/fonts/muller/600i.svg new file mode 100755 index 0000000..316a540 --- /dev/null +++ b/style/fonts/muller/600i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c09b432a23d4e239036de75f5c1f8fc395b8a13678bb646da0fdbade075a9157 +size 268620 diff --git a/style/fonts/muller/600i.ttf b/style/fonts/muller/600i.ttf new file mode 100755 index 0000000..0ed0eed --- /dev/null +++ b/style/fonts/muller/600i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5788e1d70da1e59f4cc5fc5e2b3780235621a5879880290b189781b50ddd863 +size 70688 diff --git a/style/fonts/muller/600i.woff b/style/fonts/muller/600i.woff new file mode 100755 index 0000000..cbeed4d --- /dev/null +++ b/style/fonts/muller/600i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4093ce55726a8c2703c81c4cd6e8285ef64ca097b056443084b06587398448e +size 30032 diff --git a/style/fonts/muller/600i.woff2 b/style/fonts/muller/600i.woff2 new file mode 100755 index 0000000..07e9d67 --- /dev/null +++ b/style/fonts/muller/600i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59db8a179612c5cf61230a2f3ed7f19fecaf12aaade5ff249bd9ebd72bfa8cac +size 22536 diff --git a/style/fonts/muller/700.eot b/style/fonts/muller/700.eot new file mode 100755 index 0000000..429faff --- /dev/null +++ b/style/fonts/muller/700.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6db3d5fd4318f81d8842daf1913301ad6271d72378b3595dee7c207088cc54a6 +size 24064 diff --git a/style/fonts/muller/700.svg b/style/fonts/muller/700.svg new file mode 100755 index 0000000..6095768 --- /dev/null +++ b/style/fonts/muller/700.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba8c4a5a72e20aebcabc7045dfdcf428f97c7862006c746c6350131adb04754 +size 266597 diff --git a/style/fonts/muller/700.ttf b/style/fonts/muller/700.ttf new file mode 100755 index 0000000..fb5c8dd --- /dev/null +++ b/style/fonts/muller/700.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13f1c8a1b5f8f3eb8ccedea48344874058f60877b30865e4869c4f4b9e733d10 +size 68104 diff --git a/style/fonts/muller/700.woff b/style/fonts/muller/700.woff new file mode 100755 index 0000000..45f2ef8 --- /dev/null +++ b/style/fonts/muller/700.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14eea7e93e3c87f16ea2cd639b1520a8960d209ae211fa791123f366e1f97aaa +size 28460 diff --git a/style/fonts/muller/700.woff2 b/style/fonts/muller/700.woff2 new file mode 100755 index 0000000..ee8a7ad --- /dev/null +++ b/style/fonts/muller/700.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc034f8dae34c5f2dcc9c141fa2e4216f0dd4b9cb6fea95903bc23196c835bee +size 21140 diff --git a/style/fonts/muller/700i.eot b/style/fonts/muller/700i.eot new file mode 100755 index 0000000..c28b09a --- /dev/null +++ b/style/fonts/muller/700i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef9c6d61f20494078de3989e036125d31995bbfe2a2fa79967358d5d0003794a +size 25511 diff --git a/style/fonts/muller/700i.svg b/style/fonts/muller/700i.svg new file mode 100755 index 0000000..7bc18a1 --- /dev/null +++ b/style/fonts/muller/700i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3da924bd2ddccaad2bb5b2ebcf370b72a28d8fb98058b028113fc9908b350e6c +size 270333 diff --git a/style/fonts/muller/700i.ttf b/style/fonts/muller/700i.ttf new file mode 100755 index 0000000..9f330c9 --- /dev/null +++ b/style/fonts/muller/700i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e18dba7f0ad73d77852d8abd64280a7cd73e717e12e19f5207e2cb9bdbc3ac4b +size 70820 diff --git a/style/fonts/muller/700i.woff b/style/fonts/muller/700i.woff new file mode 100755 index 0000000..cf1f86c --- /dev/null +++ b/style/fonts/muller/700i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db32b25157025568deb300dd875232fe2b75cc75f12beb37361cba09c4aca5f3 +size 29812 diff --git a/style/fonts/muller/700i.woff2 b/style/fonts/muller/700i.woff2 new file mode 100755 index 0000000..692c012 --- /dev/null +++ b/style/fonts/muller/700i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68afc89947391340e425f2760a10af09e749468d2c1ea00e5587b77bae2bee69 +size 22412 diff --git a/style/fonts/muller/800.eot b/style/fonts/muller/800.eot new file mode 100755 index 0000000..cdd5498 --- /dev/null +++ b/style/fonts/muller/800.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d24a1acd082c498e82edd77222a78a5f6b1de4436e3ab2738fc53f238e5c403b +size 24975 diff --git a/style/fonts/muller/800.svg b/style/fonts/muller/800.svg new file mode 100755 index 0000000..99b31e5 --- /dev/null +++ b/style/fonts/muller/800.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c04b32812b613e6d73a1d3e86fdd9f2372fd85fe7de259de8a1f764257694869 +size 263195 diff --git a/style/fonts/muller/800.ttf b/style/fonts/muller/800.ttf new file mode 100755 index 0000000..a7382e2 --- /dev/null +++ b/style/fonts/muller/800.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad2a92a396470270dfcbfc0287ae02e00b9e2d2f45371a2671d0597201022d9f +size 68052 diff --git a/style/fonts/muller/800.woff b/style/fonts/muller/800.woff new file mode 100755 index 0000000..7bd17b1 --- /dev/null +++ b/style/fonts/muller/800.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4c20a013e1d644b509e9a275dfbda1460bbad6217a7ffc345dd615bf5fc0760 +size 29348 diff --git a/style/fonts/muller/800.woff2 b/style/fonts/muller/800.woff2 new file mode 100755 index 0000000..29202ea --- /dev/null +++ b/style/fonts/muller/800.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60c275a2d630c7c079226597fb1aa9d47f03e6ced1f51b5fe935889479640c14 +size 21916 diff --git a/style/fonts/muller/800i.eot b/style/fonts/muller/800i.eot new file mode 100755 index 0000000..a4aa88b --- /dev/null +++ b/style/fonts/muller/800i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:518ac82f37f95effbf487cea872794c47f51e4c967d28446d592d8a237fcd5bf +size 25974 diff --git a/style/fonts/muller/800i.svg b/style/fonts/muller/800i.svg new file mode 100755 index 0000000..15bd4cc --- /dev/null +++ b/style/fonts/muller/800i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d47fe1ec887928629ae3bbe7ac1b7ed6e487b86feb5534aad7f2f8dfdb7ed2e +size 267278 diff --git a/style/fonts/muller/800i.ttf b/style/fonts/muller/800i.ttf new file mode 100755 index 0000000..4b5e156 --- /dev/null +++ b/style/fonts/muller/800i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad25a19fd3228319e2cf92074be16c20cabc13a7c7ecc5fa0c2b8f907da0605 +size 70828 diff --git a/style/fonts/muller/800i.woff b/style/fonts/muller/800i.woff new file mode 100755 index 0000000..869806f --- /dev/null +++ b/style/fonts/muller/800i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8222f82f23198644250989af292af5c15dfcaee2e7b6abc189b371d295f80110 +size 30300 diff --git a/style/fonts/muller/800i.woff2 b/style/fonts/muller/800i.woff2 new file mode 100755 index 0000000..f521bc7 --- /dev/null +++ b/style/fonts/muller/800i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3dae126453a039fe0b1109ecb80005071a46b271000c0f65af9b8105bce0ceb +size 22768 diff --git a/style/fonts/muller/900.eot b/style/fonts/muller/900.eot new file mode 100755 index 0000000..c5725c3 --- /dev/null +++ b/style/fonts/muller/900.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cab0a0a7cdffa1f43a26998befdc9f7fa5bfc190bf572f7d7a8a4a96a7525ea +size 24671 diff --git a/style/fonts/muller/900.svg b/style/fonts/muller/900.svg new file mode 100755 index 0000000..a759efe --- /dev/null +++ b/style/fonts/muller/900.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d65831743af5e601ae91dff26d5cd6706392719886476408448f8c3afa2ed5e7 +size 266903 diff --git a/style/fonts/muller/900.ttf b/style/fonts/muller/900.ttf new file mode 100755 index 0000000..53a6738 --- /dev/null +++ b/style/fonts/muller/900.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad7c73914f8649fd651be266bcebdef4ae9d22974535e06d0053e5075d933d2 +size 68732 diff --git a/style/fonts/muller/900.woff b/style/fonts/muller/900.woff new file mode 100755 index 0000000..1228c62 --- /dev/null +++ b/style/fonts/muller/900.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdf06c1845100527afd7edc5183387654d65a1aaf3b397471b28976903d5709c +size 29100 diff --git a/style/fonts/muller/900.woff2 b/style/fonts/muller/900.woff2 new file mode 100755 index 0000000..d5d0a97 --- /dev/null +++ b/style/fonts/muller/900.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6ed3b329dffc008de50d77e2106d1dd7b1f8a285b1472f94d0c658c6823a359 +size 21632 diff --git a/style/fonts/muller/900i.eot b/style/fonts/muller/900i.eot new file mode 100755 index 0000000..4adbd31 --- /dev/null +++ b/style/fonts/muller/900i.eot @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e4d73974be305abf4ba2aa49b87bf392e98c87d69340219ad48716d75fa09fa +size 26085 diff --git a/style/fonts/muller/900i.svg b/style/fonts/muller/900i.svg new file mode 100755 index 0000000..3fce5ee --- /dev/null +++ b/style/fonts/muller/900i.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84c3946906fdc1eefcfa54775dae56b5f0cff8892edc740b017fe1c3b3472a9a +size 268565 diff --git a/style/fonts/muller/900i.ttf b/style/fonts/muller/900i.ttf new file mode 100755 index 0000000..d6ee04b --- /dev/null +++ b/style/fonts/muller/900i.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c692f426332e9b246e67259a53b1d9587c4698f0aa2069d2ec2b29544e58ebdf +size 70884 diff --git a/style/fonts/muller/900i.woff b/style/fonts/muller/900i.woff new file mode 100755 index 0000000..da8d683 --- /dev/null +++ b/style/fonts/muller/900i.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:322c8610e0eab5c5a9a7089f5c9c948711a3e8723ffa29508a9317592101ba16 +size 30512 diff --git a/style/fonts/muller/900i.woff2 b/style/fonts/muller/900i.woff2 new file mode 100755 index 0000000..d513182 --- /dev/null +++ b/style/fonts/muller/900i.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f4c0197b7e1347589d072dd10549b456ce8fb7886e9974fb87232d070761066 +size 22812 diff --git a/style/fonts/muller/muller.css b/style/fonts/muller/muller.css new file mode 100644 index 0000000..fe3d69a --- /dev/null +++ b/style/fonts/muller/muller.css @@ -0,0 +1,229 @@ +@font-face { + font-family: Muller; + font-weight: 50; + src: + url(050.eot) format('embedded-opentype'), + url(050.svg) format('svg'), + url(050.ttf) format('truetype'), + url(050.woff) format('woff'), + url(050.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 50; + font-style: italic; + src: + url(050i.eot) format('embedded-opentype'), + url(050i.svg) format('svg'), + url(050i.ttf) format('truetype'), + url(050i.woff) format('woff'), + url(050i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 100; + src: + url(100.eot) format('embedded-opentype'), + url(100.svg) format('svg'), + url(100.ttf) format('truetype'), + url(100.woff) format('woff'), + url(100.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 100; + font-style: italic; + src: + url(100i.eot) format('embedded-opentype'), + url(100i.svg) format('svg'), + url(100i.ttf) format('truetype'), + url(100i.woff) format('woff'), + url(100i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 200; + src: + url(200.eot) format('embedded-opentype'), + url(200.svg) format('svg'), + url(200.ttf) format('truetype'), + url(200.woff) format('woff'), + url(200.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 200; + font-style: italic; + src: + url(200i.eot) format('embedded-opentype'), + url(200i.svg) format('svg'), + url(200i.ttf) format('truetype'), + url(200i.woff) format('woff'), + url(200i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 300; + src: + url(300.eot) format('embedded-opentype'), + url(300.svg) format('svg'), + url(300.ttf) format('truetype'), + url(300.woff) format('woff'), + url(300.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 300; + font-style: italic; + src: + url(300i.eot) format('embedded-opentype'), + url(300i.svg) format('svg'), + url(300i.ttf) format('truetype'), + url(300i.woff) format('woff'), + url(300i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 400; + src: + url(400.eot) format('embedded-opentype'), + url(400.svg) format('svg'), + url(400.ttf) format('truetype'), + url(400.woff) format('woff'), + url(400.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 400; + font-style: italic; + src: + url(400i.eot) format('embedded-opentype'), + url(400i.svg) format('svg'), + url(400i.ttf) format('truetype'), + url(400i.woff) format('woff'), + url(400i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 500; + src: + url(500.eot) format('embedded-opentype'), + url(500.svg) format('svg'), + url(500.ttf) format('truetype'), + url(500.woff) format('woff'), + url(500.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 500; + font-style: italic; + src: + url(500i.eot) format('embedded-opentype'), + url(500i.svg) format('svg'), + url(500i.ttf) format('truetype'), + url(500i.woff) format('woff'), + url(500i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 600; + src: + url(600.eot) format('embedded-opentype'), + url(600.svg) format('svg'), + url(600.ttf) format('truetype'), + url(600.woff) format('woff'), + url(600.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 600; + font-style: italic; + src: + url(600i.eot) format('embedded-opentype'), + url(600i.svg) format('svg'), + url(600i.ttf) format('truetype'), + url(600i.woff) format('woff'), + url(600i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 700; + src: + url(700.eot) format('embedded-opentype'), + url(700.svg) format('svg'), + url(700.ttf) format('truetype'), + url(700.woff) format('woff'), + url(700.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 700; + font-style: italic; + src: + url(700i.eot) format('embedded-opentype'), + url(700i.svg) format('svg'), + url(700i.ttf) format('truetype'), + url(700i.woff) format('woff'), + url(700i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 800; + src: + url(800.eot) format('embedded-opentype'), + url(800.svg) format('svg'), + url(800.ttf) format('truetype'), + url(800.woff) format('woff'), + url(800.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 800; + font-style: italic; + src: + url(800i.eot) format('embedded-opentype'), + url(800i.svg) format('svg'), + url(800i.ttf) format('truetype'), + url(800i.woff) format('woff'), + url(800i.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 900; + src: + url(900.eot) format('embedded-opentype'), + url(900.svg) format('svg'), + url(900.ttf) format('truetype'), + url(900.woff) format('woff'), + url(900.woff2) format('woff2'); +} + +@font-face { + font-family: Muller; + font-weight: 900; + font-style: italic; + src: + url(900i.eot) format('embedded-opentype'), + url(900i.svg) format('svg'), + url(900i.ttf) format('truetype'), + url(900i.woff) format('woff'), + url(900i.woff2) format('woff2'); +} diff --git a/style/page.css b/style/page.css new file mode 100644 index 0000000..7deb035 --- /dev/null +++ b/style/page.css @@ -0,0 +1,84 @@ +@import url(fonts/muller/muller.css); +@import url(fonts/andika/andika.css); + +@import url(counters.css); + +:root { + --root-col: hsl(0deg, 2%, 19%); + --fg-col: hsl(336deg, 17%, 11%); + --bg-col: hsl(40deg, 91%, 98%); + --link-col: hsl(188deg, 39%, 26%); + --head-col: hsl(355deg, 52%, 48%); +} + +:root { + background: var(--root-col); + + font-family: Muller; + font-size: 18pt; + + height: 100vh; +} + +body { + background: url(paper.png), var(--bg-col); + background-blend-mode: multiply; + color: var(--fg-col); + + max-width: 42em; + min-height: 100%; + margin: 0 auto; + padding: 1em 2em 3em; + + box-sizing: border-box; +} + + +h1, h2, h3, h4, h5, h6 { + color: var(--head-col); + margin: 1.5em 0 0.5em; +} + +h1::before, h2::before, h3::before, h4::before, h5::before, h6::before { + padding-right: 2ex; +} + +h1 { + font-size: 130%; + font-weight: 800; +} + +h2 { + font-size: 120%; + font-weight: 800; +} + +h3 { + font-size: 100%; + font-weight: 800; +} + +h4 { + font-size: 100%; + font-weight: 700; +} + +h5 { + font-size: 100%; + font-weight: 600; +} + +h6 { + font-size: 100%; + font-weight: 500; +} + +a { + color: var(--link-col); +} + + +.ipa, .lang { + font-family: Andika; + font-feature-settings: "ss01" 1, "litr" 0; +} diff --git a/style/paper.png b/style/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..5977961667679963fa3200be4a8f082e430667ce GIT binary patch literal 85055 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 Date: Tue, 18 Aug 2020 18:33:25 +0200 Subject: [PATCH 003/127] add initial version of pandoc filter --- .gitignore | 1 + Makefile | 14 ++++++++++++-- cabal.project | 1 + langfilter/langfilter.cabal | 23 +++++++++++++++++++++++ langfilter/langfilter.hs | 27 +++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 cabal.project create mode 100644 langfilter/langfilter.cabal create mode 100644 langfilter/langfilter.hs diff --git a/.gitignore b/.gitignore index 9d4f4b0..6a78d65 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ _build _tmp +dist-newstyle diff --git a/Makefile b/Makefile index 91766c3..bb26ae8 100644 --- a/Makefile +++ b/Makefile @@ -12,20 +12,30 @@ OUTPUTSTYLE = $(patsubst %,$(BUILDDIR)/%,$(STYLE)) OUTPUT = $(OUTPUTPAGES) $(OUTPUTSTYLE) +LANGFILTER = $(TMPDIR)/langfilter +EXECS = $(LANGFILTER) + .PHONY: all all: build .PHONY: build build: $(OUTPUT) -$(BUILDDIR)/%.html: $(PAGESDIR)/%.md $(TEMPLATE) +$(BUILDDIR)/%.html: $(PAGESDIR)/%.md $(TEMPLATE) $(LANGFILTER) mkdir -p $(dir $@) - pandoc -s --toc --template $(TEMPLATE) -o $@ $< + pandoc -s --toc --template $(TEMPLATE) --filter $(LANGFILTER) -o $@ $< $(BUILDDIR)/%: % mkdir -p $(dir $@) cp $< $@ +$(LANGFILTER): langfilter/*.hs langfilter/langfilter.cabal + mkdir -p $(dir $@) + cabal build -v0 all + find dist-newstyle -name $(notdir $@) \ + -print -type f -exec cp {} $(TMPDIR) \; + + .PHONY: clean distclean clean: rm -rf $(BUILDDIR) diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000..e4aa891 --- /dev/null +++ b/cabal.project @@ -0,0 +1 @@ +packages: ./langfilter diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal new file mode 100644 index 0000000..4c18973 --- /dev/null +++ b/langfilter/langfilter.cabal @@ -0,0 +1,23 @@ +cabal-version: 2.2 +name: langfilter +version: 0.1.0 +synopsis: filter for conlang stuff +license: AGPL-3.0-or-later + +author: Rhiannon Morris +maintainer: Rhiannon Morris + +executable langfilter + hs-source-dirs: . + main-is: langfilter.hs + ghc-options: + -Wall -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + default-extensions: + BlockArguments, + LambdaCase, + PatternSynonyms, + ViewPatterns + build-depends: + base ^>= 4.14.0.0, + pandoc-types == 1.17.* diff --git a/langfilter/langfilter.hs b/langfilter/langfilter.hs new file mode 100644 index 0000000..090c47e --- /dev/null +++ b/langfilter/langfilter.hs @@ -0,0 +1,27 @@ +import Text.Pandoc.Definition +import Text.Pandoc.JSON +import Text.Pandoc.Builder + +main :: IO () +main = toJSONFilter \case + Code _ txt + | Just _ <- enclosed '/' '/' txt -> + Span (cls ["ipa", "ipa-broad"]) $ text' txt + | Just _ <- enclosed '[' ']' txt -> + Span (cls ["ipa", "ipa-narrow"]) $ text' txt + | Just txt' <- enclosed '{' '}' txt -> + Span (cls ["lang"]) $ text' txt' + i -> i + +cls :: [String] -> Attr +cls cs = ("", cs, []) + +text' :: String -> [Inline] +text' = toList . text + + +enclosed :: Char -> Char -> String -> Maybe String +enclosed o c txt + | length txt >= 2, head txt == o, last txt == c + = Just $ init $ tail txt +enclosed _ _ _ = Nothing From c9932faeb83d604a4ee83f3cdb0683c58e5423a1 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 18 Aug 2020 18:47:03 +0200 Subject: [PATCH 004/127] style tweaks --- style/counters.css | 6 +++++- style/page.css | 48 +++++++++++++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/style/counters.css b/style/counters.css index f473ce3..8dfb591 100644 --- a/style/counters.css +++ b/style/counters.css @@ -1,5 +1,9 @@ :root { - --section-prefix: '§ '; + --section-prefix: ''; +} + +h1::before, h2::before, h3::before, h4::before, h5::before, h6::before { + padding-right: 1ex; } main h1 { diff --git a/style/page.css b/style/page.css index 7deb035..5e39f80 100644 --- a/style/page.css +++ b/style/page.css @@ -7,8 +7,7 @@ --root-col: hsl(0deg, 2%, 19%); --fg-col: hsl(336deg, 17%, 11%); --bg-col: hsl(40deg, 91%, 98%); - --link-col: hsl(188deg, 39%, 26%); - --head-col: hsl(355deg, 52%, 48%); + --link-col: hsl(355deg, 52%, 48%); } :root { @@ -34,49 +33,62 @@ body { } -h1, h2, h3, h4, h5, h6 { - color: var(--head-col); - margin: 1.5em 0 0.5em; +header { + text-align: center; } -h1::before, h2::before, h3::before, h4::before, h5::before, h6::before { - padding-right: 2ex; +header h1 { + font-size: 350%; + font-weight: 100; + margin-top: 0; +} + +h1, h2, h3, h4, h5, h6 { + margin: 1em 0 0.25em; } h1 { - font-size: 130%; - font-weight: 800; + font-size: 200%; + font-weight: 200; } h2 { - font-size: 120%; - font-weight: 800; + font-size: 180%; + font-weight: 200; } h3 { - font-size: 100%; - font-weight: 800; + font-size: 160%; + font-weight: 200; } h4 { - font-size: 100%; - font-weight: 700; + font-size: 140%; + font-weight: 300; } h5 { - font-size: 100%; - font-weight: 600; + font-size: 120%; + font-weight: 300; } h6 { font-size: 100%; - font-weight: 500; + font-weight: 400; } a { color: var(--link-col); } +b, strong { + font-weight: 600; +} + +ul li { + list-style: '— '; +} + .ipa, .lang { font-family: Andika; From 53a9f69ac140d498e5bb6a014b0b8182fc392388 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Fri, 30 Oct 2020 07:54:28 +0100 Subject: [PATCH 005/127] add static file copy --- Makefile | 14 ++++++++++++-- pages/index.md | 19 ++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index bb26ae8..7b2844a 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,13 @@ PAGESDIR ?= pages DATADIR ?= data TEMPLATE ?= $(DATADIR)/template.html +STATICEXTS := yaml + PAGES != find $(PAGESDIR) -name '*.md' -OUTPUTPAGES = $(patsubst $(PAGESDIR)/%.md,$(BUILDDIR)/%.html,$(PAGES)) +STATICS != parallel find $(PAGESDIR) -name '\*.{}' ::: $(STATICEXTS) +OUTPUTPAGES = \ + $(patsubst $(PAGESDIR)/%.md,$(BUILDDIR)/%.html,$(PAGES)) \ + $(patsubst $(PAGESDIR)/%,$(BUILDDIR)/%,$(STATICS)) STYLE != find style -type f OUTPUTSTYLE = $(patsubst %,$(BUILDDIR)/%,$(STYLE)) @@ -23,7 +28,12 @@ build: $(OUTPUT) $(BUILDDIR)/%.html: $(PAGESDIR)/%.md $(TEMPLATE) $(LANGFILTER) mkdir -p $(dir $@) - pandoc -s --toc --template $(TEMPLATE) --filter $(LANGFILTER) -o $@ $< + pandoc -s --toc --template $(TEMPLATE) \ + --filter $(LANGFILTER) -o $@ $< + +$(BUILDDIR)/%: $(PAGESDIR)/% + mkdir -p $(dir $@) + cp $< $@ $(BUILDDIR)/%: % mkdir -p $(dir $@) diff --git a/pages/index.md b/pages/index.md index 8bc2c2f..d56c7e4 100644 --- a/pages/index.md +++ b/pages/index.md @@ -1,11 +1,20 @@ --- -title: hello +title: Conlangs +toc: false ... -# bleep +[Yeah](https://en.wikipedia.org/wiki/Constructed_language). -yes +The ones I have anything written up for, in order of detail, and with a couple +of buzzwords each: -# bloop +* **[Lántas]** `/laːntas/`, which is the language which has gone longest + without me abandoning it. It has lots of noun cases and syllabic consonants, + and is written with an abugida. -yes!!! +* **[Tengan]**, or `{tté ŋa}` `/tʼɛ˥ ŋɑ˩/`, with an isolating grammar, click + consonants, evidentiality, and a Hangul-ripoff for the script. + +* **[Zalajmkwély]** `/zɑlɑɪmkweˈliː/`, which was originally from a "design + a conlang in an hour" challenge thing but then I got kind of attached to it. + It has nine genders and vowel harmony. From f41c23f6f33c1d509e4774e92060d0d041dde3e2 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Fri, 30 Oct 2020 07:54:42 +0100 Subject: [PATCH 006/127] reorder some lines --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7b2844a..2a51ee4 100644 --- a/Makefile +++ b/Makefile @@ -40,8 +40,8 @@ $(BUILDDIR)/%: % cp $< $@ $(LANGFILTER): langfilter/*.hs langfilter/langfilter.cabal - mkdir -p $(dir $@) cabal build -v0 all + mkdir -p $(dir $@) find dist-newstyle -name $(notdir $@) \ -print -type f -exec cp {} $(TMPDIR) \; From 776ae2ccee825551dd297a1325edecd639f0b2d2 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Fri, 30 Oct 2020 07:56:57 +0100 Subject: [PATCH 007/127] fonts --- .gitignore | 1 + style/fonts/andika/Andika-R.woff | 3 --- style/fonts/andika/andika.css | 4 --- style/fonts/charis/CharisSIL-B.ttf | 3 +++ style/fonts/charis/CharisSIL-B.woff | 3 +++ style/fonts/charis/CharisSIL-BI.ttf | 3 +++ style/fonts/charis/CharisSIL-BI.woff | 3 +++ style/fonts/charis/CharisSIL-I.ttf | 3 +++ style/fonts/charis/CharisSIL-I.woff | 3 +++ style/fonts/charis/CharisSIL-R.ttf | 3 +++ style/fonts/charis/CharisSIL-R.woff | 3 +++ style/fonts/charis/charis.css | 33 +++++++++++++++++++++++++ style/fonts/pragmatapro/pragmatapro.css | 25 +++++++++++++++++++ style/page.css | 12 ++++++--- 14 files changed, 92 insertions(+), 10 deletions(-) delete mode 100755 style/fonts/andika/Andika-R.woff delete mode 100644 style/fonts/andika/andika.css create mode 100644 style/fonts/charis/CharisSIL-B.ttf create mode 100644 style/fonts/charis/CharisSIL-B.woff create mode 100644 style/fonts/charis/CharisSIL-BI.ttf create mode 100644 style/fonts/charis/CharisSIL-BI.woff create mode 100644 style/fonts/charis/CharisSIL-I.ttf create mode 100644 style/fonts/charis/CharisSIL-I.woff create mode 100644 style/fonts/charis/CharisSIL-R.ttf create mode 100644 style/fonts/charis/CharisSIL-R.woff create mode 100644 style/fonts/charis/charis.css create mode 100644 style/fonts/pragmatapro/pragmatapro.css diff --git a/.gitignore b/.gitignore index 6a78d65..62275eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ _build _tmp dist-newstyle +style/fonts/pragmatapro/*.woff2 diff --git a/style/fonts/andika/Andika-R.woff b/style/fonts/andika/Andika-R.woff deleted file mode 100755 index 4f907a6..0000000 --- a/style/fonts/andika/Andika-R.woff +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:924a7581590e0866ff8b1c61f9dd197cd180f4bc25dbdd11dbb01217179ac066 -size 535704 diff --git a/style/fonts/andika/andika.css b/style/fonts/andika/andika.css deleted file mode 100644 index 1015b67..0000000 --- a/style/fonts/andika/andika.css +++ /dev/null @@ -1,4 +0,0 @@ -@font-face { - font-family: Andika; - src: url(Andika-R.woff); -} diff --git a/style/fonts/charis/CharisSIL-B.ttf b/style/fonts/charis/CharisSIL-B.ttf new file mode 100644 index 0000000..84a5ee8 --- /dev/null +++ b/style/fonts/charis/CharisSIL-B.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61e8b37bfb80ebadd4255ae45eaae93dbab878315a709a2c778f5a945f74fffe +size 1443920 diff --git a/style/fonts/charis/CharisSIL-B.woff b/style/fonts/charis/CharisSIL-B.woff new file mode 100644 index 0000000..605c3cd --- /dev/null +++ b/style/fonts/charis/CharisSIL-B.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46bf9ec1380f2265fefb442e7311420080b775fef1a3351fe9a4ff8b464fc8b4 +size 541322 diff --git a/style/fonts/charis/CharisSIL-BI.ttf b/style/fonts/charis/CharisSIL-BI.ttf new file mode 100644 index 0000000..7fadfe7 --- /dev/null +++ b/style/fonts/charis/CharisSIL-BI.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95103617b47f5d32655fab7e31b4e76f2747c7cc1a8004137dcc3d6eade38074 +size 1504932 diff --git a/style/fonts/charis/CharisSIL-BI.woff b/style/fonts/charis/CharisSIL-BI.woff new file mode 100644 index 0000000..cb425f2 --- /dev/null +++ b/style/fonts/charis/CharisSIL-BI.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac0bf31dfa6b49d979021df80493def2c3fc6a1ef4d36aa6b61489b0d3381c71 +size 583594 diff --git a/style/fonts/charis/CharisSIL-I.ttf b/style/fonts/charis/CharisSIL-I.ttf new file mode 100644 index 0000000..d9d888c --- /dev/null +++ b/style/fonts/charis/CharisSIL-I.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c406ee3993f79bc89329a45afba0dc761fd61ff7cb35ca7d6a8d9646625100dd +size 1510100 diff --git a/style/fonts/charis/CharisSIL-I.woff b/style/fonts/charis/CharisSIL-I.woff new file mode 100644 index 0000000..73aa404 --- /dev/null +++ b/style/fonts/charis/CharisSIL-I.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c59641eeb3dae22630b60e94f8c61cda4234aa0cf223a7afdf36f62508e8f2f +size 576146 diff --git a/style/fonts/charis/CharisSIL-R.ttf b/style/fonts/charis/CharisSIL-R.ttf new file mode 100644 index 0000000..b28b232 --- /dev/null +++ b/style/fonts/charis/CharisSIL-R.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e47ec6c29ae786e003cec104632fc954f201338ca282e3a4adf8b3d262d04fa6 +size 1508296 diff --git a/style/fonts/charis/CharisSIL-R.woff b/style/fonts/charis/CharisSIL-R.woff new file mode 100644 index 0000000..4735909 --- /dev/null +++ b/style/fonts/charis/CharisSIL-R.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd9280db2beceaa516e4644d98afa1060f474bf18aaabc20ba653a8f350742bb +size 557106 diff --git a/style/fonts/charis/charis.css b/style/fonts/charis/charis.css new file mode 100644 index 0000000..211db1e --- /dev/null +++ b/style/fonts/charis/charis.css @@ -0,0 +1,33 @@ +@font-face { + font-family: Charis; + font-weight: 400; + src: + url(CharisSIL-R.ttf) format('truetype'), + url(CharisSIL-R.woff) format('woff'); +} + +@font-face { + font-family: Charis; + font-weight: 500; + src: + url(CharisSIL-B.ttf) format('truetype'), + url(CharisSIL-B.woff) format('woff'); +} + +@font-face { + font-family: Charis; + font-weight: 400; + font-style: italic; + src: + url(CharisSIL-I.ttf) format('truetype'), + url(CharisSIL-I.woff) format('woff'); +} + +@font-face { + font-family: Charis; + font-weight: 500; + font-style: italic; + src: + url(CharisSIL-BI.ttf) format('truetype'), + url(CharisSIL-BI.woff) format('woff'); +} diff --git a/style/fonts/pragmatapro/pragmatapro.css b/style/fonts/pragmatapro/pragmatapro.css new file mode 100644 index 0000000..398603f --- /dev/null +++ b/style/fonts/pragmatapro/pragmatapro.css @@ -0,0 +1,25 @@ +@font-face { + font-family: PragmataPro; + font-weight: 400; + src: url(r.woff2); +} + +@font-face { + font-family: PragmataPro; + font-weight: 500; + src: url(b.woff2); +} + +@font-face { + font-family: PragmataPro; + font-weight: 400; + font-style: italic; + src: url(i.woff2); +} + +@font-face { + font-family: PragmataPro; + font-weight: 500; + font-style: italic; + src: url(bi.woff2); +} diff --git a/style/page.css b/style/page.css index 5e39f80..abb250e 100644 --- a/style/page.css +++ b/style/page.css @@ -1,5 +1,6 @@ @import url(fonts/muller/muller.css); -@import url(fonts/andika/andika.css); +@import url(fonts/charis/charis.css); +@import url(fonts/pragmatapro/pragmatapro.css); @import url(counters.css); @@ -8,6 +9,8 @@ --fg-col: hsl(336deg, 17%, 11%); --bg-col: hsl(40deg, 91%, 98%); --link-col: hsl(355deg, 52%, 48%); + + --ipa-font: Charis; } :root { @@ -91,6 +94,9 @@ ul li { .ipa, .lang { - font-family: Andika; - font-feature-settings: "ss01" 1, "litr" 0; + font-family: var(--ipa-font); +} + +.lang { + font-weight: 500; } From d61d7c791f7ed9ab32bf1113e012f00c6424a491 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Wed, 4 Nov 2020 19:04:55 +0100 Subject: [PATCH 008/127] improve langfilter & add glosses --- langfilter/langfilter.cabal | 9 ++- langfilter/langfilter.hs | 118 +++++++++++++++++++++++++++++++----- 2 files changed, 111 insertions(+), 16 deletions(-) diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index 4c18973..3440006 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -11,13 +11,18 @@ executable langfilter hs-source-dirs: . main-is: langfilter.hs ghc-options: - -Wall -threaded -rtsopts -with-rtsopts=-N + -Wall -Wno-missing-signatures -Wno-missing-pattern-synonym-signatures + -Wno-name-shadowing + -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010 default-extensions: BlockArguments, LambdaCase, + OverloadedStrings, PatternSynonyms, ViewPatterns build-depends: base ^>= 4.14.0.0, - pandoc-types == 1.17.* + pandoc-types ^>= 1.22, + text, + pretty-show ^>= 1.10 diff --git a/langfilter/langfilter.hs b/langfilter/langfilter.hs index 090c47e..07cf42d 100644 --- a/langfilter/langfilter.hs +++ b/langfilter/langfilter.hs @@ -1,27 +1,117 @@ +{-# OPTIONS_GHC -fdefer-typed-holes #-} import Text.Pandoc.Definition import Text.Pandoc.JSON import Text.Pandoc.Builder +import Text.Pandoc.Walk +import Data.Char (isUpper, isDigit) +import Data.Maybe +import Data.Text (Text) +import qualified Data.Text as Text main :: IO () -main = toJSONFilter \case - Code _ txt - | Just _ <- enclosed '/' '/' txt -> - Span (cls ["ipa", "ipa-broad"]) $ text' txt - | Just _ <- enclosed '[' ']' txt -> - Span (cls ["ipa", "ipa-narrow"]) $ text' txt - | Just txt' <- enclosed '{' '}' txt -> - Span (cls ["lang"]) $ text' txt' +main = toJSONFilter filter where + filter :: Pandoc -> Pandoc + filter = + walk spans . + walk (concatMap makeFigures) . + walk (concatMap glosses) + +spans :: Inline -> Inline +spans = \case + Code attrs txt + | Just ('\\', txt') <- Text.uncons txt -> Code attrs txt' + | Just _ <- enclosed '/' '/' txt -> ipaB txt + | Just _ <- enclosed '[' ']' txt -> ipaN txt + | Just txt' <- enclosed '{' '}' txt -> lang txt' + | Just txt' <- enclosed '!' '!' txt -> abbr txt' i -> i -cls :: [String] -> Attr -cls cs = ("", cs, []) +ipaB, ipaN, lang, abbr :: Text -> Inline +ipaB = Span (cls ["ipa", "ipa-broad"]) . text' +ipaN = Span (cls ["ipa", "ipa-narrow"]) . text' +lang = Span (cls ["lang"]) . text' +abbr = Span (cls ["abbr"]) . text' . endash -text' :: String -> [Inline] +text' :: Text -> [Inline] text' = toList . text +cls :: [Text] -> Attr +cls cs = ("", cs, []) -enclosed :: Char -> Char -> String -> Maybe String +glosses :: Block -> [Block] +glosses = \case + Div (_, cs, _) blocks | "glosses" `elem` cs -> + [RawBlock (Format "html") "
"] ++ + mapMaybe glossTable blocks ++ + [RawBlock (Format "html") "
"] + b -> [b] + +glossTable :: Block -> Maybe Block +glossTable = \case + Gloss l s g t -> Just $ make l Nothing s g t + PGloss l p s g t -> Just $ make l (Just p) s g t + HorizontalRule -> Nothing + b -> error $ "found " ++ show b ++ " in gloss section" + where + make l p s g t = + let n = length $ splitInlines s + colspecs = replicate n (AlignDefault, ColWidthDefault) + l' = cell1 n l; p' = cell1 n <$> p + ss = cells s; gs = cells g; t' = cell1 n t + in + Table ("", ["gloss"], []) (Caption Nothing []) colspecs + (TableHead mempty []) + [TableBody mempty (RowHeadColumns 0) [] $ concat + [[row "gloss-lang" [l']], + maybe [] (pure . row "gloss-pron" . pure) p', + [row "gloss-split" ss], + [row "gloss-gloss" gs], + [row "gloss-trans" [t']]]] + (TableFoot mempty []) + cell is = Cell mempty AlignDefault (RowSpan 1) (ColSpan 1) [Plain is] + cell1 n is = Cell mempty AlignDefault (RowSpan 1) (ColSpan n) [Plain is] + cells = map (cell . concatMap abbrs) . splitInlines + row c = Row ("", [c], []) + +endash :: Text -> Text +endash = Text.map \case '-' -> '–'; '_' -> ' '; c -> c + +abbrs :: Inline -> [Inline] +abbrs (Str txt) = go $ endash txt where + go "" = [] + go txt + | (l, r) <- Text.span isAbbr txt, + not $ Text.null l + = abbr' l : go r + | (l, r) <- Text.break isAbbr txt + = Str l : go r + abbr' txt = if Text.length txt == 1 then Str txt else abbr txt + isAbbr c = isUpper c || isDigit c || c `elem` (",.;\\[]" :: String) +abbrs i = [i] + +splitInlines :: [Inline] -> [Inlines] +splitInlines is = filter (not . null) $ go is where + go [] = [] + go is = + let (is1, is') = break (== Space) is in + fromList is1 : splitInlines (dropWhile (== Space) is') + +pattern Gloss l g w t = BulletList [[Plain l], [Plain g], [Plain w], [Plain t]] +pattern PGloss l p g w t = + BulletList [[Plain l], [Plain p], [Plain g], [Plain w], [Plain t]] + + +makeFigures :: Block -> [Block] +makeFigures (Div ("", ["figure"], []) blks) = + [html "
"] ++ blks ++ [html "
"] + where html = RawBlock (Format "html") +makeFigures b = [b] + + +enclosed :: Char -> Char -> Text -> Maybe Text enclosed o c txt - | length txt >= 2, head txt == o, last txt == c - = Just $ init $ tail txt + | Text.length txt >= 2, + Text.head txt == o, + Text.last txt == c + = Just $ Text.init $ Text.tail txt enclosed _ _ _ = Nothing From fc8addf0755608ade2127fb0c950ea061d3b3092 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Wed, 4 Nov 2020 19:05:26 +0100 Subject: [PATCH 009/127] improve template --- data/template.html | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/data/template.html b/data/template.html index de793c1..3b1254b 100644 --- a/data/template.html +++ b/data/template.html @@ -19,15 +19,12 @@ $endfor$ $if(title)$
-

$title$

- $if(subtitle)$ -

$subtitle$

- $endif$ +

$title$

$endif$ $if(toc)$ - ::: {.letter-list #conj-t} -`{!tt\}` `{!tk\}` `{!tg\}` `{!td\}` `{!tƶ\}` `{!tp\}` `{!tb\}` `{!ts\}` -`{!tš\}` `{!tl\}` `{!tm\}` `{!tn\}` `{!tr\}` `{!tč\}` `{!tǧ\}` `{!tw\}` -`{!th\}` `{!tf\}` `{!tj\}` +`{!tta}` `{!tka}` `{!tga}` `{!tda}` `{!tƶa}` `{!tpa}` `{!tba}` `{!tsa}` +`{!tla}` `{!tma}` `{!tna}` `{!tra}` `{!tča}` `{!tǧa}` `{!twa}` `{!tha}` +`{!tfa}` `{!tja}` ::: ::: {.letter-list #conj-ƶ} -`{!ƶt\}` `{!ƶk\}` `{!ƶg\}` `{!ƶd\}` `{!ƶƶ\}` `{!ƶp\}` `{!ƶb\}` `{!ƶs\}` -`{!ƶš\}` `{!ƶl\}` `{!ƶm\}` `{!ƶn\}` `{!ƶr\}` `{!ƶč\}` `{!ƶǧ\}` `{!ƶw\}` -`{!ƶh\}` `{!ƶf\}` `{!ƶj\}` +`{!ƶta}` `{!ƶka}` `{!ƶga}` `{!ƶda}` `{!ƶƶa}` `{!ƶpa}` `{!ƶba}` `{!ƶsa}` +`{!ƶla}` `{!ƶma}` `{!ƶna}` `{!ƶra}` `{!ƶča}` `{!ƶǧa}` `{!ƶwa}` `{!ƶha}` +`{!ƶfa}` `{!ƶja}` ::: ::: {.letter-list #conj-s} -`{!st\}` `{!sk\}` `{!sg\}` `{!sd\}` `{!sƶ\}` `{!sp\}` `{!sb\}` `{!ss\}` -`{!sš\}` `{!sl\}` `{!sm\}` `{!sn\}` `{!sr\}` `{!sč\}` `{!sǧ\}` `{!sw\}` -`{!sh\}` `{!sf\}` `{!sj\}` `{!šš\}` +`{!sta}` `{!ska}` `{!sga}` `{!sda}` `{!sƶa}` `{!spa}` `{!sba}` `{!ssa}` +`{!sla}` `{!sma}` `{!sna}` `{!sra}` `{!sča}` `{!sǧa}` `{!swa}` `{!sha}` +`{!sfa}` `{!sja}` `{!šša}` ::: -Conjuncts with `{!š\}` are the same as with `{!s\}`, but with the line above. In -the case of `{!šš\}` the lines join up. +Conjuncts with `{!ša}` are the same as with `{!sa}`, but with the line above. In +the case of `{!šša}` the lines join up. ::: {.letter-list #conj-l} -`{!lt\}` `{!lk\}` `{!lg\}` `{!ld\}` `{!lƶ\}` `{!lp\}` `{!lb\}` `{!ls\}` -`{!lš\}` `{!ll\}` `{!lm\}` `{!ln\}` `{!lr\}` `{!lč\}` `{!lǧ\}` `{!lw\}` -`{!lh\}` `{!lf\}` `{!lj\}` +`{!lta}` `{!lka}` `{!lga}` `{!lda}` `{!lƶa}` `{!lpa}` `{!lba}` `{!lsa}` +`{!lla}` `{!lma}` `{!lna}` `{!lra}` `{!lča}` `{!lǧa}` `{!lwa}` `{!lha}` +`{!lfa}` `{!lja}` ::: ::: {.letter-list #conj-m} -`{!mt\}` `{!mk\}` `{!mg\}` `{!md\}` `{!mƶ\}` `{!mp\}` `{!mb\}` `{!ms\}` -`{!mš\}` `{!ml\}` `{!mm\}` `{!mn\}` `{!mr\}` `{!mč\}` `{!mǧ\}` `{!mw\}` -`{!mh\}` `{!mf\}` `{!mj\}` +`{!mta}` `{!mka}` `{!mga}` `{!mda}` `{!mƶa}` `{!mpa}` `{!mba}` `{!msa}` +`{!mla}` `{!mma}` `{!mna}` `{!mra}` `{!mča}` `{!mǧa}` `{!mwa}` `{!mha}` +`{!mfa}` `{!mja}` ::: ::: {.letter-list #conj-n} -`{!nt\}` `{!nk\}` `{!ng\}` `{!nd\}` `{!nƶ\}` `{!np\}` `{!nb\}` `{!ns\}` -`{!nš\}` `{!nl\}` `{!nm\}` `{!nn\}` `{!nr\}` `{!nč\}` `{!nǧ\}` `{!nw\}` -`{!nh\}` `{!nf\}` `{!nj\}` +`{!nta}` `{!nka}` `{!nga}` `{!nda}` `{!nƶa}` `{!npa}` `{!nba}` `{!nsa}` +`{!nla}` `{!nma}` `{!nna}` `{!nra}` `{!nča}` `{!nǧa}` `{!nwa}` `{!nha}` +`{!nfa}` `{!nja}` ::: ::: {.letter-list #conj-r} -`{!rt\}` `{!rk\}` `{!rg\}` `{!rd\}` `{!rƶ\}` `{!rp\}` `{!rb\}` `{!rs\}` -`{!rš\}` `{!rl\}` `{!rm\}` `{!rn\}` `{!rr\}` `{!rč\}` `{!rǧ\}` `{!rw\}` -`{!rh\}` `{!rf\}` `{!rj\}` +`{!rta}` `{!rka}` `{!rga}` `{!rda}` `{!rƶa}` `{!rpa}` `{!rba}` `{!rsa}` +`{!rla}` `{!rma}` `{!rna}` `{!rra}` `{!rča}` `{!rǧa}` `{!rwa}` `{!rha}` +`{!rfa}` `{!rja}` ::: ::: {.letter-list #conj-o} -`{!kk\}` `{!ks\}` `{!pp\}` `{!ps\}` `{!pj\}` -`{!bj\}` `{!čs\}` `{!čč\}` `{!hh\}` -`{!hn\}` `{!hm\}` `{!fn\}` `{!fm\}` +`{!kka}` `{!ksa}` `{!ppa}` `{!psa}` `{!pja}` +`{!bja}` `{!čsa}` `{!čča}` `{!hha}` +`{!hna}` `{!hma}` `{!fna}` `{!fma}` ::: If a word ends in a consnant, a horizontal line is drawn under it to specify From bb0bbf0fbad05ba85474c119943ac726089b6e04 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 3 May 2021 18:47:34 +0200 Subject: [PATCH 083/127] more glyphs --- laantas-script/Glyphs.hs | 148 ++++++++++++++++++++------------------- 1 file changed, 75 insertions(+), 73 deletions(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index 622b8df..0884ebe 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -62,10 +62,11 @@ tǧ = G {path = tǧPath, width = 10} tw = G {path = twPath, width = 10} th = G {path = thPath, width = 12} tf = G {path = tfPath, width = 10} -tj = G {path = tjPath, width = 5} +tj = G {path = tjPath, width = 4.75} t0 = G {path = t0Path, width = 5} tPath = P [mA (0,0), lA (5.5,0)] <> shiftX 1.5 aPath <> shiftX 5.25 aPath +tNarrow = P [mA (0,0), lA (5,0)] <> shiftX 1.5 aPath <> shiftX 4.75 aPath tPart ℓ = shiftX 1.5 aPath <> P [mA (0,0), lR (ℓ,0)] ttPath = P [mA (0,0), lR (7,0)] <> shiftX 0.75 aPath @@ -73,7 +74,7 @@ ttPath = P [mA (0,0), lR (7,0)] <> shiftX 4.75 aPath <> shiftX 6.75 aPath tkPath = tPart 5 <> shiftX 5 (aPath <> kBottomShort <> P [mA (4,-3), lR (0,8)]) -tgPath = shiftX 5 gShortHat <> tkPath -- tPart 5 <> shiftX 5 gShort +tgPath = shiftX 5 gShortHat <> tkPath tdPath = tPart 4 <> shiftX 4 dPath tƶPath = tdPath <> P [mA (6,-3), lR (3,0)] tpPath = P [mA (2,-3), lR (0,8), mA (0,-3), lR (6,0)] <> shiftX 4 pPath @@ -89,8 +90,7 @@ tǧPath = tPart 4 <> shiftX 5 ǧPath twPath = tPart 6 <> shiftX 4 wPath thPath = tPart 4 <> shiftX 4 hPath tfPath = tPart 4 <> shiftX 4 fPath -tjPath = P [mA (2,0), lR (0,5), mA (0,0), lR (4,0), mA (0,-3), - lR (5,0), lR (0,8)] +tjPath = tPart 3.5 <> shiftX (-0.5) jTall t0Path = tPath <> P [mA (1.5,7), cR (1.8,-0.25) (3.1,0) (3.5,0.5)] @@ -146,14 +146,14 @@ dLong = dFree <> shiftX 1.5 dJoin ƶš = G {path = ƶšPath, width = 10} ƶl = G {path = ƶlPath, width = 10} ƶm = G {path = ƶmPath, width = 11} -ƶn = G {path = ƶnPath, width = 10} +ƶn = G {path = ƶnPath, width = 9.75} ƶr = G {path = ƶrPath, width = 10} ƶč = G {path = ƶčPath, width = 10} ƶǧ = G {path = ƶǧPath, width = 10} ƶw = G {path = ƶwPath, width = 11} ƶh = G {path = ƶhPath, width = 13} ƶf = G {path = ƶfPath, width = 11} -ƶj = G {path = ƶjPath, width = 7} +ƶj = G {path = ƶjPath, width = 7.5} ƶ0 = G {path = ƶ0Path, width = 3.5} ƶPath = gHat <> dPath @@ -168,21 +168,21 @@ dLong = dFree <> shiftX 1.5 dJoin ƶšPath = dPart <> shiftX 5 šPath ƶlPath = dPart <> shiftX 5 lPath ƶmPath = dPart <> shiftX 5 mPath -ƶnPath = dPart' <> shiftX 5 nPath -- TODO dPart or dPart'? +ƶnPath = dPart' <> shiftX 4.75 nPath ƶrPath = dPart <> shiftX 5 rCursive ƶčPath = dFree <> shiftX 5 čPath ƶǧPath = dFree <> shiftX 5 ǧPath ƶwPath = dPart' <> shiftX 5 wPath ƶhPath = dPart <> shiftX 5 hPath ƶfPath = dFree <> shiftX 4 fPath -ƶjPath = dFree <> shiftX 2 jPath +ƶjPath = dFree <> shiftX 4.5 jPathShort ƶ0Path = dFree <> P [mA (1,7), cR (1.8,-0.25) (2.2,0) (2.5,0.5)] pGlyphs = [("p", p), ("pp", pp), ("ps", ps), ("pj", pj)] p = G {path = pPath, width = 5.5} -pp = G {path = ppPath, width = 8} +pp = G {path = ppPath, width = 9} ps = G {path = psPath, width = 10.5} pj = G {path = pjPath, width = 10} @@ -197,7 +197,6 @@ ppPath = P [mA (1.5,5), cR (-1,-3) (-2,-4) (0,-5), cR (1,-0.5) (2.5,-0.5) (7.5,0)] <> shiftX 8.75 aPath psPath = pPart <> shiftX 5.5 sPath --- pjPath = pPath <> shiftX 7 jPath pjPath = shiftX 2 pInit <> P [cR (-1,-3) (-2,-4) (0,-5), cR (1,-0.5) (4,-1) (4,1), @@ -224,59 +223,55 @@ sGlyphs = [("s",s), ("st",st), ("sk",sk), ("sg",sg), ("sd",sd), ("sƶ",sƶ), ("sf",sf), ("sj",sj)] s = G {path = sPath, width = 5.125} -st = G {path = stPath, width = 9.5} +st = G {path = stPath, width = 8.5} sk = G {path = skPath, width = 9} sg = G {path = sgPath, width = 9} sd = G {path = sdPath, width = 9} sƶ = G {path = sƶPath, width = 9} sp = G {path = spPath, width = 9.5} -sb = G {path = sbPath, width = 10} +sb = G {path = sbPath, width = 10.5} ss = G {path = ssPath, width = 10} sš = G {path = sšPath, width = 10} -sl = G {path = slPath, width = 9.5} -sm = G {path = smPath, width = 11} -sn = G {path = snPath, width = 10} -sr = G {path = srPath, width = 9} +sl = G {path = slPath, width = 9} +sm = G {path = smPath, width = 10.5} +sn = G {path = snPath, width = 9.5} +sr = G {path = srPath, width = 7} sč = G {path = sčPath, width = 9} sǧ = G {path = sǧPath, width = 10} sw = G {path = swPath, width = 10} sh = G {path = shPath, width = 13} -sf = G {path = sfPath, width = 10} -sj = G {path = sjPath, width = 6} +sf = G {path = sfPath, width = 10.25} +sj = G {path = sjPath, width = 5} s0 = G {path = s0Path, width = 5} -sPath = sPartLine <> shiftX 5 aPath --- sPart = P [mA (0, 0), lR (0, 3.5), aR 1.5 1.5 0 Small CCW (3,0), lR (0,-3.5)] -sPart = P [mA (0, 0), +sPath = sPartLine <> shiftX 4.75 aPath +sPart' = P [mA (0, 0), cR (0.15,0.5) (0,2.5) (0,3.5), - aR 1.5 1.5 0 Small CCW (3,0), - qR (0,-3) (-0.5, -3.5)] -sPartIso = P [mA (0, 0), - cR (0.15,0.5) (0,2.5) (0,3.5), - aR 1.5 1.5 0 Small CCW (3,0), - cR (0,-0.5) (-0.15,-2.5) (0,-3.5)] -sPartLine = sPart <> P [mA (2.5,0), lR (2.5,0)] -stPath = sPartLine <> shiftX 4 tPath + aR 1.5 1.5 0 Small CCW (3,0)] +sPart = sPart' <> P [qR (0,-3) (-0.5,-3.5)] +sPartIso = sPart' <> P [cR (0,-0.5) (-0.15,-2.5) (0,-3.5)] +sPartLine = sPart <> P [mA (2.5,0), qR (1,0.25) (2.5,0)] +stPath = sPart <> P [lR (1,0)] <> shiftX 3.5 tNarrow skPath = sPartLine <> shiftX 5 kShort sgPath = sPartLine <> shiftX 5 gShort sdPath = sPart <> P [mA (2.5,0), lR (1.5,0)] <> shiftX 4 dPath sƶPath = sPart <> P [mA (2.5,0), lR (1.5,0)] <> shiftX 4 ƶPath spPath = sPartIso <> shiftX 4 pPath --- TODO -sbPath = sPartIso <> shiftX 4 bPath <> P [mA (3,0), lR (0,-3), lR (3.5,0), mA (10,5)] +sbPath = sPart' <> + P [cR (0,-2.5) (-0.25,-2.5) (0,-6.5), qR (2,0.5) (7.5,0), lR (0,8)] <> + shiftX 4.5 wPart <> P [mA (10.5,5)] ssPath = sPartLine <> shiftX 5 sPath sšPath = sPartLine <> shiftX 5 šPath -slPath = sPart <> P [mA (2.5,0), lR (3.5,0)] <> shiftX 4.5 lPath -smPath = sPart <> P [mA (2.5,0), lR (3,0)] <> shiftX 5 mPath -snPath = sPart <> P [mA (2.5,0), lR (4.5,0)] <> shiftX 5 nPath -srPath = sPart <> P [mA (2.5,0), lR (4.5,0)] <> shiftX 4 rShort +slPath = sPart <> P [mA (2.5,0), qR (1.25,0.5) (3.5,0)] <> shiftX 4.5 lPath +smPath = sPartLine <> shiftX 4.5 mPath +snPath = sPart <> P [mA (2.5,0), qR (1.5,0.5) (4.5,0)] <> shiftX 4.5 nPath +srPath = sPart <> P [mA (2.5,0), qR (2,0.75) (4.5,0.25)] <> shiftX 4 rShort sčPath = sPart <> P [mA (2.5,0), lR (1.5,0)] <> shiftX 3 čFlat sǧPath = sPartIso <> shiftX 4 ǧPath swPath = sPart <> P [mA (2.5,0), lR (4,0)] <> shiftX 4 wPath shPath = sPartIso <> shiftX 5 hPath -sfPath = sPartIso <> shiftX 4 fPath -sjPath = P [mA (0,0), lR (0,3.5), aR 1.5 1.5 0 Small CCW (3,0), lR (0,-1.5), - mA (3,0), lR (3,0), lR (0,5), mA (3,2), lR (3,0)] +sfPath = sPartIso <> shiftX 4.25 fPath +sjPath = sPartLine <> jTall s0Path = sPath <> P [mA (1.5,7), cR (1.8,-0.25) (2.6,0) (3,0.5)] @@ -307,8 +302,8 @@ s0Path = sPath <> P [mA (1.5,7), cR (1.8,-0.25) (2.6,0) (3,0.5)] šj = s2š sj š0 = s2š s0 -šLine = P [mA (0.5,-1.5), lR (2,0)] -ššPath = ssPath <> P [mA (1,-2), lR (7,0), mA (10,5)] +šLine = P [mA (0.5,-2.25), qR (1.5,-0.25) (2,0.25)] +ššPath = P [mA (0.5,-2), cR (2,-1) (5,1) (7,0)] <> ssPath špPath = šLine <> spPath šbPath = sPart <> šLine <> P [mA (3,0), lR (4,0)] <> shiftX 4 bPath s2š g@(G {path}) = g {path = šLine <> path} @@ -331,14 +326,14 @@ lb = G {path = lbPath, width = 10.5} ls = G {path = lsPath, width = 9.5} lš = G {path = lšPath, width = 9.5} lm = G {path = lmPath, width = 10.5} -ln = G {path = lnPath, width = 9.5} -lr = G {path = lrPath, width = 9.5} +ln = G {path = lnPath, width = 9.25} +lr = G {path = lrPath, width = 8} lč = G {path = lčPath, width = 9.5} lǧ = G {path = lǧPath, width = 9.5} lw = G {path = lwPath, width = 10.5} lh = G {path = lhPath, width = 12.5} lf = G {path = lfPath, width = 10.5} -lj = G {path = ljPath, width = 4.5} +lj = G {path = ljPath, width = 5} l0 = G {path = l0Path, width = 3.75} lPath = lPart <> P [mA (4.5,0), lR (0,5)] @@ -363,14 +358,14 @@ lbPath = lPart' <> shiftX 4.5 bPath lsPath = lPart <> shiftX 4.5 sPath lšPath = lPart <> shiftX 4.5 šPath lmPath = lPart <> shiftX 4.5 mPath -lnPath = lPart' <> shiftX 4.5 nPath -- TODO lPart or lPart'? -lrPath = lPart <> shiftX 4.5 rCursive +lnPath = lPart' <> shiftX 4.25 nPath +lrPath = lPart <> P [qR (0,1.5) (1,1.5), qR (2,0) (2,-2), mR (0,-6), lR (0,8)] lčPath = lFree' <> shiftX 4.5 čPath lǧPath = lFree' <> shiftX 4.5 ǧPath lwPath = lPart' <> shiftX 4.5 wPath lhPath = lPart <> shiftX 4.5 hPath lfPath = lFree' <> shiftX 4.5 fPath -ljPath = lPart <> shiftX 0.5 gShortHat <> P [mA (4.5,-3), lR (0,8)] +ljPath = lFree' <> jTall l0Path = lFree <> P [mA (1.25,7), cR (1.8,-0.25) (2.2,0) (2.5,0.5)] @@ -439,49 +434,51 @@ nk = G {path = nkPath, width = 9} ng = G {path = ngPath, width = 9} nd = G {path = ndPath, width = 10} nƶ = G {path = nƶPath, width = 10} -np = G {path = npPath, width = 10} +np = G {path = npPath, width = 10.25} nb = G {path = nbPath, width = 11} ns = G {path = nsPath, width = 10} nš = G {path = nšPath, width = 10} nl = G {path = nlPath, width = 10} nm = G {path = nmPath, width = 11} nn = G {path = nnPath, width = 10} -nr = G {path = nrPath, width = 6} +nr = G {path = nrPath, width = 6.5} nč = G {path = nčPath, width = 10} -nǧ = G {path = nǧPath, width = 9.5} +nǧ = G {path = nǧPath, width = 9.75} nw = G {path = nwPath, width = 11} nh = G {path = nhPath, width = 13} -nf = G {path = nfPath, width = 10.5} -nj = G {path = njPath, width = 5} +nf = G {path = nfPath, width = 10.75} +nj = G {path = njPath, width = 5.25} n0 = G {path = n0Path, width = 3.5} nPath = nPart <> P [mA (5,0), lR (0,5)] -nPart = nPart' <> dJoin -nPart' = P [mA (3.5,1.5), cR (0,-1) (-0.5,-1.5) (-1,-1.5), - aR 2.5 2.5 0 Large CCW (0,5)] -nLong = nPart' <> P [mA (2.5,5), lR (1.5,0)] <> shiftX 1.5 dJoin +nPart = nPart' <> P [cR (1.6,-0.25) (2.5,-1.75) (2.5,-2.5)] +nPart' = P [mA (3.5,1), cR (0.5,-1) (-0.5,-1.125) (-1,-1), + cR (-3.2,0.5) (-3.2,5.5) (0,5)] +nLong = nPart' <> P [cR (1.6,-0.25) (4,-1) (4,-2.5)] nFlat = P [mA (5,0), lR (-2.5,0), aR 2.5 2.5 0 Large CCW (0,5), cR (0.5,0) (1,-0.5) (1,-1.5)] +nFree = nPart' <> P [qR (0.8,-0.125) (1.5,-1)] +nFree' = nPart' <> P [qR (0.8,-0.125) (1,-1)] ntPath = nLong <> shiftX 5 tPath nkPath = nFlat <> shiftX 5 kShort ngPath = nFlat <> shiftX 5 gShort ndPath = nFlat <> shiftX 5 dPath nƶPath = nFlat <> shiftX 5 ƶPath -npPath = ńPath <> shiftX 4.5 pPath +npPath = nFree <> shiftX 4.75 pPath nbPath = nFlat <> P [mA (5,0), lR (2,0)] <> shiftX 5 bPath nsPath = nFlat <> shiftX 5 sPath nšPath = nFlat <> shiftX 5 šPath nlPath = nFlat <> P [mA (5,0), lR (1,0)] <> shiftX 5 lPath nmPath = nFlat <> P [mA (5,0), lR (0.5,0)] <> shiftX 5 mPath nnPath = nFlat <> P [mA (5,0), lR (2,0)] <> shiftX 5 nPath -nrPath = nPart' <> P [mA (2.5,5), lR (0.5,0)] <> shiftX 3 rShort +nrPath = nFree' <> P [qR (0,1) (1,1), qR (2,0) (2,-2), mR (0,-6), lR (0,8)] nčPath = nFlat <> shiftX 4 čFlat -nǧPath = ńPath <> shiftX 4.5 ǧPath +nǧPath = nFree' <> shiftX 4.75 ǧPath nwPath = nFlat <> P [mA (5,0), lR (2,0)] <> shiftX 5 wPath nhPath = nFlat <> shiftX 5 hPath -nfPath = ńPath <> shiftX 4.5 fPath -njPath = ńPath <> P [mA (1,-3), lR (4,0), lR (0,8)] -n0Path = ńPath <> P [mA (1,7), cR (1.8,-0.25) (2.2,0) (2.5,0.5)] +nfPath = nFree' <> shiftX 4.75 fPath +njPath = nFree' <> jTall +n0Path = nFree <> P [mA (1,7), cR (1.8,-0.25) (2.2,0) (2.5,0.5)] rGlyphs = [("r", r), ("rt", rt), ("rk", rk), ("rg", rg), ("rd", rd), ("rƶ", rƶ), @@ -608,9 +605,11 @@ fnPath = fPath <> shiftX 7 nPath fmPath = fPart <> P [lR (0,1)] <> mBump <> mBump' <> P [mA (12,0), lR (0,5)] f0Path = fPath <> P [mA (1.5,7), cR (2.8,-0.35) (3.1,0) (3.5,0.5)] -j = G {path = jPath, width = 5} +j = G {path = jPath, width = 4} -jPath = P [mA (0,0), lR (5,0)] <> shiftX 4.75 aPath +jPath = P [mA (0,0), qR (1.25,0.5) (4,0)] <> shiftX 3.75 aPath +jPathShort = P [mA (0,0), qR (1,0.25) (3,0)] <> shiftX 2.75 aPath +jTall = gHat <> P [lR (0,8)] vGlyphs = [("a", a), ("á", á), ("i", i), ("í", í), ("u", u), ("ú", ú), @@ -628,7 +627,7 @@ au = G {path = auPath, width = 4.5} ia = G {path = iaPath, width = 5} ua = G {path = uaPath, width = 4.5} ḿ = G {path = ḿPath, width = 6} -ń = G {path = ńPath, width = 3} +ń = G {path = ńPath, width = 4} ł = G {path = łPath, width = 3.75} ŕ = G {path = ŕPath, width = 5} @@ -650,9 +649,7 @@ uaPath = uNarrow <> shiftX 4.5 aPath aR 1.5 1.5 0 Small CCW (3,0), lR (0,-2), mA (5.5,0), cR (0.25,0.2) (0.5,2.25) (0.5,3.5), aR 1.5 1.5 0 Small CW (-3,0)] -ńPath = P [mA (3.5,1.5), cR (0,-1) (-0.5,-1.5) (-1,-1.5), - aR 2.5 2.5 0 Large CCW (0,5), - cR (0.5,0) (1,-0.5) (1,-1.5)] +ńPath = nFree łPath = lFree ŕPath = rPart <> P [mA (5,0), lR (0,5)] @@ -679,12 +676,17 @@ dḿ = da <> P [mR (-4,-3), cR (-0.375,1.125) (-0.25,1.275) (-0.25,1.375), lR (0,-1), mR (0,1), aR 0.625 0.625 0 Small CCW (1.5,0), cR (0.125,-0.1) (0,-1.125) (-0.25,-1.375)] -dń = da <> P [mR (-3,-2.5), aR 1 1 0 Small CCW (0,2)] -dł = da <> P [mR (-1.5,-3.5), cR (-1.125,-0.375) (-1.275,-0.25) (-1.375,-0.25), - aR 0.625 0.625 0 Small CCW (0,1.5), - lR (1,0), mR (-1,0), - aR 0.625 0.625 0 Small CCW (0,1.5), - cR (0.1,0.125) (1.125,0) (1.375,-0.25)] +dń = da <> P [mR (-2,-2.5), + qR (0.25,-0.625) (-0.5,-0.5), + cR (-1.5,0.25) (-1.5,2.75) (0,2.5), + qR (0.375,-0.0625) (0.5,-0.3)] +dł = da <> + P [mR (-2,-2.75), + cR (0.125,-0.125) (0,-0.375) (-0.625,-0.25), + cR (-0.75,0.15) (-1,1.25) (0,1.25), + lR (0.375,0), mR (-0.625,0), + cR (-0.75,0.15) (-1,1.25) (0,1.25), + qR (1,0) (1.125,-0.375)] dŕ = da <> P [mR (-3,0), cR (1,0) (3,-1) (3,-2)] punctuation :: Map Text Glyph From b3962582d10c74ae6457bc2c4d932542b18d4107 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 10 May 2021 16:16:03 +0200 Subject: [PATCH 084/127] more glyphs --- laantas-script/Glyphs.hs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index 0884ebe..e0de361 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -123,8 +123,8 @@ d = G {path = dPath, width = 5} dPath = dPart <> P [mA (5,-3), lR (0,8)] dPart' = dBase <> dJoin' dPart = dBase <> dJoin -dJoin = P [{-mA (2,5),-} cR (2,0) (3,-0.75) (3,-1.5)] -dJoin' = P [{-mA (2,5),-} cR (1.75,0) (2.5,-0.75) (2.85,-2.5)] +dJoin = P [cR (2,0) (3,-0.75) (3,-1.5)] +dJoin' = P [cR (1.75,0) (2.5,-0.75) (2.85,-2.5)] dBase = P [mA (0,0), lR (3.5,0), cR (0,1.5) (-3.5,3.5) (-3.5,5), lR (2,0)] dFree = dBase <> P [mA (2,5), lR (1.5,0)] dLong = dFree <> shiftX 1.5 dJoin @@ -147,12 +147,12 @@ dLong = dFree <> shiftX 1.5 dJoin ƶl = G {path = ƶlPath, width = 10} ƶm = G {path = ƶmPath, width = 11} ƶn = G {path = ƶnPath, width = 9.75} -ƶr = G {path = ƶrPath, width = 10} +ƶr = G {path = ƶrPath, width = 8} ƶč = G {path = ƶčPath, width = 10} ƶǧ = G {path = ƶǧPath, width = 10} ƶw = G {path = ƶwPath, width = 11} ƶh = G {path = ƶhPath, width = 13} -ƶf = G {path = ƶfPath, width = 11} +ƶf = G {path = ƶfPath, width = 10} ƶj = G {path = ƶjPath, width = 7.5} ƶ0 = G {path = ƶ0Path, width = 3.5} @@ -169,7 +169,7 @@ dLong = dFree <> shiftX 1.5 dJoin ƶlPath = dPart <> shiftX 5 lPath ƶmPath = dPart <> shiftX 5 mPath ƶnPath = dPart' <> shiftX 4.75 nPath -ƶrPath = dPart <> shiftX 5 rCursive +ƶrPath = dPart <> P [qR (0,1.5) (1,1.5), qR (2,0) (2,-2), mR (0,-6), lR (0,8)] ƶčPath = dFree <> shiftX 5 čPath ƶǧPath = dFree <> shiftX 5 ǧPath ƶwPath = dPart' <> shiftX 5 wPath @@ -327,7 +327,7 @@ ls = G {path = lsPath, width = 9.5} lš = G {path = lšPath, width = 9.5} lm = G {path = lmPath, width = 10.5} ln = G {path = lnPath, width = 9.25} -lr = G {path = lrPath, width = 8} +lr = G {path = lrPath, width = 7.5} lč = G {path = lčPath, width = 9.5} lǧ = G {path = lǧPath, width = 9.5} lw = G {path = lwPath, width = 10.5} @@ -510,8 +510,6 @@ r0 = G {path = r0Path, width = 5} rPath = rPart <> P [mA (5,-3), lR (0,8)] rPart = P [mA (0,5), cR (3.5,0) (5,-1) (5,-2)] -rPartCursive = P [mA (0,3), cR (0,1) (1,2) (3,2), cR (1,0) (2,-1) (2,-2)] -rCursive = rPartCursive <> P [mA (5,-3), lR (0,8)] rPartMid = P [mA (0,5), cR (1.25,0) (3.5,-1) (3.5,-2)] rPartShort = P [mA (0,5), cR (1,0) (3,-1) (3,-2)] rShort = rPartShort <> P [mA (3,-3), lR (0,8)] @@ -598,9 +596,13 @@ fm = G {path = fmPath, width = 12} f0 = G {path = f0Path, width = 6} fPath = fPart <> P [lR (0,2.5)] -fPart = P [mA (3.5,2.5), lR (-1, 0), lR (0,2.5), - aR 2.5 2.5 0 Large CW (0,-5), lR (1,0), - aR 2.5 2.5 0 Small CW (2.5, 2.5)] +fPart = P [mA (4.25,2.5), + cR (0.5,-1) (-1.75,-1) (-1.75, 0), + cR (0,1) (1.75,0.75) (1.75,1.75), + cR (0,0.35) (-0.15,0.65) (-1.75,0.75), + cR (-3.2,0.5) (-3.2,-5) (1,-5.5), + cR (1.6,-0.25) (2.5,1) (2.5,3) + ] fnPath = fPath <> shiftX 7 nPath fmPath = fPart <> P [lR (0,1)] <> mBump <> mBump' <> P [mA (12,0), lR (0,5)] f0Path = fPath <> P [mA (1.5,7), cR (2.8,-0.35) (3.1,0) (3.5,0.5)] From 10d0b115700d28a6ea6f657a61f5df6f0240f9d7 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 11 May 2021 00:52:17 +0200 Subject: [PATCH 085/127] make diacritics width-aware --- laantas-script/Glyphs.hs | 69 +++++++++++++++++++----------------- laantas-script/GlyphsBase.hs | 37 +++++++++++++------ laantas-script/Split.hs | 18 +++++----- 3 files changed, 72 insertions(+), 52 deletions(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index e0de361..b5b1cf8 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -1,7 +1,7 @@ {-# OPTIONS_GHC -Wno-missing-signatures -Wno-name-shadowing #-} module Glyphs - (Glyph (..), Segs (..), Piece, doGlyphs, + (Glyph (..), Diacritic, simpleDia, Segs (..), EGlyph, Word, doGlyphs, withSize, charHeight', lineHeight', spaceWidth', gap', charHeight, lineHeight, spaceWidth, gap, @@ -9,13 +9,12 @@ module Glyphs initials, finals, vowels, medials, num, numbers, punctuation, wave) where +import Prelude hiding (Word) import Data.Map (Map) import qualified Data.Map.Strict as Map import GlyphsBase -type Piece = (Glyph, [Segs]) - initials :: Map Text Glyph initials = Map.fromList $ tGlyphs <> kGlyphs <> ƶGlyphs <> sGlyphs <> šGlyphs <> lGlyphs <> @@ -28,7 +27,7 @@ finals = Map.fromList $ [("t",t0), ("ƶ", ƶ0), ("s",s0), ("š",š0), ("l",l0), ("m",m0), ("n", n0), ("r", r0), ("f", f0)] -medials :: Map Text Segs +medials :: Map Text [Diacritic] medials = Map.fromList $ [("a", da), ("á", dá), ("i", di), ("í", dí), ("u", du), ("ú", dú), ("ai", dai), ("au", dau), ("ia", dia), ("ua", dua), ("ḿ", dḿ), @@ -658,38 +657,42 @@ uaPath = uNarrow <> shiftX 4.5 aPath adot = P . circR 0.2 -da = P [lR (0,5)] -dá = da <> adot (-3.5,-3) <> adot (2,0) -di = da <> P [cR (1,-2) (3,-3) (0,-3)] -dí = da <> P [cR (1,-2) (4,-3) (-4,-3)] -du = da <> P [lR (-4,0)] -dú = du <> P [mR (4,-3), lR (-3,0)] +withWidth f w = (f w, w) +sP = simpleDia . P -dai = da <> P [mR (-4,-3), lR (2.5,0), lR (0,3)] -dau = da <> P [mR (-3,-3.5), - cR (-1.5,0.25) (-1.5,3.25) (0,3), - cR (1.5,-0.25) (1.5,-3.25) (0,-3), - cR (1,-0.25) (2,0.5) (3,0)] -dia = di <> adot (-1.5,0) -dua = du <> adot (2,-2) +-- dont move because letters like t have the join not quite at the edge +da = [sP [lR (0,5)]] +dá = da <> [withWidth \w -> P [mA (w/2-1,8), cR (0.75,-0.5) (1.25,0.5) (2,0)]] +di = da <> [sP [cR (1,-2) (3,-3) (0,-3)]] +dí = da <> [sP [cR (1,-2) (4,-3) (-4,-3)]] +du = da <> [sP [lR (-4,0)]] +dú = du <> [sP [mR (4,-3), lR (-3,0)]] -dḿ = da <> P [mR (-4,-3), cR (-0.375,1.125) (-0.25,1.275) (-0.25,1.375), - aR 0.625 0.625 0 Small CCW (1.5,0), - lR (0,-1), mR (0,1), - aR 0.625 0.625 0 Small CCW (1.5,0), - cR (0.125,-0.1) (0,-1.125) (-0.25,-1.375)] -dń = da <> P [mR (-2,-2.5), - qR (0.25,-0.625) (-0.5,-0.5), - cR (-1.5,0.25) (-1.5,2.75) (0,2.5), - qR (0.375,-0.0625) (0.5,-0.3)] +dai = da <> [sP [mR (-4,-3), lR (2.5,0), lR (0,3)]] +dau = da <> [sP [mR (-3,-3.5), + cR (-1.5,0.25) (-1.5,3.25) (0,3), + cR (1.5,-0.25) (1.5,-3.25) (0,-3), + cR (1,-0.25) (2,0.5) (3,0)]] +dia = di <> [withWidth \w -> adot (-w/2,0)] +dua = du <> [withWidth \w -> P [mA (w/2,7)] <> adot (0,0)] + +dḿ = da <> [sP [mR (-4,-3), cR (-0.375,1.125) (-0.25,1.275) (-0.25,1.375), + aR 0.625 0.625 0 Small CCW (1.5,0), + lR (0,-1), mR (0,1), + aR 0.625 0.625 0 Small CCW (1.5,0), + cR (0.125,-0.1) (0,-1.125) (-0.25,-1.375)]] +dń = da <> [sP [mR (-2,-2.5), + qR (0.25,-0.625) (-0.5,-0.5), + cR (-1.5,0.25) (-1.5,2.75) (0,2.5), + qR (0.375,-0.0625) (0.5,-0.3)]] dł = da <> - P [mR (-2,-2.75), - cR (0.125,-0.125) (0,-0.375) (-0.625,-0.25), - cR (-0.75,0.15) (-1,1.25) (0,1.25), - lR (0.375,0), mR (-0.625,0), - cR (-0.75,0.15) (-1,1.25) (0,1.25), - qR (1,0) (1.125,-0.375)] -dŕ = da <> P [mR (-3,0), cR (1,0) (3,-1) (3,-2)] + [sP [mR (-2,-2.75), + cR (0.125,-0.125) (0,-0.375) (-0.625,-0.25), + cR (-0.75,0.15) (-1,1.25) (0,1.25), + lR (0.375,0), mR (-0.625,0), + cR (-0.75,0.15) (-1,1.25) (0,1.25), + qR (1,0) (1.125,-0.375)]] +dŕ = da <> [sP [mR (-3,0), cR (1,0) (3,-1) (3,-2)]] punctuation :: Map Text Glyph punctuation = Map.fromList diff --git a/laantas-script/GlyphsBase.hs b/laantas-script/GlyphsBase.hs index 83c3606..e0e986d 100644 --- a/laantas-script/GlyphsBase.hs +++ b/laantas-script/GlyphsBase.hs @@ -3,8 +3,8 @@ module GlyphsBase (module GlyphsBase, module Svg) where import Svg hiding (shiftX, shiftY, shift, width, size) import qualified Svg -import Data.List.NonEmpty (NonEmpty (..)) -import Data.Semigroup (sconcat) +import Prelude hiding (Word) +import Data.Foldable import Numeric import Prelude hiding (Word) @@ -74,8 +74,14 @@ run m e@(E {size}) = textWidth = 0, textHeight = 0, firstOnLine = True} -type EGlyph = (Glyph, [Segs]) -type Word = [EGlyph] +type Word = [EGlyph] + +type EGlyph = (Glyph, [Diacritic]) + +type Diacritic = Double -> (Segs, Double) + +simpleDia :: Segs -> Diacritic +simpleDia ss w = (ss, w) doGlyphs :: [Word] -> Env -> Element doGlyphs gs e = wrap $ run act e where @@ -91,7 +97,12 @@ doGlyphs gs e = wrap $ run act e where glyphWidth :: EGlyph -> M Double -glyphWidth (G {width}, _) = (+) <$> withSize (* width) <*> gap +glyphWidth (G {width}, ss) = + let w = foldl (\x f -> snd $ f x) width ss in + (+) <$> withSize (* w) <*> gap + +totalWidth :: Double -> M Double +totalWidth width = (+) <$> withSize (* width) <*> gap wordWidth :: Word -> M Double wordWidth = fmap sum . traverse glyphWidth @@ -111,11 +122,17 @@ placeWord w = do pure e placeGlyph :: EGlyph -> M Element -placeGlyph g@(G {path = path1}, segss) = do - gwidth <- glyphWidth g - path' <- joinSegs $ sconcat (path1 :| segss) - modify \s@(S {x}) -> s {x = x + gwidth} - pure $ path_ [D_ <<- path'] +placeGlyph (G {path = path1, width = width1}, dias) = do + let (segs', width') = placeDia width1 dias + path <- joinSegs $ path1 <> segs' + width <- totalWidth width' + modify \s@(S {x}) -> s {x = x + width} + pure $ path_ [D_ <<- path] + +placeDia :: Double -> [Diacritic] -> (Segs, Double) +placeDia w dias = + flip runState w $ + fold <$> traverse state dias newline :: M () newline = do diff --git a/laantas-script/Split.hs b/laantas-script/Split.hs index 8a05280..a904453 100644 --- a/laantas-script/Split.hs +++ b/laantas-script/Split.hs @@ -29,8 +29,8 @@ maxFrom name i = longestWith name \x -> Map.lookup x i initial :: P Glyph initial = maxFrom "initial" initials -medial :: P Segs -medial = P [] <$ chunk "\\" <|> maxFrom "medial" medials +medial :: P [Diacritic] +medial = [] <$ chunk "\\" <|> maxFrom "medial" medials final :: P Glyph final = maxFrom "final" finals @@ -38,29 +38,29 @@ final = maxFrom "final" finals ivowel :: P Glyph ivowel = maxFrom "vowel" vowels -word :: P [Piece] +word :: P [EGlyph] word = [is <> f <> concat p | is <- some initMed, f <- fin, p <- many punct] where initMed = try $ - [(i, [m]) | i <- initial, m <- medial] <|> + (,) <$> initial <*> medial <|> [(v, []) | v <- ivowel] <|> dash fin = maybe [] (\x -> [(x, [])]) <$> optional final -number :: P [Piece] +number :: P [EGlyph] number = some (digit <|> hash) where hash = (num, []) <$ chunk "#" digit = [(numbers ! Char.digitToInt i, []) | i <- digitChar] -punct :: P [Piece] +punct :: P [EGlyph] punct = [[(p, [])] | p <- maxFrom "punctuation" punctuation] <* space -dash :: P Piece +dash :: P EGlyph dash = (wave, []) <$ chunk "–" -text :: P [[Piece]] +text :: P [[EGlyph]] text = space *> many (segment <* space) <* eof where segment = punct <|> number <|> word -split :: Text -> [[Piece]] +split :: Text -> [[EGlyph]] split = either (error . errorBundlePretty) id . parse text "" From e095a9bbb2b52369167d175a062930cb873b055b Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 20 May 2021 22:49:16 +0200 Subject: [PATCH 086/127] add glyph fields for vowel attachment points [not used yet] --- laantas-script/Glyphs.hs | 403 ++++++++++++++-------------- laantas-script/GlyphsBase.hs | 38 ++- laantas-script/Svg.hs | 13 +- laantas-script/laantas-script.cabal | 3 +- 4 files changed, 242 insertions(+), 215 deletions(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index b5b1cf8..d2be880 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -42,27 +42,27 @@ tGlyphs = [("t",t), ("tt",tt), ("tk",tk), ("tg",tg), ("td",td), ("tƶ",tƶ), ("tn",tn), ("tr",tr), ("tč",tč), ("tǧ",tǧ), ("tw",tw), ("th",th), ("tf",tf), ("tj",tj)] -t = G {path = tPath, width = 5.5} -tt = G {path = ttPath, width = 7} -tk = G {path = tkPath, width = 9} -tg = G {path = tgPath, width = 9} -td = G {path = tdPath, width = 9} -tƶ = G {path = tƶPath, width = 9} -tp = G {path = tpPath, width = 9.5} -tb = G {path = tbPath, width = 10} -ts = G {path = tsPath, width = 9} -tš = G {path = tšPath, width = 9} -tl = G {path = tlPath, width = 8.5} -tm = G {path = tmPath, width = 10} -tn = G {path = tnPath, width = 9} -tr = G {path = trPath, width = 7} -tč = G {path = tčPath, width = 9} -tǧ = G {path = tǧPath, width = 10} -tw = G {path = twPath, width = 10} -th = G {path = thPath, width = 12} -tf = G {path = tfPath, width = 10} -tj = G {path = tjPath, width = 4.75} -t0 = G {path = t0Path, width = 5} +t = simpleG tPath 5.5 +tt = simpleG ttPath 7 +tk = simpleG tkPath 9 +tg = simpleG tgPath 9 +td = simpleG tdPath 9 +tƶ = simpleG tƶPath 9 +tp = simpleG tpPath 9.5 +tb = simpleG tbPath 10 +ts = simpleG tsPath 9 +tš = simpleG tšPath 9 +tl = simpleG tlPath 8.5 +tm = simpleG tmPath 10 +tn = simpleG tnPath 9 +tr = simpleG trPath 7 +tč = simpleG tčPath 9 +tǧ = simpleG tǧPath 10 +tw = simpleG twPath 10 +th = simpleG thPath 12 +tf = simpleG tfPath 10 +tj = simpleG tjPath 4.75 +t0 = simpleG t0Path 5 tPath = P [mA (0,0), lA (5.5,0)] <> shiftX 1.5 aPath <> shiftX 5.25 aPath tNarrow = P [mA (0,0), lA (5,0)] <> shiftX 1.5 aPath <> shiftX 4.75 aPath @@ -95,9 +95,9 @@ t0Path = tPath <> P [mA (1.5,7), cR (1.8,-0.25) (3.1,0) (3.5,0.5)] kGlyphs = [("k", k), ("kk", kk), ("ks", ks)] -k = G {path = kPath, width = 5} -kk = G {path = kkPath, width = 8} -ks = G {path = ksPath, width = 9} +k = simpleG kPath 5 +kk = simpleG kkPath 8 +ks = simpleG ksPath 9 kLeft = P [mA (0,0), cR (0.5,0.75) (0,3) (0,5)] kBottomShort = P [cR (0,0) (2.6,0) (4,-0.5)] @@ -109,7 +109,7 @@ kkPath = kShortPart <> shiftX 4 kShort ksPath = kShortPart <> shiftX 4 sPath -g = G {path = gPath, width = 5} +g = simpleG gPath 5 gPath = gHat <> kPath gHat = P [mA (1.5,-2.75), qR (1.5,0.125) (3.5,-0.25)] @@ -117,7 +117,7 @@ gShort = gShortHat <> kShort gShortHat = P [mA (1.25,-2.75), qR (1.25,0.125) (2.75,-0.25)] -d = G {path = dPath, width = 5} +d = simpleG dPath 5 dPath = dPart <> P [mA (5,-3), lR (0,8)] dPart' = dBase <> dJoin' @@ -133,27 +133,27 @@ dLong = dFree <> shiftX 1.5 dJoin ("ƶm",ƶm), ("ƶn",ƶn), ("ƶr",ƶr), ("ƶč",ƶč), ("ƶǧ",ƶǧ), ("ƶw",ƶw), ("ƶh",ƶh), ("ƶf",ƶf), ("ƶj",ƶj)] -ƶ = G {path = ƶPath, width = 5} -ƶt = G {path = ƶtPath, width = 10.5} -ƶk = G {path = ƶkPath, width = 9} -ƶg = G {path = ƶgPath, width = 9} -ƶd = G {path = ƶdPath, width = 10} -ƶƶ = G {path = ƶƶPath, width = 10} -ƶp = G {path = ƶpPath, width = 10.5} -ƶb = G {path = ƶbPath, width = 11} -ƶs = G {path = ƶsPath, width = 10} -ƶš = G {path = ƶšPath, width = 10} -ƶl = G {path = ƶlPath, width = 10} -ƶm = G {path = ƶmPath, width = 11} -ƶn = G {path = ƶnPath, width = 9.75} -ƶr = G {path = ƶrPath, width = 8} -ƶč = G {path = ƶčPath, width = 10} -ƶǧ = G {path = ƶǧPath, width = 10} -ƶw = G {path = ƶwPath, width = 11} -ƶh = G {path = ƶhPath, width = 13} -ƶf = G {path = ƶfPath, width = 10} -ƶj = G {path = ƶjPath, width = 7.5} -ƶ0 = G {path = ƶ0Path, width = 3.5} +ƶ = simpleG ƶPath 5 +ƶt = simpleG ƶtPath 10.5 +ƶk = simpleG ƶkPath 9 +ƶg = simpleG ƶgPath 9 +ƶd = simpleG ƶdPath 10 +ƶƶ = simpleG ƶƶPath 10 +ƶp = simpleG ƶpPath 10.5 +ƶb = simpleG ƶbPath 11 +ƶs = simpleG ƶsPath 10 +ƶš = simpleG ƶšPath 10 +ƶl = simpleG ƶlPath 10 +ƶm = simpleG ƶmPath 11 +ƶn = simpleG ƶnPath 9.75 +ƶr = simpleG ƶrPath 8 +ƶč = simpleG ƶčPath 10 +ƶǧ = simpleG ƶǧPath 10 +ƶw = simpleG ƶwPath 11 +ƶh = simpleG ƶhPath 13 +ƶf = simpleG ƶfPath 10 +ƶj = simpleG ƶjPath 7.5 +ƶ0 = simpleG ƶ0Path 3.5 ƶPath = gHat <> dPath ƶtPath = dLong <> shiftX 5 tPath @@ -180,10 +180,10 @@ dLong = dFree <> shiftX 1.5 dJoin pGlyphs = [("p", p), ("pp", pp), ("ps", ps), ("pj", pj)] -p = G {path = pPath, width = 5.5} -pp = G {path = ppPath, width = 9} -ps = G {path = psPath, width = 10.5} -pj = G {path = pjPath, width = 10} +p = simpleG pPath 5.5 +pp = simpleG ppPath 9 +ps = simpleG psPath 10.5 +pj = simpleG pjPath 10 pInit = P [mA (0,-3), cR (-1,1) (-0.5,6) (-0.5,8)] @@ -206,8 +206,8 @@ pjPath = bGlyphs = [("b", b), ("bj", bj)] -b = G {path = bPath, width = 6} -bj = G {path = bjPath, width = 9} +b = simpleG bPath 6 +bj = simpleG bjPath 9 bPath = shiftX 1 gHat <> wPart <> P [mA (6,-3), lR (0,8)] bjPath = @@ -221,27 +221,27 @@ sGlyphs = [("s",s), ("st",st), ("sk",sk), ("sg",sg), ("sd",sd), ("sƶ",sƶ), ("sn",sn), ("sr",sr), ("sč",sč), ("sǧ",sǧ), ("sw",sw), ("sh",sh), ("sf",sf), ("sj",sj)] -s = G {path = sPath, width = 5.125} -st = G {path = stPath, width = 8.5} -sk = G {path = skPath, width = 9} -sg = G {path = sgPath, width = 9} -sd = G {path = sdPath, width = 9} -sƶ = G {path = sƶPath, width = 9} -sp = G {path = spPath, width = 9.5} -sb = G {path = sbPath, width = 10.5} -ss = G {path = ssPath, width = 10} -sš = G {path = sšPath, width = 10} -sl = G {path = slPath, width = 9} -sm = G {path = smPath, width = 10.5} -sn = G {path = snPath, width = 9.5} -sr = G {path = srPath, width = 7} -sč = G {path = sčPath, width = 9} -sǧ = G {path = sǧPath, width = 10} -sw = G {path = swPath, width = 10} -sh = G {path = shPath, width = 13} -sf = G {path = sfPath, width = 10.25} -sj = G {path = sjPath, width = 5} -s0 = G {path = s0Path, width = 5} +s = simpleG sPath 5.125 +st = simpleG stPath 8.5 +sk = simpleG skPath 9 +sg = simpleG sgPath 9 +sd = simpleG sdPath 9 +sƶ = simpleG sƶPath 9 +sp = simpleG spPath 9.5 +sb = simpleG sbPath 10.5 +ss = simpleG ssPath 10 +sš = simpleG sšPath 10 +sl = simpleG slPath 9 +sm = simpleG smPath 10.5 +sn = simpleG snPath 9.5 +sr = simpleG srPath 7 +sč = simpleG sčPath 9 +sǧ = simpleG sǧPath 10 +sw = simpleG swPath 10 +sh = simpleG shPath 13 +sf = simpleG sfPath 10.25 +sj = simpleG sjPath 5 +s0 = simpleG s0Path 5 sPath = sPartLine <> shiftX 4.75 aPath sPart' = P [mA (0, 0), @@ -313,29 +313,29 @@ lGlyphs = [("l",l), ("ll", ll), ("lt",lt), ("lk",lk), ("lg",lg), ("ld",ld), ("ln",ln), ("lr",lr), ("lč",lč), ("lǧ",lǧ), ("lw",lw), ("lh",lh), ("lf",lf), ("lj",lj)] -l = G {path = lPath, width = 4.5} -ll = G {path = llPath, width = 9} -lt = G {path = ltPath, width = 10} -lk = G {path = lkPath, width = 8.5} -lg = G {path = lgPath, width = 8.5} -ld = G {path = ldPath, width = 9.5} -lƶ = G {path = lƶPath, width = 9.5} -lp = G {path = lpPath, width = 10} -lb = G {path = lbPath, width = 10.5} -ls = G {path = lsPath, width = 9.5} -lš = G {path = lšPath, width = 9.5} -lm = G {path = lmPath, width = 10.5} -ln = G {path = lnPath, width = 9.25} -lr = G {path = lrPath, width = 7.5} -lč = G {path = lčPath, width = 9.5} -lǧ = G {path = lǧPath, width = 9.5} -lw = G {path = lwPath, width = 10.5} -lh = G {path = lhPath, width = 12.5} -lf = G {path = lfPath, width = 10.5} -lj = G {path = ljPath, width = 5} -l0 = G {path = l0Path, width = 3.75} +l = simpleG lPath 4.625 +ll = simpleG llPath 9 +lt = simpleG ltPath 10 +lk = simpleG lkPath 8.5 +lg = simpleG lgPath 8.5 +ld = simpleG ldPath 9.5 +lƶ = simpleG lƶPath 9.5 +lp = simpleG lpPath 10 +lb = simpleG lbPath 10.5 +ls = simpleG lsPath 9.5 +lš = simpleG lšPath 9.5 +lm = simpleG lmPath 10.5 +ln = simpleG lnPath 9.25 +lr = simpleG lrPath 7.5 +lč = simpleG lčPath 9.5 +lǧ = simpleG lǧPath 9.5 +lw = simpleG lwPath 10.5 +lh = simpleG lhPath 12.5 +lf = simpleG lfPath 10.5 +lj = simpleG ljPath 5 +l0 = simpleG l0Path 3.75 -lPath = lPart <> P [mA (4.5,0), lR (0,5)] +lPath = lPart <> shiftX 4.5 aPath lBase = P [mA (3,0.5), cR (0.25,-0.25) (0,-0.75) (-1.25,-0.5), cR (-1.5,0.3) (-2,2.5) (0,2.5), lR (0.75,0), mR (-1.25,0), @@ -373,27 +373,27 @@ mGlyphs = [("m",m), ("mt",mt), ("mk",mk), ("mg",mg), ("md",md), ("mƶ",mƶ), ("mn",mn), ("mr",mr), ("mč",mč), ("mǧ",mǧ), ("mw",mw), ("mh",mh), ("mf",mf), ("mj",mj)] -m = G {path = mPath, width = 6} -mt = G {path = mtPath, width = 10} -mk = G {path = mkPath, width = 10} -mg = G {path = mgPath, width = 10} -md = G {path = mdPath, width = 12} -mƶ = G {path = mƶPath, width = 12} -mp = G {path = mpPath, width = 12.5} -mb = G {path = mbPath, width = 12} -ms = G {path = msPath, width = 11} -mš = G {path = mšPath, width = 11} -ml = G {path = mlPath, width = 11} -mm = G {path = mmPath, width = 12} -mn = G {path = mnPath, width = 11} -mr = G {path = mrPath, width = 9} -mč = G {path = mčPath, width = 12} -mǧ = G {path = mǧPath, width = 12} -mw = G {path = mwPath, width = 12} -mh = G {path = mhPath, width = 14} -mf = G {path = mfPath, width = 13} -mj = G {path = mjPath, width = 9} -m0 = G {path = m0Path, width = 6} +m = simpleG mPath 6 +mt = simpleG mtPath 10 +mk = simpleG mkPath 10 +mg = simpleG mgPath 10 +md = simpleG mdPath 12 +mƶ = simpleG mƶPath 12 +mp = simpleG mpPath 12.5 +mb = simpleG mbPath 12 +ms = simpleG msPath 11 +mš = simpleG mšPath 11 +ml = simpleG mlPath 11 +mm = simpleG mmPath 12 +mn = simpleG mnPath 11 +mr = simpleG mrPath 9 +mč = simpleG mčPath 12 +mǧ = simpleG mǧPath 12 +mw = simpleG mwPath 12 +mh = simpleG mhPath 14 +mf = simpleG mfPath 13 +mj = simpleG mjPath 9 +m0 = simpleG m0Path 6 mPath = mPart <> P [mA (6,0), lR (0,5)] mInit = P [mA (0.5,0), cR (-0.25,0.2) (-0.5,2.25) (-0.5,3.5)] @@ -427,33 +427,33 @@ nGlyphs = [("n", n), ("nt", nt), ("nk", nk), ("ng", ng), ("nd", nd), ("nƶ", nƶ ("nm", nm), ("nn", nn), ("nr", nr), ("nč", nč), ("nǧ", nǧ), ("nw", nw), ("nh", nh), ("nf", nf), ("nj", nj)] -n = G {path = nPath, width = 5} -nt = G {path = ntPath, width = 10.5} -nk = G {path = nkPath, width = 9} -ng = G {path = ngPath, width = 9} -nd = G {path = ndPath, width = 10} -nƶ = G {path = nƶPath, width = 10} -np = G {path = npPath, width = 10.25} -nb = G {path = nbPath, width = 11} -ns = G {path = nsPath, width = 10} -nš = G {path = nšPath, width = 10} -nl = G {path = nlPath, width = 10} -nm = G {path = nmPath, width = 11} -nn = G {path = nnPath, width = 10} -nr = G {path = nrPath, width = 6.5} -nč = G {path = nčPath, width = 10} -nǧ = G {path = nǧPath, width = 9.75} -nw = G {path = nwPath, width = 11} -nh = G {path = nhPath, width = 13} -nf = G {path = nfPath, width = 10.75} -nj = G {path = njPath, width = 5.25} -n0 = G {path = n0Path, width = 3.5} +n = simpleG nPath 5.125 +nt = simpleG ntPath 10.5 +nk = simpleG nkPath 9 +ng = simpleG ngPath 9 +nd = simpleG ndPath 10 +nƶ = simpleG nƶPath 10 +np = simpleG npPath 10.25 +nb = simpleG nbPath 11 +ns = simpleG nsPath 10 +nš = simpleG nšPath 10 +nl = simpleG nlPath 10 +nm = simpleG nmPath 11 +nn = simpleG nnPath 10 +nr = simpleG nrPath 6.5 +nč = simpleG nčPath 10 +nǧ = simpleG nǧPath 9.75 +nw = simpleG nwPath 11 +nh = simpleG nhPath 13 +nf = simpleG nfPath 10.75 +nj = simpleG njPath 5.25 +n0 = simpleG n0Path 3.5 -nPath = nPart <> P [mA (5,0), lR (0,5)] +nPath = nPart <> shiftX 5 aPath nPart = nPart' <> P [cR (1.6,-0.25) (2.5,-1.75) (2.5,-2.5)] nPart' = P [mA (3.5,1), cR (0.5,-1) (-0.5,-1.125) (-1,-1), cR (-3.2,0.5) (-3.2,5.5) (0,5)] -nLong = nPart' <> P [cR (1.6,-0.25) (4,-1) (4,-2.5)] +nLong = nPart' <> P [cR (3.2,-0.5) (4,-1.5) (4,-2.5)] nFlat = P [mA (5,0), lR (-2.5,0), aR 2.5 2.5 0 Large CCW (0,5), cR (0.5,0) (1,-0.5) (1,-1.5)] nFree = nPart' <> P [qR (0.8,-0.125) (1.5,-1)] @@ -485,27 +485,27 @@ rGlyphs = [("r", r), ("rt", rt), ("rk", rk), ("rg", rg), ("rd", rd), ("rƶ", rƶ ("rm", rm), ("rn", rn), ("rr", rr), ("rč", rč), ("rǧ", rǧ), ("rw", rw), ("rh", rh), ("rf", rf), ("rj", rj)] -r = G {path = rPath, width = 5} -rt = G {path = rtPath, width = 7.5} -rk = G {path = rkPath, width = 7} -rg = G {path = rgPath, width = 7} -rd = G {path = rdPath, width = 9.5} -rƶ = G {path = rƶPath, width = 9.5} -rp = G {path = rpPath, width = 10} -rb = G {path = rbPath, width = 10.5} -rs = G {path = rsPath, width = 9.5} -rš = G {path = ršPath, width = 9.5} -rl = G {path = rlPath, width = 9.5} -rm = G {path = rmPath, width = 10.5} -rr = G {path = rrPath, width = 6} -rn = G {path = rnPath, width = 9} -rč = G {path = rčPath, width = 9.5} -rǧ = G {path = rǧPath, width = 9.5} -rw = G {path = rwPath, width = 10.5} -rh = G {path = rhPath, width = 12.5} -rf = G {path = rfPath, width = 10.5} -rj = G {path = rjPath, width = 7.5} -r0 = G {path = r0Path, width = 5} +r = simpleG rPath 5 +rt = simpleG rtPath 7.5 +rk = simpleG rkPath 7 +rg = simpleG rgPath 7 +rd = simpleG rdPath 9.5 +rƶ = simpleG rƶPath 9.5 +rp = simpleG rpPath 10 +rb = simpleG rbPath 10.5 +rs = simpleG rsPath 9.5 +rš = simpleG ršPath 9.5 +rl = simpleG rlPath 9.5 +rm = simpleG rmPath 10.5 +rr = simpleG rrPath 6 +rn = simpleG rnPath 9 +rč = simpleG rčPath 9.5 +rǧ = simpleG rǧPath 9.5 +rw = simpleG rwPath 10.5 +rh = simpleG rhPath 12.5 +rf = simpleG rfPath 10.5 +rj = simpleG rjPath 7.5 +r0 = simpleG r0Path 5 rPath = rPart <> P [mA (5,-3), lR (0,8)] rPart = P [mA (0,5), cR (3.5,0) (5,-1) (5,-2)] @@ -537,9 +537,9 @@ r0Path = ŕPath <> P [mA (1.25,7), cR (2.2,-0.25) (2.8,0) (3,0.5)] čGlyphs = [("č", č), ("čs", čs), ("čč", čč)] -č = G {path = čPath, width = 5} -čs = G {path = čsPath, width = 10} -čč = G {path = ččPath, width = 10} +č = simpleG čPath 5 +čs = simpleG čsPath 10 +čč = simpleG ččPath 10 čPath = čPart <> čJoin <> P [mA (5,0), lR (0,5)] čPart = P [mA (0,0.5), cR (2.25,-0.75) (2.55,-0.5) (2.75,-0.5)] <> čPart' @@ -553,7 +553,7 @@ r0Path = ŕPath <> P [mA (1.25,7), cR (2.2,-0.25) (2.8,0) (3,0.5)] ččPath = čPart <> shiftX 5 čPath -ǧ = G {path = ǧPath, width = 5} +ǧ = simpleG ǧPath 5 ǧPath = ǧPart <> čJoin <> P [mA (5,-3), lR (0,8)] ǧPart = P [mA (0,-2), cR (2.25,-0.75) (2.55,-0.5) (2.75,-0.5), @@ -565,7 +565,7 @@ r0Path = ŕPath <> P [mA (1.25,7), cR (2.2,-0.25) (2.8,0) (3,0.5)] cR (-0.2,0.25) (-2.25,0) (-2.75,-0.5)] -w = G {path = wPath, width = 6} +w = simpleG wPath 6 wPath = wPart <> shiftX 5.75 aPath wPart = uPath <> P [mA (2.5,0), lR (3.5,0)] @@ -573,10 +573,10 @@ wPart = uPath <> P [mA (2.5,0), lR (3.5,0)] hGlyphs = [("h", h), ("hh", hh), ("hn", hn), ("hm", hm)] -h = G {path = hPath, width = 8.5} -hh = G {path = hhPath, width = 16.5} -hn = G {path = hnPath, width = 15} -hm = G {path = hmPath, width = 16} +h = simpleG hPath 8.5 +hh = simpleG hhPath 16.5 +hn = simpleG hnPath 15 +hm = simpleG hmPath 16 hPath = hPart <> shiftX 3.5 gHat <> P [mA (8.5,-3), lR (0,8)] hPart' x = sPart <> P [mA (2.5,0), lR (1.5,0)] <> shiftX 4 x @@ -589,10 +589,10 @@ hmPath = hPath <> shiftX 10 mPath fGlyphs = [("f", f), ("fn", fn), ("fm", fm)] -f = G {path = fPath, width = 6} -fn = G {path = fnPath, width = 12} -fm = G {path = fmPath, width = 12} -f0 = G {path = f0Path, width = 6} +f = simpleG fPath 6 +fn = simpleG fnPath 12 +fm = simpleG fmPath 12 +f0 = simpleG f0Path 6 fPath = fPart <> P [lR (0,2.5)] fPart = P [mA (4.25,2.5), @@ -606,7 +606,7 @@ fnPath = fPath <> shiftX 7 nPath fmPath = fPart <> P [lR (0,1)] <> mBump <> mBump' <> P [mA (12,0), lR (0,5)] f0Path = fPath <> P [mA (1.5,7), cR (2.8,-0.35) (3.1,0) (3.5,0.5)] -j = G {path = jPath, width = 4} +j = simpleG jPath 4 jPath = P [mA (0,0), qR (1.25,0.5) (4,0)] <> shiftX 3.75 aPath jPathShort = P [mA (0,0), qR (1,0.25) (3,0)] <> shiftX 2.75 aPath @@ -617,20 +617,20 @@ vGlyphs = [("a", a), ("á", á), ("i", i), ("í", í), ("u", u), ("ú", ú), ("ai", ai), ("au", au), ("ia", ia), ("ua", ua), ("ḿ", ḿ), ("ń", ń), ("ł", ł), ("ŕ", ŕ)] -a = G {path = aPath, width = 0.125} -á = G {path = áPath, width = 2.125} +a = simpleG aPath 0.125 +á = simpleG áPath 2.125 i = j -í = G {path = íPath, width = 5} -u = G {path = uPath, width = 4.5} -ú = G {path = úPath, width = 4} -ai = G {path = aiPath, width = 5} -au = G {path = auPath, width = 4.5} -ia = G {path = iaPath, width = 5} -ua = G {path = uaPath, width = 4.5} -ḿ = G {path = ḿPath, width = 6} -ń = G {path = ńPath, width = 4} -ł = G {path = łPath, width = 3.75} -ŕ = G {path = ŕPath, width = 5} +í = simpleG íPath 5 +u = simpleG uPath 4.5 +ú = simpleG úPath 4 +ai = simpleG aiPath 5 +au = simpleG auPath 4.5 +ia = simpleG iaPath 5 +ua = simpleG uaPath 4.5 +ḿ = simpleG ḿPath 6 +ń = simpleG ńPath 4 +ł = simpleG łPath 3.75 +ŕ = simpleG ŕPath 5 aPath = P [mA (0.25,0), cR (-0.25,1) (-0.25,2) (-0.25,5)] áPath = aPath <> shiftX 2 aPath @@ -657,10 +657,10 @@ uaPath = uNarrow <> shiftX 4.5 aPath adot = P . circR 0.2 -withWidth f w = (f w, w) +withWidth f (SI {width}) = (f width, width) sP = simpleDia . P --- dont move because letters like t have the join not quite at the edge +-- no @mA@ because letters like t have the join not quite at the edge da = [sP [lR (0,5)]] dá = da <> [withWidth \w -> P [mA (w/2-1,8), cR (0.75,-0.5) (1.25,0.5) (2,0)]] di = da <> [sP [cR (1,-2) (3,-3) (0,-3)]] @@ -699,28 +699,29 @@ punctuation = Map.fromList [(".", eos), ("?", eos), ("!", eos), (",", eop), (":", eop), (";", eop), ("…", ellipsis)] -eos = G {path = eosPath, width = 4} +eos = simpleG eosPath 4 eosPath = P $ circA 1 (4,1) <> circA 1 (4,4) -eop = G {path = eopPath, width = 2} +eop = simpleG eopPath 2 eopPath = P $ circA 1 (3,2.5) -num = G {path = P [mA (0,0), lR (0,5), mA (1,0), lR (0,5)], width = 1} +num = simpleG path 1 + where path = P [mA (0,0), lR (0,5), mA (1,0), lR (0,5)] numbers = Map.fromList $ - zip [0..9::Int] [u, t, n2, G dFree 3, n4, n5, ł, ḿ, ń, f] -n2 = G n2Path 5 + zip [0..9::Int] [u, t, n2, simpleG dFree 3, n4, n5, ł, ḿ, ń, f] +n2 = simpleG n2Path 5 n2Path = P [mA (0,0), lR (0,5), sR (3,0) (5,-0.5), mA (5,0), lR (0,5)] -n4 = G n4Path 5 +n4 = simpleG n4Path 5 n4Path = P [mA (1.5,0), lR (0,5), sR (-1.5,-3) (-1.5,-5), lR (5,0), lR (0,5)] -n5 = G n5Path 4 +n5 = simpleG n5Path 4 n5Path = P [mA (0,5), lR (0,-3.5), aR 1.5 1.5 0 Small CW (1.5,-1.5), lR (1,0), aR 1.5 1.5 0 Small CW (1.5,1.5), lR (0,3.5)] wave :: Glyph -wave = G {path = wavePath, width = 4} - -wavePath = P [mA (0,2.5), cR (1.5,-2) (2.5,2) (4,0)] +wave = simpleG wavePath 4 ellipsis :: Glyph -ellipsis = G {path = shiftX 3.5 wavePath, width = 6} +ellipsis = simpleG (shiftX 3.5 wavePath) 6 + +wavePath = P [mA (0,2.5), cR (1.5,-2) (2.5,2) (4,0)] diff --git a/laantas-script/GlyphsBase.hs b/laantas-script/GlyphsBase.hs index e0e986d..2bdceb7 100644 --- a/laantas-script/GlyphsBase.hs +++ b/laantas-script/GlyphsBase.hs @@ -9,7 +9,17 @@ import Numeric import Prelude hiding (Word) -data Glyph = G {path :: Segs, width :: Double} +data Glyph = G {path :: Segs, size :: SizeInfo} + +data SizeInfo = SI { + width :: Double, -- ^ total width + right :: Double, -- ^ attachment point for e.g. a + center :: Double -- ^ attachment point for e.g. á + } + +simpleG :: Segs -> Double -> Glyph +simpleG path width = + G {path, size = SI {width, right = width, center = width/2}} -- | base amounts charHeight', lineHeight', spaceWidth', gap' :: Double @@ -78,10 +88,11 @@ type Word = [EGlyph] type EGlyph = (Glyph, [Diacritic]) -type Diacritic = Double -> (Segs, Double) +type Diacritic' a = SizeInfo -> (Segs, a) +type Diacritic = Diacritic' Double simpleDia :: Segs -> Diacritic -simpleDia ss w = (ss, w) +simpleDia ss (SI {width}) = (ss, width) doGlyphs :: [Word] -> Env -> Element doGlyphs gs e = wrap $ run act e where @@ -96,10 +107,13 @@ doGlyphs gs e = wrap $ run act e where doctype <> svg11_ content `with` sattrs +liftDia :: Diacritic -> Diacritic' SizeInfo +liftDia f sz = let (x, w) = f sz in (x, sz {width = w} :: SizeInfo) + glyphWidth :: EGlyph -> M Double -glyphWidth (G {width}, ss) = - let w = foldl (\x f -> snd $ f x) width ss in - (+) <$> withSize (* w) <*> gap +glyphWidth (G {size}, ss) = + let SI {width} = foldl (\x f -> snd $ liftDia f x) size ss in + (+) <$> withSize (* width) <*> gap totalWidth :: Double -> M Double totalWidth width = (+) <$> withSize (* width) <*> gap @@ -122,17 +136,17 @@ placeWord w = do pure e placeGlyph :: EGlyph -> M Element -placeGlyph (G {path = path1, width = width1}, dias) = do - let (segs', width') = placeDia width1 dias +placeGlyph (G {path = path1, size}, dias) = do + let (segs', width') = placeDias size dias path <- joinSegs $ path1 <> segs' width <- totalWidth width' modify \s@(S {x}) -> s {x = x + width} pure $ path_ [D_ <<- path] -placeDia :: Double -> [Diacritic] -> (Segs, Double) -placeDia w dias = - flip runState w $ - fold <$> traverse state dias +placeDias :: SizeInfo -> [Diacritic] -> (Segs, Double) +placeDias sz = + unlift . flip runState sz . fmap fold . traverse (state . liftDia) + where unlift (x, SI {width}) = (x, width) newline :: M () newline = do diff --git a/laantas-script/Svg.hs b/laantas-script/Svg.hs index 743e050..296c7ed 100644 --- a/laantas-script/Svg.hs +++ b/laantas-script/Svg.hs @@ -9,7 +9,8 @@ where import Control.Monad.Reader import Control.Monad.State import qualified Graphics.Svg as Base -import Graphics.Svg hiding (mA, mR, lA, lR, cA, cR, sA, sR, aA, aR, qA, qR) +import Graphics.Svg + hiding (mA, mR, lA, lR, cA, cR, sA, sR, aA, aR, qA, qR, tA, tR) import Data.Text (Text, pack) @@ -78,6 +79,16 @@ qR (x1, y1) (x2, y2) = Base.qR (x1 * size) (y1 * size) (x2 * size) (y2 * size) +tA :: Point -> M Text +tA (x1, y1) = + reader \E {size} -> + Base.tA (x1 * size) (y1 * size) + +tR :: Point -> M Text +tR (x1, y1) = + reader \E {size} -> + Base.tR (x1 * size) (y1 * size) + data Arc = Large | Small data Sweep = CW | CCW diff --git a/laantas-script/laantas-script.cabal b/laantas-script/laantas-script.cabal index 31c47d5..433b83d 100644 --- a/laantas-script/laantas-script.cabal +++ b/laantas-script/laantas-script.cabal @@ -27,7 +27,8 @@ executable laantas-script MultiWayIf, NamedFieldPuns, OverloadedStrings, - RecordWildCards + RecordWildCards, + ViewPatterns build-depends: base >= 4.14.0.0 && < 4.17, containers ^>= 0.6.2.1, From 3759da183c42c709eb14b7adaa2260f72c547536 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sun, 20 Jun 2021 21:28:54 +0200 Subject: [PATCH 087/127] m glyphs --- laantas-script/Glyphs.hs | 42 +++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index d2be880..78fc504 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -373,7 +373,7 @@ mGlyphs = [("m",m), ("mt",mt), ("mk",mk), ("mg",mg), ("md",md), ("mƶ",mƶ), ("mn",mn), ("mr",mr), ("mč",mč), ("mǧ",mǧ), ("mw",mw), ("mh",mh), ("mf",mf), ("mj",mj)] -m = simpleG mPath 6 +m = simpleG mPath 6.125 mt = simpleG mtPath 10 mk = simpleG mkPath 10 mg = simpleG mgPath 10 @@ -395,31 +395,36 @@ mf = simpleG mfPath 13 mj = simpleG mjPath 9 m0 = simpleG m0Path 6 -mPath = mPart <> P [mA (6,0), lR (0,5)] +mPath = mPart <> shiftX 6 aPath mInit = P [mA (0.5,0), cR (-0.25,0.2) (-0.5,2.25) (-0.5,3.5)] -mBump' = P [aR 1.5 1.5 0 Small CCW (3,0)] -mBump = mBump' <> P [lR (0,-2), mR (0,2)] -mPart = mInit <> mBump <> mBump' +mBumpI = P [cR (0,2) (2.5,2) (3,0)] <> mLine +mLine = P [qR (0.125,-1) (0.125,-2), mR (-0.125,2)] +mBumpF = P [cR (-0.5,2) (2.5,2) (3,0)] +mBumpM = mBumpF <> mLine +mBumpsN n = mconcat $ [mBumpI] <> replicate n mBumpM <> [mBumpF] +mBumps = mBumpsN 0 +mPart = mInit <> mBumps +mFree = mPart <> P [cR (0.5,-2) (-0.75,-4) (-1.5,-3.5)] mtPath = mPart <> shiftX 4.5 tPath mkPath = mPart <> shiftX 6 kShort mgPath = mPart <> shiftX 6 gShort -mdPath = ḿPath <> shiftX 7 dPath -mƶPath = ḿPath <> shiftX 7 ƶPath -mpPath = ḿPath <> shiftX 7 pPath +mdPath = mFree <> shiftX 7 dPath +mƶPath = mFree <> shiftX 7 ƶPath +mpPath = mFree <> shiftX 7 pPath mbPath = mPart <> shiftX 6 bPath msPath = mPart <> shiftX 6 sPath mšPath = mPart <> shiftX 6 šPath mlPath = mPart <> shiftX 6 lPath -mmPath = mInit <> mBump <> mBump <> mBump <> mBump' <> P [mR (0,-3.5), lR (0,5)] +mmPath = mInit <> mBumpsN 2 <> P [mR (0,-3.5), lR (0,5)] mnPath = mPart <> shiftX 6 nPath -mrPath = mInit <> mBump <> mBump <> mBump' <> P [mR (0,-6.5), lR (0,8)] -mčPath = ḿPath <> shiftX 7 čPath -mǧPath = ḿPath <> shiftX 7 ǧPath +mrPath = mInit <> mBumpsN 1 <> P [mR (0,-6.5), lR (0,8)] +mčPath = mFree <> shiftX 7 čPath +mǧPath = mFree <> shiftX 7 ǧPath mwPath = mPart <> shiftX 6 wPath mhPath = mPart <> shiftX 6 hPath -mfPath = ḿPath <> shiftX 7 fPath -mjPath = ḿPath <> P [mA (5.5,0), lR (3.5,0), lR (0,5)] -m0Path = ḿPath <> P [mA (1.25,7), cR (3.55,-0.3) (3.8,0) (4,0.5)] +mfPath = mFree <> shiftX 7 fPath +mjPath = mFree <> P [mA (5.5,0), lR (3.5,0), lR (0,5)] +m0Path = mFree <> P [mA (1.25,7), cR (3.55,-0.3) (3.8,0) (4,0.5)] nGlyphs = [("n", n), ("nt", nt), ("nk", nk), ("ng", ng), ("nd", nd), ("nƶ", nƶ), @@ -603,7 +608,7 @@ fPart = P [mA (4.25,2.5), cR (1.6,-0.25) (2.5,1) (2.5,3) ] fnPath = fPath <> shiftX 7 nPath -fmPath = fPart <> P [lR (0,1)] <> mBump <> mBump' <> P [mA (12,0), lR (0,5)] +fmPath = fPart <> P [lR (0,1)] <> mBumps <> P [mA (12,0), lR (0,5)] f0Path = fPath <> P [mA (1.5,7), cR (2.8,-0.35) (3.1,0) (3.5,0.5)] j = simpleG jPath 4 @@ -646,10 +651,7 @@ aiPath = aPath <> P [mR (2,-5), lR (3,0)] <> shiftX 4.75 aPath auPath = aPath <> shiftX 1.5 uNarrow iaPath = P [mA (0,0), lR (3,0)] <> shiftX 2.75 aPath <> shiftX 5 aPath uaPath = uNarrow <> shiftX 4.5 aPath -ḿPath = P [mA (0.5,0), cR (-0.25,0.2) (-0.5,2.25) (-0.5,3.5), - aR 1.5 1.5 0 Small CCW (3,0), lR (0,-2), - mA (5.5,0), cR (0.25,0.2) (0.5,2.25) (0.5,3.5), - aR 1.5 1.5 0 Small CW (-3,0)] +ḿPath = mFree ńPath = nFree łPath = lFree ŕPath = rPart <> P [mA (5,0), lR (0,5)] From e28a2c6ce41f10188c7d2f4062890862a48966fc Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Wed, 30 Mar 2022 04:34:27 +0200 Subject: [PATCH 088/127] base constraint updates --- cabal.project | 2 -- 1 file changed, 2 deletions(-) diff --git a/cabal.project b/cabal.project index 7ef8d54..be54576 100644 --- a/cabal.project +++ b/cabal.project @@ -6,5 +6,3 @@ source-repository-package type: git location: https://git.rhiannon.website/rhi/svg-builder tag: 1cbcd594d3009f9fd71f253b52ac82673bf5482e - -allow-newer: * From 6b50c1bc604709b711eb44c7ed680618da131d9d Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sun, 24 Dec 2023 01:41:12 +0100 Subject: [PATCH 089/127] fix for ghc 9.4 --- cabal.project | 2 +- laantas-script/laantas-script.cabal | 6 ++--- langfilter/Ebnf.hs | 41 ++++++++++++++++------------- langfilter/langfilter.cabal | 6 ++--- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/cabal.project b/cabal.project index be54576..a237a6b 100644 --- a/cabal.project +++ b/cabal.project @@ -5,4 +5,4 @@ packages: source-repository-package type: git location: https://git.rhiannon.website/rhi/svg-builder - tag: 1cbcd594d3009f9fd71f253b52ac82673bf5482e + tag: 39bb6a4e04ec2caccc23576b062ebfa0566bfb96 diff --git a/laantas-script/laantas-script.cabal b/laantas-script/laantas-script.cabal index 433b83d..b150042 100644 --- a/laantas-script/laantas-script.cabal +++ b/laantas-script/laantas-script.cabal @@ -30,12 +30,12 @@ executable laantas-script RecordWildCards, ViewPatterns build-depends: - base >= 4.14.0.0 && < 4.17, + base >= 4.14.0.0 && < 4.20, containers ^>= 0.6.2.1, mtl ^>= 2.2.2, svg-builder ^>= 0.1.1, optparse-applicative ^>= 0.16.0.0, - text ^>= 1.2.3.2, - megaparsec ^>= 9.0.1 + text ^>= 2.1, + megaparsec ^>= 9.6.1 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N diff --git a/langfilter/Ebnf.hs b/langfilter/Ebnf.hs index 41ed72e..5a83209 100644 --- a/langfilter/Ebnf.hs +++ b/langfilter/Ebnf.hs @@ -10,21 +10,23 @@ import Text.Pandoc.Definition import Data.Text (Text) import qualified Data.Text as Text import Data.Void +import Data.List.NonEmpty (NonEmpty (..)) +import qualified Data.List.NonEmpty as NonEmpty data Rule = Rule Text Def | RCom Text -- ^ @(* comment *)@ deriving (Eq, Show) data Def = - N Text -- ^ @nonterminal@ - | T Text -- ^ @\'terminal\'@ or @\"terminal\"@ - | S Text -- ^ @?special?@ - | Or [Def] -- ^ choice @a | b | c@ - | Seq [Def] -- ^ sequence @a, b, c@ - | Sub Def Def -- ^ difference @a - b@ - | Opt Def -- ^ opt @[a]@ - | Many Def -- ^ repetition @{a}@ - | Com Text -- ^ comment + N Text -- ^ @nonterminal@ + | T Text -- ^ @\'terminal\'@ or @\"terminal\"@ + | S Text -- ^ @?special?@ + | Or (NonEmpty Def) -- ^ choice @a | b | c@ + | Seq (NonEmpty Def) -- ^ sequence @a, b, c@ + | Sub Def Def -- ^ difference @a - b@ + | Opt Def -- ^ opt @[a]@ + | Many Def -- ^ repetition @{a}@ + | Com Text -- ^ comment deriving (Eq, Show) @@ -51,9 +53,9 @@ render1 (RCom txt) = render1 (Rule name def) = row' [span "ebnf-nt" name] "=" d : map (row' [] "|") ds where - d:ds = splitOrs def + d :| ds = splitOrs def splitOrs (Or ds) = ds - splitOrs d = [d] + splitOrs d = NonEmpty.singleton d row' c1 p d = Row mempty [cell c1, cell [punc p], cell (renderDef d)] cell is = Cell mempty AlignDefault (RowSpan 1) (ColSpan 1) [Plain is] @@ -76,9 +78,9 @@ renderDefAt p = \case T txt -> [span "ebnf-t" txt] S txt -> [span "ebnf-s" txt] Or ds -> renderParens (p > OR) $ - intercalate [Space, punc "|", Space] $ renderDefAt OR <$> ds + intercalate [Space, punc "|", Space] $ renderDefAt OR <$> NonEmpty.toList ds Seq ds -> renderParens (p > SEQ) $ - intercalate [punc ",", Space] $ renderDefAt SEQ <$> ds + intercalate [punc ",", Space] $ renderDefAt SEQ <$> NonEmpty.toList ds Sub d e -> renderParens (p >= SUB) $ renderDefAt SUB d <> [Space, span "ebnf-sub" "−", Space] <> @@ -111,10 +113,13 @@ def :: P Def def = ors ors :: P Def -ors = list Or <$> seqs `sepBy1` (sym "|") +ors = list1 Or <$> seqs `sepBy1'` (sym "|") seqs :: P Def -seqs = list Seq <$> sub `sepBy1` (sym ",") +seqs = list1 Seq <$> sub `sepBy1'` (sym ",") + +sepBy1' :: P a -> P z -> P (NonEmpty a) +sepBy1' a b = NonEmpty.fromList <$> sepBy1 a b sub :: P Def sub = do @@ -154,9 +159,9 @@ comment = do try (string_ "(*"); go ["(*"] 1 where bracketed :: (Def -> a) -> Char -> Char -> P a bracketed f o c = f <$> between (char' o) (char' c) def -list :: ([a] -> a) -> [a] -> a -list _ [x] = x -list f xs = f xs +list1 :: (NonEmpty a -> a) -> NonEmpty a -> a +list1 _ (x :| []) = x +list1 f xs = f xs sym :: Text -> P Text diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index 70ac7c4..f13767c 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -33,11 +33,11 @@ executable langfilter RecordWildCards, ViewPatterns build-depends: - base >= 4.14.0.0 && < 4.17, + base >= 4.14.0.0 && < 4.20, containers ^>= 0.6.2.1, filepath ^>= 1.4.2.1, - megaparsec ^>= 9.0.1, + megaparsec ^>= 9.6.1, process ^>= 1.6.11.0, pandoc-types ^>= 1.23, - text, + text ^>= 2.1, pretty-show ^>= 1.10 From 14bcc959c9a26ba5565d7406c8f93105039912e1 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sun, 24 Dec 2023 01:41:38 +0100 Subject: [PATCH 090/127] fix a metadata typo --- pages/zalajmkwely/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/zalajmkwely/index.md b/pages/zalajmkwely/index.md index 6e90b75..aee7587 100644 --- a/pages/zalajmkwely/index.md +++ b/pages/zalajmkwely/index.md @@ -1,6 +1,6 @@ --- title: Zalajmkwély -lang: zalajmkwely +conlang: zalajmkwely ... # Phonology From d44c407560df01a2b6e6989dd1b1e743ff58a416 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sun, 24 Dec 2023 01:42:17 +0100 Subject: [PATCH 091/127] expand iksa (v) --- pages/laantas/words.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pages/laantas/words.yaml b/pages/laantas/words.yaml index cd594ce..6310b59 100644 --- a/pages/laantas/words.yaml +++ b/pages/laantas/words.yaml @@ -1243,6 +1243,18 @@ iksa: n: - imperative auxiliary - only used in second person + - if 2sg is the subject of the auxiliary clause too, the marker in that + clause can be omitted + - can be used alone with an adjectival noun for the object + e: + - o: šikkúm iksaha + t: go away + - o: rusmánam iksaha + t: let me sleep + - o: kait iksaha + t: be good + - o: ufat iksaha + t: stay warm (said on oct 31, the last day before winter) gari: p: ˈɡa.ɾi From a2dc61b4289135d78c7a606ba24394399412f84f Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 25 Dec 2023 21:44:48 +0100 Subject: [PATCH 092/127] =?UTF-8?q?l=C3=A1ntas=20script=20updates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- laantas-script/Glyphs.hs | 52 +++++++++++++++++++++------------------- laantas-script/Split.hs | 5 +++- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index 78fc504..485c089 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -75,7 +75,7 @@ ttPath = P [mA (0,0), lR (7,0)] tkPath = tPart 5 <> shiftX 5 (aPath <> kBottomShort <> P [mA (4,-3), lR (0,8)]) tgPath = shiftX 5 gShortHat <> tkPath tdPath = tPart 4 <> shiftX 4 dPath -tƶPath = tdPath <> P [mA (6,-3), lR (3,0)] +tƶPath = shiftX 5 gShortHat <> tdPath tpPath = P [mA (2,-3), lR (0,8), mA (0,-3), lR (6,0)] <> shiftX 4 pPath tbPath = tPart 6 <> shiftX 4 bPath tsPath = tPart 4 <> shiftX 4 sPath @@ -101,10 +101,10 @@ ks = simpleG ksPath 9 kLeft = P [mA (0,0), cR (0.5,0.75) (0,3) (0,5)] kBottomShort = P [cR (0,0) (2.6,0) (4,-0.5)] -kPath = kLeft <> kBottom <> P [mA (5,-3), lR (0,8)] +kPath = kLeft <> kBottom <> shiftX 5 longAPath kBottom = P [cR (0,0) (3,0) (5,-0.5)] kShortPart = kLeft <> kBottomShort -kShort = kShortPart <> P [mA (4,-3), lR (0,8)] +kShort = kShortPart <> shiftX 4 longAPath kkPath = kShortPart <> shiftX 4 kShort ksPath = kShortPart <> shiftX 4 sPath @@ -119,7 +119,7 @@ gShortHat = P [mA (1.25,-2.75), qR (1.25,0.125) (2.75,-0.25)] d = simpleG dPath 5 -dPath = dPart <> P [mA (5,-3), lR (0,8)] +dPath = dPart <> shiftX 5 longAPath dPart' = dBase <> dJoin' dPart = dBase <> dJoin dJoin = P [cR (2,0) (3,-0.75) (3,-1.5)] @@ -209,7 +209,7 @@ bGlyphs = [("b", b), ("bj", bj)] b = simpleG bPath 6 bj = simpleG bjPath 9 -bPath = shiftX 1 gHat <> wPart <> P [mA (6,-3), lR (0,8)] +bPath = shiftX 1 gHat <> wPart <> shiftX 6 longAPath bjPath = bPath <> P [mA (6,0.5), qR (1.5,0) (3,-0.5)] <> @@ -395,7 +395,7 @@ mf = simpleG mfPath 13 mj = simpleG mjPath 9 m0 = simpleG m0Path 6 -mPath = mPart <> shiftX 6 aPath +mPath = mPart <> shiftX 6 longAPath mInit = P [mA (0.5,0), cR (-0.25,0.2) (-0.5,2.25) (-0.5,3.5)] mBumpI = P [cR (0,2) (2.5,2) (3,0)] <> mLine mLine = P [qR (0.125,-1) (0.125,-2), mR (-0.125,2)] @@ -423,7 +423,7 @@ mǧPath = mFree <> shiftX 7 ǧPath mwPath = mPart <> shiftX 6 wPath mhPath = mPart <> shiftX 6 hPath mfPath = mFree <> shiftX 7 fPath -mjPath = mFree <> P [mA (5.5,0), lR (3.5,0), lR (0,5)] +mjPath = mFree <> shiftX 4.5 jPath m0Path = mFree <> P [mA (1.25,7), cR (3.55,-0.3) (3.8,0) (4,0.5)] @@ -512,11 +512,11 @@ rf = simpleG rfPath 10.5 rj = simpleG rjPath 7.5 r0 = simpleG r0Path 5 -rPath = rPart <> P [mA (5,-3), lR (0,8)] +rPath = rPart <> shiftX 5 longAPath rPart = P [mA (0,5), cR (3.5,0) (5,-1) (5,-2)] -rPartMid = P [mA (0,5), cR (1.25,0) (3.5,-1) (3.5,-2)] +rPartMid = P [mA (0,5), cR (1.25,0) (3.25,-1) (3.25,-2)] rPartShort = P [mA (0,5), cR (1,0) (3,-1) (3,-2)] -rShort = rPartShort <> P [mA (3,-3), lR (0,8)] +rShort = rPartShort <> shiftX 3 longAPath rtPath = rPartMid <> shiftX 2 tPath rkPath = rPartShort <> shiftX 3 kShort rgPath = rPartShort <> shiftX 3 gShort @@ -535,8 +535,8 @@ rǧPath = rMid <> shiftX 4.5 ǧPath rwPath = rMid <> shiftX 4.5 wPath rhPath = rMid <> shiftX 4.5 hPath rfPath = rMid <> shiftX 4.5 fPath -rjPath = rMid <> P [mA (3.5,0), lR (4,0), lR (0,5)] -rMid = rPartMid <> P [mA (3.5,0), lR (0,5)] +rjPath = rMid <> shiftX 4.5 jPathShort +rMid = rPartMid <> shiftX 3.25 longAPath r0Path = ŕPath <> P [mA (1.25,7), cR (2.2,-0.25) (2.8,0) (3,0.5)] @@ -572,7 +572,7 @@ r0Path = ŕPath <> P [mA (1.25,7), cR (2.2,-0.25) (2.8,0) (3,0.5)] w = simpleG wPath 6 -wPath = wPart <> shiftX 5.75 aPath +wPath = wPart <> shiftX 6 aPath wPart = uPath <> P [mA (2.5,0), lR (3.5,0)] @@ -583,7 +583,7 @@ hh = simpleG hhPath 16.5 hn = simpleG hnPath 15 hm = simpleG hmPath 16 -hPath = hPart <> shiftX 3.5 gHat <> P [mA (8.5,-3), lR (0,8)] +hPath = hPart <> shiftX 3.5 gHat <> shiftX 8.5 longAPath hPart' x = sPart <> P [mA (2.5,0), lR (1.5,0)] <> shiftX 4 x hPart = hPart' sPartIso hhPath = hPart' sPart <> P [mA (6.5,0), lR (1.5,0)] <> shiftX 8 hPart <> @@ -615,7 +615,7 @@ j = simpleG jPath 4 jPath = P [mA (0,0), qR (1.25,0.5) (4,0)] <> shiftX 3.75 aPath jPathShort = P [mA (0,0), qR (1,0.25) (3,0)] <> shiftX 2.75 aPath -jTall = gHat <> P [lR (0,8)] +jTall = gHat <> shiftX 5 longAPath vGlyphs = [("a", a), ("á", á), ("i", i), ("í", í), ("u", u), ("ú", ú), @@ -638,6 +638,7 @@ ua = simpleG uaPath 4.5 ŕ = simpleG ŕPath 5 aPath = P [mA (0.25,0), cR (-0.25,1) (-0.25,2) (-0.25,5)] +longAPath = P [mA (0.25,-3), cR (-0.25,1) (-0.25,2) (-0.25,5), lR (0, 3)] áPath = aPath <> shiftX 2 aPath íPath = P [mA (0,0), lR (5,0)] <> shiftX 2.75 aPath <> shiftX 4.75 aPath uPath = P [mA (2.25,0), @@ -654,10 +655,10 @@ uaPath = uNarrow <> shiftX 4.5 aPath ḿPath = mFree ńPath = nFree łPath = lFree -ŕPath = rPart <> P [mA (5,0), lR (0,5)] +ŕPath = rPart <> shiftX 5 aPath -adot = P . circR 0.2 +adot = circR 0.2 withWidth f (SI {width}) = (f width, width) sP = simpleDia . P @@ -665,18 +666,21 @@ sP = simpleDia . P -- no @mA@ because letters like t have the join not quite at the edge da = [sP [lR (0,5)]] dá = da <> [withWidth \w -> P [mA (w/2-1,8), cR (0.75,-0.5) (1.25,0.5) (2,0)]] -di = da <> [sP [cR (1,-2) (3,-3) (0,-3)]] -dí = da <> [sP [cR (1,-2) (4,-3) (-4,-3)]] -du = da <> [sP [lR (-4,0)]] -dú = du <> [sP [mR (4,-3), lR (-3,0)]] +di = da <> diLine +dí = da <> [sP [cR (1,0) (4,-3) (0,-3), qR (-3,0) (-4,1)]] +du = da <> duLine +dú = du <> [sP [mR (0.5, 3.5)]] <> duLine -dai = da <> [sP [mR (-4,-3), lR (2.5,0), lR (0,3)]] +duLine = [sP [qR (-1, -2.75) (-2, -3.5)]] +diLine = [sP [qR (1.5, -1.5) (1.5, -4)]] + +dai = da <> [sP [mR (-4,-3), lR (2.5,0), qR (-0.5,1) (-0.5,3)]] dau = da <> [sP [mR (-3,-3.5), cR (-1.5,0.25) (-1.5,3.25) (0,3), cR (1.5,-0.25) (1.5,-3.25) (0,-3), cR (1,-0.25) (2,0.5) (3,0)]] -dia = di <> [withWidth \w -> adot (-w/2,0)] -dua = du <> [withWidth \w -> P [mA (w/2,7)] <> adot (0,0)] +dia = di <> [sP $ adot (-4,0)] +dua = du <> [sP $ adot (-2,0)] dḿ = da <> [sP [mR (-4,-3), cR (-0.375,1.125) (-0.25,1.275) (-0.25,1.375), aR 0.625 0.625 0 Small CCW (1.5,0), diff --git a/laantas-script/Split.hs b/laantas-script/Split.hs index a904453..8aed8c8 100644 --- a/laantas-script/Split.hs +++ b/laantas-script/Split.hs @@ -23,8 +23,11 @@ longestWith name p = try $ go . Text.singleton =<< lcChar where Nothing -> fail $ "longestWith " <> name <> ": " <> show acc Just x -> try (do c <- lcChar; go $ Text.snoc acc c) <|> pure x +unthorn :: Text -> Text +unthorn = Text.map \case 'þ' -> 'ƶ'; 'ð' -> 'ƶ'; c -> c + maxFrom :: String -> Map Text a -> P a -maxFrom name i = longestWith name \x -> Map.lookup x i +maxFrom name i = longestWith name \x -> Map.lookup (unthorn x) i initial :: P Glyph initial = maxFrom "initial" initials From cb61556b17660a42b922a6459db391b322444938 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 25 Dec 2023 21:44:59 +0100 Subject: [PATCH 093/127] words for xmas and halloween --- pages/laantas/words.yaml | 46 +++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/pages/laantas/words.yaml b/pages/laantas/words.yaml index 6310b59..70d94ae 100644 --- a/pages/laantas/words.yaml +++ b/pages/laantas/words.yaml @@ -79,13 +79,12 @@ guwan: d: - sun - day + - guwanḿ: summer (jun-aug) ǧáhnu: p: ˈdʒaːx.nu t: n - d: - - autumn - - ǧáhnut: brown, orange + d: brown, orange ǧima: p: ˈdʒi.ma @@ -1428,6 +1427,7 @@ ufan: - ufat: - warm - bright + - ufit: cozy bisi: p: ˈbi.si @@ -1517,6 +1517,7 @@ santu: d: - rain - santutippi: rainwater + - santum: autumn (sep-oct) n: has tippim as subject kassa: @@ -1738,8 +1739,8 @@ kauba: - intelligence - časmát: intelligent -gḿba: - p: ˈɡm̩.ba +guba: + p: ˈɡu.ba t: {v: i} d: [grow, thrive] @@ -2048,3 +2049,38 @@ duguwa: - shun - avoid n: object in APUD-ABL + +šani: + p: ˈʃa.ni + t: n + d: + - flower + - šangubam: spring (mar-may) + see: guba + +igis: + p: ˈiɡ.is + t: n + d: ice + +igisi: + p: ˈi.ɡi.si + t: {v: t} + d: + - freeze + - igisim: winter (nov-jan) + - ƶulkusim: midwinter (solstice) + see: [igis, ƶulku] + +susuru: + p: ˈsu.su.ɾu + t: {v: i} + d: + - melt + - susurum: intermediate between winter and spring (feb) + +ƶulku: + p: ˈdʒul.ku + t: {v: i} + d: be deep + n: not a noun, unlike most adjectives. who knows why From 275490551bc9729003040024e8a25d16c21d90ab Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 25 Dec 2023 21:48:20 +0100 Subject: [PATCH 094/127] squash a warning --- laantas-script/GlyphsBase.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laantas-script/GlyphsBase.hs b/laantas-script/GlyphsBase.hs index 2bdceb7..5effe82 100644 --- a/laantas-script/GlyphsBase.hs +++ b/laantas-script/GlyphsBase.hs @@ -108,7 +108,7 @@ doGlyphs gs e = wrap $ run act e where liftDia :: Diacritic -> Diacritic' SizeInfo -liftDia f sz = let (x, w) = f sz in (x, sz {width = w} :: SizeInfo) +liftDia f sz@(SI {..}) = let (x, w) = f sz in (x, SI {width = w, ..}) glyphWidth :: EGlyph -> M Double glyphWidth (G {size}, ss) = From cb6a9766085efa2ec7da6cdb018562956786f78e Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Fri, 15 Mar 2024 00:56:54 +0100 Subject: [PATCH 095/127] =?UTF-8?q?new=20=C5=A1j=20ligature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- laantas-script/Glyphs.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index 485c089..854a687 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/Glyphs.hs @@ -298,7 +298,7 @@ s0Path = sPath <> P [mA (1.5,7), cR (1.8,-0.25) (2.6,0) (3,0.5)] šw = s2š sw šh = s2š sh šf = s2š sf -šj = s2š sj +šj = sj {path = P [mA (0.5, -1), cR (1,0.25) (2,-0.875) (1,-1.75)] <> path sj} š0 = s2š s0 šLine = P [mA (0.5,-2.25), qR (1.5,-0.25) (2,0.25)] From 22ae984c8ac944664ba4bb94bc46e96c38180a68 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 21 Mar 2024 17:11:27 +0100 Subject: [PATCH 096/127] =?UTF-8?q?l=C3=A1ntas=20words?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/laantas/words.yaml | 47 ++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/pages/laantas/words.yaml b/pages/laantas/words.yaml index 70d94ae..9568fe5 100644 --- a/pages/laantas/words.yaml +++ b/pages/laantas/words.yaml @@ -195,7 +195,9 @@ ustai: - t: {v: i} d: sing - t: n - d: song + d: + - song + - ustail: (also) magic purai: p: ˈpu.ɾaj @@ -311,7 +313,9 @@ gimimli: sá: p: ˈsaː t: adv - d: now + d: + - now + - sá sá: these days n: usually fronted in sentence gimimƶu: @@ -476,6 +480,7 @@ júli: p: ˈjuː.li t: {v: t} d: + - use (with direct object) - put (with lative cases) - take (with ablative cases) @@ -1494,8 +1499,8 @@ ki: - kisa: low - kisas: downwards -nuasga: - p: ˈnuəs.ɡa +gulai: + p: ˈgu.lai t: {v: i} d: jump @@ -1686,7 +1691,9 @@ nis: siha: p: ˈsi.xa t: {v: t} - d: remember + d: + - remember + - be careful with siham: t: n @@ -2041,7 +2048,13 @@ aga: tisu: t: {v: aux} d: if...then - n: see the grammar for details (when i write them) + n: + - see the grammar for details (when i write them) + - if-clause nominalised in in-abl + - then-clause is main, with tisu as aux verb + e: + o: bairunagulinḿ ákkínam tisu + t: if i see you i will scream duguwa: t: {v: t} @@ -2061,7 +2074,10 @@ duguwa: igis: p: ˈiɡ.is t: n - d: ice + d: + - ice + - crystal (also kut igis) + see: kus igisi: p: ˈi.ɡi.si @@ -2084,3 +2100,20 @@ susuru: t: {v: i} d: be deep n: not a noun, unlike most adjectives. who knows why + +patta: + p: ˈpat.ta + t: n + d: door + +šil: + p: ʃil + t: n + d: + - layer + - floor (level in building) + +kus: + p: kus + t: n + d: [stone, rock] From 97c345774462aa428843e1d5d21078616c1fd797 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 3 Jun 2024 03:33:36 +0200 Subject: [PATCH 097/127] =?UTF-8?q?make=20l=C3=A1ntas=20script=20color=20c?= =?UTF-8?q?onfigurable=20with=20LANG=5FCOLOR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- langfilter/LaantasImage.hs | 15 ++++++++------- langfilter/Lang.hs | 28 ++++++++++++++++++++-------- langfilter/Main.hs | 17 +++++++++++++++-- 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index cf807c5..69a9dff 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ $(BUILDDIR)/%.html: $(PAGESDIR)/%.md $(TEMPLATE) $(LANGFILTER) $(LAANTAS_SCRIPT) @echo "[pandoc] $<" mkdir -p $(dir $@) mkdir -p $(basename $@) - LAANTAS_SCRIPT="$(LAANTAS_SCRIPT)" \ + LAANTAS_SCRIPT="$(LAANTAS_SCRIPT)" LANG_COLOR="hsl(340deg, 50%, 35%)" \ DIRNAME="$(basename $@)" \ FILENAME="$@" \ pandoc -s --toc --template $(TEMPLATE) -o $@ $< \ diff --git a/langfilter/LaantasImage.hs b/langfilter/LaantasImage.hs index fc8ff5b..27844c8 100644 --- a/langfilter/LaantasImage.hs +++ b/langfilter/LaantasImage.hs @@ -2,6 +2,7 @@ module LaantasImage (Image (..), splitImage, splitImage', makeImage) where +import Lang import Text.Pandoc.Definition hiding (Image) import qualified Text.Pandoc.Definition as Pandoc import Data.Bifunctor @@ -26,22 +27,22 @@ data Image = showText :: Bool } deriving (Eq, Show) -splitImage :: Text -> Maybe Image +splitImage :: Vars => Text -> Maybe Image splitImage (Text.uncons -> Just (c, txt)) | c == '!' = Just $ splitImage' txt | c == '#' = Just $ (splitImage' txt) {showText = False} splitImage _ = Nothing -splitImage' :: Text -> Image +splitImage' :: Vars => Text -> Image splitImage' txt₀ = case imageOpts txt₀ of - Just (txt, opts) -> defaultImage txt + Just (txt, opts) -> defaultImage txt ?defColor & withOpt opts "file" (\f i -> i {file = makeFile f}) & withOpt opts "size" (\s i -> i {size = readt s}) & withOpt opts "stroke" (\k i -> i {stroke = readt k}) & withOpt opts "width" (\w i -> i {width = readt w}) & withOpt opts "color" (\c i -> i {color = c}) - Nothing -> defaultImage txt₀ + Nothing -> defaultImage txt₀ ?defColor where readt x = read $ Text.unpack x withOpt :: Ord k => Map k v -> k -> (v -> a -> a) -> (a -> a) @@ -50,8 +51,8 @@ withOpt m k f = Just v -> f v Nothing -> id -defaultImage :: Text -> Image -defaultImage txt = +defaultImage :: Text -> Text -> Image +defaultImage txt color = Image { text = Text.filter notPunc txt, title = toTitle txt, @@ -59,7 +60,7 @@ defaultImage txt = size = 20, stroke = 0.75, width = 600, - color = "hsl(340deg, 50%, 35%)", + color = color, showText = True } diff --git a/langfilter/Lang.hs b/langfilter/Lang.hs index 6459142..66d36e1 100644 --- a/langfilter/Lang.hs +++ b/langfilter/Lang.hs @@ -4,16 +4,28 @@ import Text.Pandoc.Definition import Data.Char (toLower) import qualified Data.Text as Text import System.IO +import Data.Text (Text) data Lang = Lántas deriving (Eq, Show) -type Vars = (?lang :: Maybe Lang) +type Vars = (?lang :: Maybe Lang, ?defColor :: Text) + +toText :: Maybe MetaValue -> IO (Maybe Text) +toText (Just (MetaInlines [Str s])) = toText (Just (MetaString s)) -- ugh +toText (Just (MetaString s)) = pure $ Just s +toText Nothing = pure Nothing +toText (Just ℓ) = do + hPutStrLn stderr $ "[WARN] expected a string, got: " <> show ℓ + pure Nothing toLang :: Maybe MetaValue -> IO (Maybe Lang) -toLang (Just (MetaInlines [Str s])) = toLang (Just (MetaString s)) -- ugh -toLang (Just (MetaString (Text.map toLower -> s))) - | s == "lántas" || s == "laantas" = pure $ Just Lántas -toLang Nothing = pure Nothing -toLang (Just ℓ) = do - hPutStrLn stderr $ "[WARN] unknown language: " <> show ℓ - pure Nothing +toLang m = do + mres <- fmap (Text.map toLower) <$> toText m + case mres of + Just res -> do + if res `elem` ["laantas", "lántas"] then + pure $ Just Lántas + else do + hPutStrLn stderr $ "[WARN] unknown language: " <> show res + pure Nothing + Nothing -> pure Nothing diff --git a/langfilter/Main.hs b/langfilter/Main.hs index b704193..a96cacd 100644 --- a/langfilter/Main.hs +++ b/langfilter/Main.hs @@ -9,17 +9,22 @@ import Text.Pandoc.Definition import Text.Pandoc.JSON import Text.Pandoc.Walk import Data.Maybe +import Data.Map (Map) import qualified Data.Map as Map +import Data.Text (Text) import qualified Data.Text as Text import Control.Applicative import Control.Monad +import System.Environment main :: IO () main = toJSONFilter filter where filter p@(Pandoc (Meta m) _) = do - lang' <- toLang $ Map.lookup "conlang" m - let ?lang = lang' + lang <- toLang $ Map.lookup "conlang" m + defColor <- getDefColor m + let ?lang = lang + let ?defColor = defColor fmap (walk makeEbnf . walk makeQuotes . walk (concatMap makeBlocks) . @@ -27,6 +32,14 @@ main = toJSONFilter filter where walkM spans =<< walkM (fmap concat . traverse glosses) p +getDefColor :: Map Text MetaValue -> IO Text +getDefColor m = do + res <- toText $ Map.lookup "lang-color" m + case res of + Just col -> pure col + Nothing -> do + env <- lookupEnv "LANG_COLOR" + pure $ maybe "black" Text.pack env pluck :: Eq a => a -> [a] -> Maybe [a] pluck _ [] = Nothing From 3237c127e01013d62777ebfa00cab49554c835d6 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Mon, 3 Jun 2024 04:07:09 +0200 Subject: [PATCH 098/127] remove laantas-script flags in glosses --- langfilter/Glosses.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/langfilter/Glosses.hs b/langfilter/Glosses.hs index 2250b2b..4890ebb 100644 --- a/langfilter/Glosses.hs +++ b/langfilter/Glosses.hs @@ -81,6 +81,7 @@ splitInlines is = filter (not . null) $ go is where fromList is1 : splitInlines (dropWhile (== Space) is') underlines :: [Inline] -> [Inline] -underlines = concatMap \case - Str txt -> Spans.underlines txt - i -> [i] +underlines = concatMap underlineStr . takeWhile (/= Str "|") where + underlineStr = \case + Str txt -> Spans.underlines txt + i -> [i] From 1f469f35ab2d7033491a64e7ac396e3d1a967a56 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sun, 15 Sep 2024 15:41:11 +0200 Subject: [PATCH 099/127] replace liftM2 with liftA2 --- laantas-script/GlyphsBase.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laantas-script/GlyphsBase.hs b/laantas-script/GlyphsBase.hs index 5effe82..5a49be1 100644 --- a/laantas-script/GlyphsBase.hs +++ b/laantas-script/GlyphsBase.hs @@ -56,7 +56,7 @@ joinSegs (P ps) = fmap mconcat $ sequence ps joinSegs (Shift dx dy segs) = do E {size} <- ask localS (Svg.shift (size * dx, size * dy)) $ joinSegs segs -joinSegs (ss1 :<>: ss2) = liftM2 (<>) (joinSegs ss1) (joinSegs ss2) +joinSegs (ss1 :<>: ss2) = liftA2 (<>) (joinSegs ss1) (joinSegs ss2) localS :: MonadState s m => (s -> s) -> m a -> m a localS f m = do old <- get; modify f; res <- m; put old; pure res From 99f4d7eac07cd41e3ddf70b3a6445eea356daeed Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Wed, 25 Sep 2024 23:02:59 +0200 Subject: [PATCH 100/127] fix attrs for implicit figures the syntax `![caption](path){.class}` (when interpreted as an implicit figure) attaches `class` to the `` tag. this moves it to the `
` --- langfilter/Main.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/langfilter/Main.hs b/langfilter/Main.hs index a96cacd..aa938a0 100644 --- a/langfilter/Main.hs +++ b/langfilter/Main.hs @@ -25,7 +25,8 @@ main = toJSONFilter filter where defColor <- getDefColor m let ?lang = lang let ?defColor = defColor - fmap (walk makeEbnf . + fmap (walk fixFigureClass . + walk makeEbnf . walk makeQuotes . walk (concatMap makeBlocks) . walk inlineLetterList) $ @@ -51,6 +52,11 @@ pluck1 [] _ = Nothing pluck1 (x:xs) ys = (x,) <$> pluck x ys <|> pluck1 xs ys +fixFigureClass :: Block -> Block +fixFigureClass (Figure (_, c1, a1) cap [Plain [Image (i, c2, a2) alt path]]) = + Figure (i, c1 ++ c2, a1 ++ a2) cap [Plain [Image ("", [], []) alt path]] +fixFigureClass b = b + makeBlocks :: Block -> [Block] makeBlocks (Div ("", clss, []) blks) | Just (cls, rest) <- pluck1 ["figure", "aside"] clss = From 3cd2c59be2195e5b2e79e4a90c80bd6015c1f0bd Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 26 Sep 2024 01:39:24 +0200 Subject: [PATCH 101/127] add markup --- langfilter/Spans.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/langfilter/Spans.hs b/langfilter/Spans.hs index 7d1fbfe..618ed0f 100644 --- a/langfilter/Spans.hs +++ b/langfilter/Spans.hs @@ -21,6 +21,7 @@ spans = \case | Just txt' <- enclosed "{" "}" txt -> lang txt' | Just txt' <- enclosed "!" "!" txt -> pure $ abbr txt' | Just txt' <- enclosed "*" "*" txt -> pure $ mark txt' + | Just txt' <- enclosed "@" "@" txt -> pure $ dfn txt' i -> pure i ipaA, ipaB, ipaN, abbr, mark :: Text -> Inline @@ -29,6 +30,7 @@ ipaB = Span (cls ["ipa", "ipa-broad"]) . text' ipaN = Span (cls ["ipa", "ipa-narrow"]) . text' abbr = Span (cls ["abbr"]) . text' . endash mark txt = RawInline "html" $ "" <> txt <> "" +dfn txt = RawInline "html" $ "" <> txt <> "" surround :: Text -> Text -> Text surround s txt = s <> txt <> s From 54a8aa11197d16fa257bb324e374561b9fc7a33e Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 06:07:57 +0100 Subject: [PATCH 102/127] parameterised rules in ebnf --- langfilter/Ebnf.hs | 60 +++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/langfilter/Ebnf.hs b/langfilter/Ebnf.hs index 5a83209..6dc4450 100644 --- a/langfilter/Ebnf.hs +++ b/langfilter/Ebnf.hs @@ -14,19 +14,20 @@ import Data.List.NonEmpty (NonEmpty (..)) import qualified Data.List.NonEmpty as NonEmpty data Rule = - Rule Text Def + Rule Text [Text] Def | RCom Text -- ^ @(* comment *)@ deriving (Eq, Show) data Def = - N Text -- ^ @nonterminal@ - | T Text -- ^ @\'terminal\'@ or @\"terminal\"@ - | S Text -- ^ @?special?@ - | Or (NonEmpty Def) -- ^ choice @a | b | c@ - | Seq (NonEmpty Def) -- ^ sequence @a, b, c@ - | Sub Def Def -- ^ difference @a - b@ - | Opt Def -- ^ opt @[a]@ - | Many Def -- ^ repetition @{a}@ - | Com Text -- ^ comment + N Text -- ^ @nonterminal@ + | T Text -- ^ @\'terminal\'@ or @\"terminal\"@ + | S Text -- ^ @?special?@ + | C Text (NonEmpty Def) -- ^ @param(X, Y)@ + | Or (NonEmpty Def) -- ^ choice @a | b | c@ + | Seq (NonEmpty Def) -- ^ sequence @a, b, c@ + | Sub Def Def -- ^ difference @a - b@ + | Opt Def -- ^ opt @[a]@ + | Many Def -- ^ repetition @{a}@ + | Com Text -- ^ comment deriving (Eq, Show) @@ -49,10 +50,16 @@ render rs = render1 :: Rule -> [Row] render1 (RCom txt) = - [Row mempty [Cell mempty AlignLeft (RowSpan 1) (ColSpan 3) [Plain [Str txt]]]] -render1 (Rule name def) = - row' [span "ebnf-nt" name] "=" d : map (row' [] "|") ds + [Row mempty [Cell mempty AlignLeft (RowSpan 1) (ColSpan 3) + [Plain [span "ebnf-com" txt]]]] +render1 (Rule name args def) = + row' lhs "=" d : map (row' [] "|") ds where + lhs = case args of + [] -> [span "ebnf-nt" name] + _ -> [span "ebnf-f" name, punc "("] ++ + intercalate [punc ";", Space] [[span "ebnf-nt" x] | x <- args] ++ + [punc ")"] d :| ds = splitOrs def splitOrs (Or ds) = ds splitOrs d = NonEmpty.singleton d @@ -77,6 +84,10 @@ renderDefAt p = \case N txt -> [span "ebnf-nt" txt] T txt -> [span "ebnf-t" txt] S txt -> [span "ebnf-s" txt] + C f xs -> + [span "ebnf-f" f, punc "("] ++ + intercalate [punc ";", Space] (renderDefAt OUTER <$> NonEmpty.toList xs) ++ + [punc ")"] Or ds -> renderParens (p > OR) $ intercalate [Space, punc "|", Space] $ renderDefAt OR <$> NonEmpty.toList ds Seq ds -> renderParens (p > SEQ) $ @@ -100,9 +111,14 @@ parse' = many rule rule :: P Rule rule = choice - [Rule <$> nt <* sym "=" <*> def <* sym ";", + [Rule <$> nt <*> lhsArgs <* sym "=" <*> def <* sym ";", RCom <$> comment] +lhsArgs :: P [Text] +lhsArgs = + sym "(" *> nt `sepBy1` sym ";" <* sym ")" + <|> pure [] + nt :: P Text nt = Text.unwords <$> some (word <* space) where word = Text.cons <$> first <*> takeWhileP Nothing isWordChar @@ -113,10 +129,10 @@ def :: P Def def = ors ors :: P Def -ors = list1 Or <$> seqs `sepBy1'` (sym "|") +ors = list1 Or <$> seqs `sepBy1'` sym "|" seqs :: P Def -seqs = list1 Seq <$> sub `sepBy1'` (sym ",") +seqs = list1 Seq <$> sub `sepBy1'` sym "," sepBy1' :: P a -> P z -> P (NonEmpty a) sepBy1' a b = NonEmpty.fromList <$> sepBy1 a b @@ -129,12 +145,18 @@ sub = do adef :: P Def adef = choice $ - [N <$> nt, T <$> term, S <$> special, + [call, T <$> term, S <$> special, Com <$> comment, bracketed id '(' ')', bracketed Opt '[' ']', bracketed Many '{' '}'] +call :: P Def +call = do + f <- nt + args <- optional $ sym "(" *> def `sepBy1` (sym ";") <* sym ")" + pure $ maybe (N f) (C f . NonEmpty.fromList) args + term :: P Text term = choice [str '\'', str '"'] @@ -147,7 +169,7 @@ str c = lexeme $ between (char c) (char c) (takeWhileP Nothing (/= c)) comment :: P Text comment = do try (string_ "(*"); go ["(*"] 1 where go :: [Text] -> Int -> P Text - go acc 0 = pure $ mconcat $ reverse acc + go acc 0 = mconcat (reverse acc) <$ space go acc i = choice [fragment (string "(*") (+ 1) acc i, fragment (string "*)") (subtract 1) acc i, @@ -171,7 +193,7 @@ char' :: Char -> P Char char' c = lexeme $ char c lexeme :: P a -> P a -lexeme p = p <* space +lexeme p = try $ p <* space optMaybe :: P a -> P (Maybe a) optMaybe = option Nothing . fmap Just From 26a44150494f3ec21ba62a34f030b6e1dbc6670b Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 06:08:10 +0100 Subject: [PATCH 103/127] =?UTF-8?q?remove=20#=20from=20l=C3=A1ntas=20passa?= =?UTF-8?q?ges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- langfilter/Glosses.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/langfilter/Glosses.hs b/langfilter/Glosses.hs index 4890ebb..c2398aa 100644 --- a/langfilter/Glosses.hs +++ b/langfilter/Glosses.hs @@ -43,7 +43,8 @@ glossTable = \case make l b n s g t = do let ℓ = length $ splitInlines s let colspecs = replicate ℓ (AlignDefault, ColWidthDefault) - let l' = cell1 ℓ $ underlines l; b' = cell1 ℓ <$> b; n' = cell1 ℓ <$> n + let l' = cell1 ℓ $ underlines $ noHash l + b' = cell1 ℓ <$> b; n' = cell1 ℓ <$> n let ss = cells s; gs = cells g; t' = cell1 ℓ t img <- case ?lang of Just Lántas -> @@ -85,3 +86,8 @@ underlines = concatMap underlineStr . takeWhile (/= Str "|") where underlineStr = \case Str txt -> Spans.underlines txt i -> [i] + +noHash :: [Inline] -> [Inline] +noHash = walk \case + Str str -> Str $ Text.filter (/= '#') str + i -> i From 5c28290cc20bdb3833a90d2c6022ef3a0578142a Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 16:31:55 +0100 Subject: [PATCH 104/127] junicode for body font --- style/fonts/junicode/junicode.css | 473 ++++++++++++++++++ style/fonts/junicode/ttf/Junicode-Bold.ttf | 3 + .../junicode/ttf/Junicode-BoldItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-Cond.ttf | 3 + .../junicode/ttf/Junicode-CondItalic.ttf | 3 + .../fonts/junicode/ttf/Junicode-CondLight.ttf | 3 + .../junicode/ttf/Junicode-CondLightItalic.ttf | 3 + .../junicode/ttf/Junicode-CondMedium.ttf | 3 + .../ttf/Junicode-CondMediumItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-Exp.ttf | 3 + style/fonts/junicode/ttf/Junicode-ExpBold.ttf | 3 + .../junicode/ttf/Junicode-ExpBoldItalic.ttf | 3 + .../fonts/junicode/ttf/Junicode-ExpItalic.ttf | 3 + .../fonts/junicode/ttf/Junicode-ExpMedium.ttf | 3 + .../junicode/ttf/Junicode-ExpMediumItalic.ttf | 3 + .../fonts/junicode/ttf/Junicode-ExpSmBold.ttf | 3 + .../junicode/ttf/Junicode-ExpSmBoldItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-Italic.ttf | 3 + style/fonts/junicode/ttf/Junicode-Light.ttf | 3 + .../junicode/ttf/Junicode-LightItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-Medium.ttf | 3 + .../junicode/ttf/Junicode-MediumItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-Regular.ttf | 3 + style/fonts/junicode/ttf/Junicode-SmBold.ttf | 3 + .../junicode/ttf/Junicode-SmBoldItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-SmCond.ttf | 3 + .../junicode/ttf/Junicode-SmCondItalic.ttf | 3 + .../junicode/ttf/Junicode-SmCondLight.ttf | 3 + .../ttf/Junicode-SmCondLightItalic.ttf | 3 + .../junicode/ttf/Junicode-SmCondMedium.ttf | 3 + .../ttf/Junicode-SmCondMediumItalic.ttf | 3 + style/fonts/junicode/ttf/Junicode-SmExp.ttf | 3 + .../fonts/junicode/ttf/Junicode-SmExpBold.ttf | 3 + .../junicode/ttf/Junicode-SmExpBoldItalic.ttf | 3 + .../junicode/ttf/Junicode-SmExpItalic.ttf | 3 + .../junicode/ttf/Junicode-SmExpMedium.ttf | 3 + .../ttf/Junicode-SmExpMediumItalic.ttf | 3 + .../junicode/ttf/Junicode-SmExpSmBold.ttf | 3 + .../ttf/Junicode-SmExpSmBoldItalic.ttf | 3 + .../fonts/junicode/woff2/Junicode-Bold.woff2 | 3 + .../junicode/woff2/Junicode-BoldItalic.woff2 | 3 + .../fonts/junicode/woff2/Junicode-Cond.woff2 | 3 + .../junicode/woff2/Junicode-CondItalic.woff2 | 3 + .../junicode/woff2/Junicode-CondLight.woff2 | 3 + .../woff2/Junicode-CondLightItalic.woff2 | 3 + .../junicode/woff2/Junicode-CondMedium.woff2 | 3 + .../woff2/Junicode-CondMediumItalic.woff2 | 3 + style/fonts/junicode/woff2/Junicode-Exp.woff2 | 3 + .../junicode/woff2/Junicode-ExpBold.woff2 | 3 + .../woff2/Junicode-ExpBoldItalic.woff2 | 3 + .../junicode/woff2/Junicode-ExpItalic.woff2 | 3 + .../junicode/woff2/Junicode-ExpMedium.woff2 | 3 + .../woff2/Junicode-ExpMediumItalic.woff2 | 3 + .../junicode/woff2/Junicode-ExpSmBold.woff2 | 3 + .../woff2/Junicode-ExpSmBoldItalic.woff2 | 3 + .../junicode/woff2/Junicode-Italic.woff2 | 3 + .../fonts/junicode/woff2/Junicode-Light.woff2 | 3 + .../junicode/woff2/Junicode-LightItalic.woff2 | 3 + .../junicode/woff2/Junicode-Medium.woff2 | 3 + .../woff2/Junicode-MediumItalic.woff2 | 3 + .../junicode/woff2/Junicode-Regular.woff2 | 3 + .../junicode/woff2/Junicode-SmBold.woff2 | 3 + .../woff2/Junicode-SmBoldItalic.woff2 | 3 + .../junicode/woff2/Junicode-SmCond.woff2 | 3 + .../woff2/Junicode-SmCondItalic.woff2 | 3 + .../junicode/woff2/Junicode-SmCondLight.woff2 | 3 + .../woff2/Junicode-SmCondLightItalic.woff2 | 3 + .../woff2/Junicode-SmCondMedium.woff2 | 3 + .../woff2/Junicode-SmCondMediumItalic.woff2 | 3 + .../fonts/junicode/woff2/Junicode-SmExp.woff2 | 3 + .../junicode/woff2/Junicode-SmExpBold.woff2 | 3 + .../woff2/Junicode-SmExpBoldItalic.woff2 | 3 + .../junicode/woff2/Junicode-SmExpItalic.woff2 | 3 + .../junicode/woff2/Junicode-SmExpMedium.woff2 | 3 + .../woff2/Junicode-SmExpMediumItalic.woff2 | 3 + .../junicode/woff2/Junicode-SmExpSmBold.woff2 | 3 + .../woff2/Junicode-SmExpSmBoldItalic.woff2 | 3 + style/fonts/junius/junius.css | 138 ----- style/fonts/junius/ttf/JuniusVF.ttf | 3 - style/fonts/junius/ttf/JuniusX-Bold.ttf | 3 - style/fonts/junius/ttf/JuniusX-Condensed.ttf | 3 - .../junius/ttf/JuniusX-CondensedBold.ttf | 3 - .../junius/ttf/JuniusX-CondensedLight.ttf | 3 - .../junius/ttf/JuniusX-CondensedMedium.ttf | 3 - .../junius/ttf/JuniusX-CondensedSemibold.ttf | 3 - style/fonts/junius/ttf/JuniusX-Light.ttf | 3 - style/fonts/junius/ttf/JuniusX-Medium.ttf | 3 - style/fonts/junius/ttf/JuniusX-Regular.ttf | 3 - .../junius/ttf/JuniusX-SemiCondensed.ttf | 3 - .../junius/ttf/JuniusX-SemiCondensedBold.ttf | 3 - .../junius/ttf/JuniusX-SemiCondensedLight.ttf | 3 - .../ttf/JuniusX-SemiCondensedMedium.ttf | 3 - .../ttf/JuniusX-SemiCondensedSemibold.ttf | 3 - style/fonts/junius/ttf/JuniusX-Semibold.ttf | 3 - style/fonts/junius/woff2/.directory | 6 - style/fonts/junius/woff2/JuniusVF.woff2 | 3 - style/fonts/junius/woff2/JuniusX-Bold.woff2 | 3 - .../junius/woff2/JuniusX-Condensed.woff2 | 3 - .../junius/woff2/JuniusX-CondensedBold.woff2 | 3 - .../junius/woff2/JuniusX-CondensedLight.woff2 | 3 - .../woff2/JuniusX-CondensedMedium.woff2 | 3 - .../woff2/JuniusX-CondensedSemibold.woff2 | 3 - style/fonts/junius/woff2/JuniusX-Light.woff2 | 3 - style/fonts/junius/woff2/JuniusX-Medium.woff2 | 3 - .../fonts/junius/woff2/JuniusX-Regular.woff2 | 3 - .../junius/woff2/JuniusX-SemiCondensed.woff2 | 3 - .../woff2/JuniusX-SemiCondensedBold.woff2 | 3 - .../woff2/JuniusX-SemiCondensedLight.woff2 | 3 - .../woff2/JuniusX-SemiCondensedMedium.woff2 | 3 - .../woff2/JuniusX-SemiCondensedSemibold.woff2 | 3 - .../fonts/junius/woff2/JuniusX-Semibold.woff2 | 3 - style/page.css | 84 ++-- 112 files changed, 741 insertions(+), 284 deletions(-) create mode 100644 style/fonts/junicode/junicode.css create mode 100644 style/fonts/junicode/ttf/Junicode-Bold.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-BoldItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-Cond.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-CondItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-CondLight.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-CondLightItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-CondMedium.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-CondMediumItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-Exp.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpBold.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpBoldItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpMedium.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpMediumItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpSmBold.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-ExpSmBoldItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-Italic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-Light.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-LightItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-Medium.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-MediumItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-Regular.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmBold.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmBoldItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmCond.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmCondItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmCondLight.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmCondLightItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmCondMedium.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmCondMediumItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExp.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpBold.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpBoldItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpMedium.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpMediumItalic.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpSmBold.ttf create mode 100644 style/fonts/junicode/ttf/Junicode-SmExpSmBoldItalic.ttf create mode 100644 style/fonts/junicode/woff2/Junicode-Bold.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-BoldItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-Cond.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-CondItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-CondLight.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-CondLightItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-CondMedium.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-CondMediumItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-Exp.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpBold.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpBoldItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpMedium.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpMediumItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpSmBold.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-ExpSmBoldItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-Italic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-Light.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-LightItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-Medium.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-MediumItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-Regular.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmBold.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmBoldItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmCond.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmCondItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmCondLight.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmCondLightItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmCondMedium.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmCondMediumItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExp.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpBold.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpBoldItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpMedium.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpMediumItalic.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpSmBold.woff2 create mode 100644 style/fonts/junicode/woff2/Junicode-SmExpSmBoldItalic.woff2 delete mode 100644 style/fonts/junius/junius.css delete mode 100644 style/fonts/junius/ttf/JuniusVF.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-Bold.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-Condensed.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-CondensedBold.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-CondensedLight.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-CondensedMedium.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-CondensedSemibold.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-Light.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-Medium.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-Regular.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-SemiCondensed.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-SemiCondensedBold.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-SemiCondensedLight.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-SemiCondensedMedium.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-SemiCondensedSemibold.ttf delete mode 100644 style/fonts/junius/ttf/JuniusX-Semibold.ttf delete mode 100644 style/fonts/junius/woff2/.directory delete mode 100644 style/fonts/junius/woff2/JuniusVF.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-Bold.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-Condensed.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-CondensedBold.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-CondensedLight.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-CondensedMedium.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-CondensedSemibold.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-Light.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-Medium.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-Regular.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-SemiCondensed.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-SemiCondensedBold.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-SemiCondensedLight.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-SemiCondensedMedium.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-SemiCondensedSemibold.woff2 delete mode 100644 style/fonts/junius/woff2/JuniusX-Semibold.woff2 diff --git a/style/fonts/junicode/junicode.css b/style/fonts/junicode/junicode.css new file mode 100644 index 0000000..907ee25 --- /dev/null +++ b/style/fonts/junicode/junicode.css @@ -0,0 +1,473 @@ +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Regular.ttf) format('ttf'), + url(woff2/Junicode-Regular.woff2) format('woff2'); + font-weight: 400; + font-style: normal; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Italic.ttf) format('ttf'), + url(woff2/Junicode-Italic.woff2) format('woff2'); + font-weight: 400; + font-style: italic; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Medium.ttf) format('ttf'), + url(woff2/Junicode-Medium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-MediumItalic.ttf) format('ttf'), + url(woff2/Junicode-MediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Medium.ttf) format('ttf'), + url(woff2/Junicode-Medium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-MediumItalic.ttf) format('ttf'), + url(woff2/Junicode-MediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmBold.ttf) format('ttf'), + url(woff2/Junicode-SmBold.woff2) format('woff2'); + font-weight: 600; + font-style: normal; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-SmBoldItalic.woff2) format('woff2'); + font-weight: 600; + font-style: italic; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Bold.ttf) format('ttf'), + url(woff2/Junicode-Bold.woff2) format('woff2'); + font-weight: 700; + font-style: normal; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-BoldItalic.ttf) format('ttf'), + url(woff2/Junicode-BoldItalic.woff2) format('woff2'); + font-weight: 700; + font-style: italic; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Light.ttf) format('ttf'), + url(woff2/Junicode-Light.woff2) format('woff2'); + font-weight: 200; + font-style: normal; + font-stretch: normal; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-LightItalic.ttf) format('ttf'), + url(woff2/Junicode-LightItalic.woff2) format('woff2'); + font-weight: 200; + font-style: italic; + font-stretch: normal; +} + + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExp.ttf) format('ttf'), + url(woff2/Junicode-SmExp.woff2) format('woff2'); + font-weight: 400; + font-style: normal; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpItalic.ttf) format('ttf'), + url(woff2/Junicode-SmExpItalic.woff2) format('woff2'); + font-weight: 400; + font-style: italic; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpMedium.ttf) format('ttf'), + url(woff2/Junicode-SmExpMedium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-SmExpMediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpMedium.ttf) format('ttf'), + url(woff2/Junicode-SmExpMedium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-SmExpMediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpSmBold.ttf) format('ttf'), + url(woff2/Junicode-SmExpSmBold.woff2) format('woff2'); + font-weight: 600; + font-style: normal; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpSmBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-SmExpSmBoldItalic.woff2) format('woff2'); + font-weight: 600; + font-style: italic; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpBold.ttf) format('ttf'), + url(woff2/Junicode-SmExpBold.woff2) format('woff2'); + font-weight: 700; + font-style: normal; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-SmExpBoldItalic.woff2) format('woff2'); + font-weight: 700; + font-style: italic; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpLight.ttf) format('ttf'), + url(woff2/Junicode-SmExpLight.woff2) format('woff2'); + font-weight: 200; + font-style: normal; + font-stretch: semi-expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmExpLightItalic.ttf) format('ttf'), + url(woff2/Junicode-SmExpLightItalic.woff2) format('woff2'); + font-weight: 200; + font-style: italic; + font-stretch: semi-expanded; +} + + + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Exp.ttf) format('ttf'), + url(woff2/Junicode-Exp.woff2) format('woff2'); + font-weight: 400; + font-style: normal; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpItalic.ttf) format('ttf'), + url(woff2/Junicode-ExpItalic.woff2) format('woff2'); + font-weight: 400; + font-style: italic; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpMedium.ttf) format('ttf'), + url(woff2/Junicode-ExpMedium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-ExpMediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpMedium.ttf) format('ttf'), + url(woff2/Junicode-ExpMedium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-ExpMediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpSmBold.ttf) format('ttf'), + url(woff2/Junicode-ExpSmBold.woff2) format('woff2'); + font-weight: 600; + font-style: normal; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpSmBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-ExpSmBoldItalic.woff2) format('woff2'); + font-weight: 600; + font-style: italic; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpBold.ttf) format('ttf'), + url(woff2/Junicode-ExpBold.woff2) format('woff2'); + font-weight: 700; + font-style: normal; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-ExpBoldItalic.woff2) format('woff2'); + font-weight: 700; + font-style: italic; + font-stretch: expanded; +} + + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmCond.ttf) format('ttf'), + url(woff2/Junicode-SmCond.woff2) format('woff2'); + font-weight: 400; + font-style: normal; + font-stretch: semi-condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmCondItalic.ttf) format('ttf'), + url(woff2/Junicode-SmCondItalic.woff2) format('woff2'); + font-weight: 400; + font-style: italic; + font-stretch: semi-condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmCondMedium.ttf) format('ttf'), + url(woff2/Junicode-SmCondMedium.woff2) format('woff2'); + font-weight: 600; + font-style: normal; + font-stretch: semi-condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmCondMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-SmCondMediumItalic.woff2) format('woff2'); + font-weight: 600; + font-style: italic; + font-stretch: semi-condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmCondBold.ttf) format('ttf'), + url(woff2/Junicode-SmCondBold.woff2) format('woff2'); + font-weight: 700; + font-style: normal; + font-stretch: semi-condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-SmCondBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-SmCondBoldItalic.woff2) format('woff2'); + font-weight: 700; + font-style: italic; + font-stretch: semi-condensed; +} + + + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-Cond.ttf) format('ttf'), + url(woff2/Junicode-Cond.woff2) format('woff2'); + font-weight: 400; + font-style: normal; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondItalic.ttf) format('ttf'), + url(woff2/Junicode-CondItalic.woff2) format('woff2'); + font-weight: 400; + font-style: italic; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondMedium.ttf) format('ttf'), + url(woff2/Junicode-CondMedium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-CondMediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondMedium.ttf) format('ttf'), + url(woff2/Junicode-CondMedium.woff2) format('woff2'); + font-weight: 500; + font-style: normal; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondMediumItalic.ttf) format('ttf'), + url(woff2/Junicode-CondMediumItalic.woff2) format('woff2'); + font-weight: 500; + font-style: italic; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondSmBold.ttf) format('ttf'), + url(woff2/Junicode-CondSmBold.woff2) format('woff2'); + font-weight: 600; + font-style: normal; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondSmBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-CondSmBoldItalic.woff2) format('woff2'); + font-weight: 600; + font-style: italic; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondBold.ttf) format('ttf'), + url(woff2/Junicode-CondBold.woff2) format('woff2'); + font-weight: 700; + font-style: normal; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-CondBoldItalic.ttf) format('ttf'), + url(woff2/Junicode-CondBoldItalic.woff2) format('woff2'); + font-weight: 700; + font-style: italic; + font-stretch: condensed; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpLight.ttf) format('ttf'), + url(woff2/Junicode-ExpLight.woff2) format('woff2'); + font-weight: 200; + font-style: normal; + font-stretch: expanded; +} + +@font-face { + font-family: Junicode; + src: url(ttf/Junicode-ExpLightItalic.ttf) format('ttf'), + url(woff2/Junicode-ExpLightItalic.woff2) format('woff2'); + font-weight: 200; + font-style: italic; + font-stretch: expanded; +} diff --git a/style/fonts/junicode/ttf/Junicode-Bold.ttf b/style/fonts/junicode/ttf/Junicode-Bold.ttf new file mode 100644 index 0000000..6c344c9 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Bold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccba2f08ad8c5e4313233cf9fb4fd4756bf4fcbabc4fca65bab9aa3b5d3c77ba +size 1255068 diff --git a/style/fonts/junicode/ttf/Junicode-BoldItalic.ttf b/style/fonts/junicode/ttf/Junicode-BoldItalic.ttf new file mode 100644 index 0000000..e08dafc --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-BoldItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6da7015ee232d7f1f82743363483b7ea70227262781450287b8b4b6be0b6e8f8 +size 1329168 diff --git a/style/fonts/junicode/ttf/Junicode-Cond.ttf b/style/fonts/junicode/ttf/Junicode-Cond.ttf new file mode 100644 index 0000000..62df0e4 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Cond.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec2120bfabd6ddc4984846558826d0e938a4ae1f0e2be580fc16f199a8173a69 +size 1247960 diff --git a/style/fonts/junicode/ttf/Junicode-CondItalic.ttf b/style/fonts/junicode/ttf/Junicode-CondItalic.ttf new file mode 100644 index 0000000..84756f0 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-CondItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb035b381ee1b348f9701e52882e7d66c232b545787e3d882d204741be856180 +size 1315088 diff --git a/style/fonts/junicode/ttf/Junicode-CondLight.ttf b/style/fonts/junicode/ttf/Junicode-CondLight.ttf new file mode 100644 index 0000000..2b912ae --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-CondLight.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:072494a4aee5c381044a90c42119eb7bf63e0f017f116551885ed44bc4b7062c +size 1247236 diff --git a/style/fonts/junicode/ttf/Junicode-CondLightItalic.ttf b/style/fonts/junicode/ttf/Junicode-CondLightItalic.ttf new file mode 100644 index 0000000..6cdee39 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-CondLightItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:478290d8a163f8188d99ec62a6237aa7425caf8e88fd088420ae4d9a7e06a73a +size 1310976 diff --git a/style/fonts/junicode/ttf/Junicode-CondMedium.ttf b/style/fonts/junicode/ttf/Junicode-CondMedium.ttf new file mode 100644 index 0000000..966dbc2 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-CondMedium.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a98a04f0f2b6ab9a658d6a986b3c0218841ee7daac16e39bdbc8138f4b4121c +size 1257968 diff --git a/style/fonts/junicode/ttf/Junicode-CondMediumItalic.ttf b/style/fonts/junicode/ttf/Junicode-CondMediumItalic.ttf new file mode 100644 index 0000000..89ac910 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-CondMediumItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a678b63cc194ca5a48ee091861d73ff7d73a1721de3e3277a8a5d38234b46eeb +size 1329300 diff --git a/style/fonts/junicode/ttf/Junicode-Exp.ttf b/style/fonts/junicode/ttf/Junicode-Exp.ttf new file mode 100644 index 0000000..a6334e1 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Exp.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14899aa0756a82b0d3ebf720506ca289227603d11b09acdb49a21d4e5a18ec17 +size 1254344 diff --git a/style/fonts/junicode/ttf/Junicode-ExpBold.ttf b/style/fonts/junicode/ttf/Junicode-ExpBold.ttf new file mode 100644 index 0000000..5cb0349 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6408b734c17f068f1808d5cc44e36fb4b22fed5ac06235cf8ee852c611165a2 +size 1276204 diff --git a/style/fonts/junicode/ttf/Junicode-ExpBoldItalic.ttf b/style/fonts/junicode/ttf/Junicode-ExpBoldItalic.ttf new file mode 100644 index 0000000..8913c13 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpBoldItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bfc0d3c4796838b6846b9a9e8626de1f039df4a1caac4c8a8668f448f4bc054 +size 1340300 diff --git a/style/fonts/junicode/ttf/Junicode-ExpItalic.ttf b/style/fonts/junicode/ttf/Junicode-ExpItalic.ttf new file mode 100644 index 0000000..706370b --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145d12ddab600a3da60105f06a1d5b1b5401507504e8e7570cbcfe654cd2bc66 +size 1330404 diff --git a/style/fonts/junicode/ttf/Junicode-ExpMedium.ttf b/style/fonts/junicode/ttf/Junicode-ExpMedium.ttf new file mode 100644 index 0000000..d009289 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpMedium.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c93525f4e9633b0f161af07e2a8631aae7dd60151f01cfcb27b67d9428e9d66c +size 1270300 diff --git a/style/fonts/junicode/ttf/Junicode-ExpMediumItalic.ttf b/style/fonts/junicode/ttf/Junicode-ExpMediumItalic.ttf new file mode 100644 index 0000000..0868704 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpMediumItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42135b5902640449143e7c6482e28c8ab109835b3e7b5450b1aa7a346d3eb7e3 +size 1337832 diff --git a/style/fonts/junicode/ttf/Junicode-ExpSmBold.ttf b/style/fonts/junicode/ttf/Junicode-ExpSmBold.ttf new file mode 100644 index 0000000..9def20b --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpSmBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2004fbc16760d50cbd2223daf87be8cf3c05f1c1606e4f5832284867f1b97f43 +size 1275068 diff --git a/style/fonts/junicode/ttf/Junicode-ExpSmBoldItalic.ttf b/style/fonts/junicode/ttf/Junicode-ExpSmBoldItalic.ttf new file mode 100644 index 0000000..4d8573d --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-ExpSmBoldItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8ab1bc4e63f87f8d5377947596b0adff3a111b213013a31d2ead558349a8563 +size 1336212 diff --git a/style/fonts/junicode/ttf/Junicode-Italic.ttf b/style/fonts/junicode/ttf/Junicode-Italic.ttf new file mode 100644 index 0000000..984f3ca --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33ed5b1db4389c093dae153e8bc342ab61ef1cf9b13886cc26e83786a47b094a +size 1321256 diff --git a/style/fonts/junicode/ttf/Junicode-Light.ttf b/style/fonts/junicode/ttf/Junicode-Light.ttf new file mode 100644 index 0000000..f9a6770 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Light.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cfa9d02fca2894b504cf30e59894ad1394b86028849de2cf720cfb522f82435 +size 1232116 diff --git a/style/fonts/junicode/ttf/Junicode-LightItalic.ttf b/style/fonts/junicode/ttf/Junicode-LightItalic.ttf new file mode 100644 index 0000000..4e0d257 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-LightItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b73bab20a5b9ea485cc33acc0ab9c0c3b7814fd2dc49efcd8c366c48858fbd7 +size 1306116 diff --git a/style/fonts/junicode/ttf/Junicode-Medium.ttf b/style/fonts/junicode/ttf/Junicode-Medium.ttf new file mode 100644 index 0000000..3385d98 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Medium.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:433ac16be03ed529b528e4a53c5d124d93ae111c7640cebb433f7a61168146ca +size 1255660 diff --git a/style/fonts/junicode/ttf/Junicode-MediumItalic.ttf b/style/fonts/junicode/ttf/Junicode-MediumItalic.ttf new file mode 100644 index 0000000..42a4f81 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-MediumItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:469e10f908eda375b028743aabbffb63f21c1da9566f349a19ef118909fb71a1 +size 1325612 diff --git a/style/fonts/junicode/ttf/Junicode-Regular.ttf b/style/fonts/junicode/ttf/Junicode-Regular.ttf new file mode 100644 index 0000000..6a4f299 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-Regular.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c5174cc05b6f781de959344d81bf82066eab6937182ee9329a30452b7d04f10 +size 1246392 diff --git a/style/fonts/junicode/ttf/Junicode-SmBold.ttf b/style/fonts/junicode/ttf/Junicode-SmBold.ttf new file mode 100644 index 0000000..cfeec57 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81cd873907fadd9e3b6d134bc5f05cce4834bcfa7197260c9f7b1ba19524bba9 +size 1254184 diff --git a/style/fonts/junicode/ttf/Junicode-SmBoldItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmBoldItalic.ttf new file mode 100644 index 0000000..b18cfa9 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmBoldItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa90685da0fb72eb21490ac5e864c5e215ffcf79bbe70e0b4525a0184bec966e +size 1325352 diff --git a/style/fonts/junicode/ttf/Junicode-SmCond.ttf b/style/fonts/junicode/ttf/Junicode-SmCond.ttf new file mode 100644 index 0000000..1c75b0a --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmCond.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:813f905e0746845e1c14df2e39157e280f715e55fc4c1a1aa6a04e08ccf4615d +size 1253624 diff --git a/style/fonts/junicode/ttf/Junicode-SmCondItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmCondItalic.ttf new file mode 100644 index 0000000..4f34a6d --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmCondItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7486a8727463292b0ad2811d3055b11fb30b4a580a71bc745a569e78771e89a6 +size 1311744 diff --git a/style/fonts/junicode/ttf/Junicode-SmCondLight.ttf b/style/fonts/junicode/ttf/Junicode-SmCondLight.ttf new file mode 100644 index 0000000..720623f --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmCondLight.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a068504e22a417977b73de98f2acb4eea7dcefb6ca1c7fcd8a991fd425b28d85 +size 1247976 diff --git a/style/fonts/junicode/ttf/Junicode-SmCondLightItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmCondLightItalic.ttf new file mode 100644 index 0000000..ed6a859 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmCondLightItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:751191f6bfd9c8307599ec3eb560b3e16873d342063f731cd65cd3ec45739484 +size 1311392 diff --git a/style/fonts/junicode/ttf/Junicode-SmCondMedium.ttf b/style/fonts/junicode/ttf/Junicode-SmCondMedium.ttf new file mode 100644 index 0000000..07f95eb --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmCondMedium.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4be179568d863ea849fd1566f928c4c60c19e4eb2fb71fd98c871083fe8e21c +size 1255992 diff --git a/style/fonts/junicode/ttf/Junicode-SmCondMediumItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmCondMediumItalic.ttf new file mode 100644 index 0000000..40410d6 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmCondMediumItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbc5e45b9f2b23a1b3b3396455786946a84afc8ecd3f5bc7a0a83f3956fdabe7 +size 1322568 diff --git a/style/fonts/junicode/ttf/Junicode-SmExp.ttf b/style/fonts/junicode/ttf/Junicode-SmExp.ttf new file mode 100644 index 0000000..f1549d1 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExp.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0f5e4148d9d02bbd469e64f71c88cccf70ba59723fa95885382343d31c692e2 +size 1253968 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpBold.ttf b/style/fonts/junicode/ttf/Junicode-SmExpBold.ttf new file mode 100644 index 0000000..009aecb --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd012ce39d39c20f51616707715374c8017cca9555bd9bdf82ff9a80b631a8db +size 1266856 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpBoldItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmExpBoldItalic.ttf new file mode 100644 index 0000000..f6b0834 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpBoldItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f710bac87507158b9a5484e52fe5ce5fac4e73cc0f8cfa61acd95a8eba996b1c +size 1335172 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmExpItalic.ttf new file mode 100644 index 0000000..de11e3a --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26ce04052fd1a8e5810bc45ae5150ef68ca33ecde19ecc1a193fbd0871a5147f +size 1323744 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpMedium.ttf b/style/fonts/junicode/ttf/Junicode-SmExpMedium.ttf new file mode 100644 index 0000000..ec6c852 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpMedium.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1ad45da207b2d707693527f77fba9d2808030795af4e14fccc1f9ea34a5f12c +size 1263944 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpMediumItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmExpMediumItalic.ttf new file mode 100644 index 0000000..a962226 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpMediumItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df16e97de392967dee5f1dbf24835e8271490b9462abb4050d9dc540196d9594 +size 1330680 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpSmBold.ttf b/style/fonts/junicode/ttf/Junicode-SmExpSmBold.ttf new file mode 100644 index 0000000..6c50e39 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpSmBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caf25996da8f677fe80705e51dee36f095816c4fa0e623dcc0da664935792ef2 +size 1264180 diff --git a/style/fonts/junicode/ttf/Junicode-SmExpSmBoldItalic.ttf b/style/fonts/junicode/ttf/Junicode-SmExpSmBoldItalic.ttf new file mode 100644 index 0000000..2a02453 --- /dev/null +++ b/style/fonts/junicode/ttf/Junicode-SmExpSmBoldItalic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbb9f97d4303f7d815d909ead8a298bb82544a3b6fe2cee3811ae017defe1fe9 +size 1329116 diff --git a/style/fonts/junicode/woff2/Junicode-Bold.woff2 b/style/fonts/junicode/woff2/Junicode-Bold.woff2 new file mode 100644 index 0000000..9b8b18e --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Bold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a83375645880a50f03a6422db6142874b880acb6ebe381de87bd015d05cbc4e5 +size 426696 diff --git a/style/fonts/junicode/woff2/Junicode-BoldItalic.woff2 b/style/fonts/junicode/woff2/Junicode-BoldItalic.woff2 new file mode 100644 index 0000000..998e77f --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-BoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df3999e5a340a8199874f0a4b95de6e1b816cd08a30ff7dc6b88f8c2d8e3b98a +size 444116 diff --git a/style/fonts/junicode/woff2/Junicode-Cond.woff2 b/style/fonts/junicode/woff2/Junicode-Cond.woff2 new file mode 100644 index 0000000..bf9bac0 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Cond.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b164dc21de6394a141c2b6558625030b03a2152c65458bc88adacc75f4fb7af +size 431408 diff --git a/style/fonts/junicode/woff2/Junicode-CondItalic.woff2 b/style/fonts/junicode/woff2/Junicode-CondItalic.woff2 new file mode 100644 index 0000000..5c32de0 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-CondItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e96bbf6201019bf5c4fceaa99dfe9b4576909d97e8d74e99412bac209b526d24 +size 451708 diff --git a/style/fonts/junicode/woff2/Junicode-CondLight.woff2 b/style/fonts/junicode/woff2/Junicode-CondLight.woff2 new file mode 100644 index 0000000..665ff09 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-CondLight.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6289f97cb92462452058b4ff06aba5082e53e4acf7d6e241dc8cd6756f2d8061 +size 441980 diff --git a/style/fonts/junicode/woff2/Junicode-CondLightItalic.woff2 b/style/fonts/junicode/woff2/Junicode-CondLightItalic.woff2 new file mode 100644 index 0000000..9cdf01e --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-CondLightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e3e03ff2075fc74e04e227d75f8b2157345b9ad09f28315d53466fc59f18a47 +size 463596 diff --git a/style/fonts/junicode/woff2/Junicode-CondMedium.woff2 b/style/fonts/junicode/woff2/Junicode-CondMedium.woff2 new file mode 100644 index 0000000..a343496 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-CondMedium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5818458893620a3342e95dffcb87e3dbec87121b9bb406715311710bca3b598 +size 443200 diff --git a/style/fonts/junicode/woff2/Junicode-CondMediumItalic.woff2 b/style/fonts/junicode/woff2/Junicode-CondMediumItalic.woff2 new file mode 100644 index 0000000..6327288 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-CondMediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:241e05bfd3275c29ead45768e0e236c10b74d401c33458b5c7147266b5a78ac3 +size 468644 diff --git a/style/fonts/junicode/woff2/Junicode-Exp.woff2 b/style/fonts/junicode/woff2/Junicode-Exp.woff2 new file mode 100644 index 0000000..eebb42b --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Exp.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:562d6a6cbe53a40cf5d38f9a42aae426787709aedf16a99e42e48fa29fe966d2 +size 444452 diff --git a/style/fonts/junicode/woff2/Junicode-ExpBold.woff2 b/style/fonts/junicode/woff2/Junicode-ExpBold.woff2 new file mode 100644 index 0000000..9f32e71 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bcef29fa7ced75a69c1bd9b3ce55d4bb4fe011588784d7d0ce99d7097641a99 +size 455104 diff --git a/style/fonts/junicode/woff2/Junicode-ExpBoldItalic.woff2 b/style/fonts/junicode/woff2/Junicode-ExpBoldItalic.woff2 new file mode 100644 index 0000000..ec59acc --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40a2de6347b92dfa5f6156a0e090dee63affe5bfe6413dd01a6a1b76b2912685 +size 474560 diff --git a/style/fonts/junicode/woff2/Junicode-ExpItalic.woff2 b/style/fonts/junicode/woff2/Junicode-ExpItalic.woff2 new file mode 100644 index 0000000..3080324 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff7f056155f8fd11a0ecbb01e92de8bb4d1f1ac528b3ff7a7b64e0a630b81244 +size 462120 diff --git a/style/fonts/junicode/woff2/Junicode-ExpMedium.woff2 b/style/fonts/junicode/woff2/Junicode-ExpMedium.woff2 new file mode 100644 index 0000000..da41318 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpMedium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:741b52c49f2feba0d5541c1fe63def8cb646b5f628cd5ada447d3b08989c28a5 +size 453484 diff --git a/style/fonts/junicode/woff2/Junicode-ExpMediumItalic.woff2 b/style/fonts/junicode/woff2/Junicode-ExpMediumItalic.woff2 new file mode 100644 index 0000000..48d0e05 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpMediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47258cb42b4ec519a20a3f3b4d9f0d00528f50fd5bca952cba048017736643f9 +size 473900 diff --git a/style/fonts/junicode/woff2/Junicode-ExpSmBold.woff2 b/style/fonts/junicode/woff2/Junicode-ExpSmBold.woff2 new file mode 100644 index 0000000..f780f01 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpSmBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b75a1178e35346388ca69f4183073bf7badc21a0e81f294bb2d8e450cbcf5d72 +size 456984 diff --git a/style/fonts/junicode/woff2/Junicode-ExpSmBoldItalic.woff2 b/style/fonts/junicode/woff2/Junicode-ExpSmBoldItalic.woff2 new file mode 100644 index 0000000..4c42149 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-ExpSmBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be0c82b9e07c14b5e2c0ea47706243572f4e8932b974231e8487dc67e68d1447 +size 478260 diff --git a/style/fonts/junicode/woff2/Junicode-Italic.woff2 b/style/fonts/junicode/woff2/Junicode-Italic.woff2 new file mode 100644 index 0000000..9ca4ec5 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b37ebad037e4c100094d843770a5961fa56d43eb13d3b7284c7a10cfb84bd573 +size 437808 diff --git a/style/fonts/junicode/woff2/Junicode-Light.woff2 b/style/fonts/junicode/woff2/Junicode-Light.woff2 new file mode 100644 index 0000000..508de18 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Light.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48b13a81568bb5da67bcfc36959fb245024828800ecc8272614f4a924259e5fa +size 426312 diff --git a/style/fonts/junicode/woff2/Junicode-LightItalic.woff2 b/style/fonts/junicode/woff2/Junicode-LightItalic.woff2 new file mode 100644 index 0000000..eb84370 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-LightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d676ec7ff55b869e52fdf68697ed1b1e43e5e97562bd8753882a553103e9d65 +size 442632 diff --git a/style/fonts/junicode/woff2/Junicode-Medium.woff2 b/style/fonts/junicode/woff2/Junicode-Medium.woff2 new file mode 100644 index 0000000..73f7244 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Medium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9256f5a0d77712d614ec0a45a5f4e6d2cf9958f1c3b2aa019177115e6abd6410 +size 431240 diff --git a/style/fonts/junicode/woff2/Junicode-MediumItalic.woff2 b/style/fonts/junicode/woff2/Junicode-MediumItalic.woff2 new file mode 100644 index 0000000..f01f807 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-MediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a3bec5a541b006517f72487c5ecb7bd631fc8e01c1750ec830ac26da511a65a +size 450524 diff --git a/style/fonts/junicode/woff2/Junicode-Regular.woff2 b/style/fonts/junicode/woff2/Junicode-Regular.woff2 new file mode 100644 index 0000000..f34237c --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-Regular.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47e25b588c6b30e8596f73769341ceabef253554e72d6892a88395715e4e43d9 +size 417760 diff --git a/style/fonts/junicode/woff2/Junicode-SmBold.woff2 b/style/fonts/junicode/woff2/Junicode-SmBold.woff2 new file mode 100644 index 0000000..cf3ffd1 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b908968a94dda5b81527fbf55347b88240c85ac02eb998b8649c768e929fcaae +size 433096 diff --git a/style/fonts/junicode/woff2/Junicode-SmBoldItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmBoldItalic.woff2 new file mode 100644 index 0000000..f34b247 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42f08186858b04d76092bc353117dc139ecd3975556e4ef455ed523b2f604bab +size 452960 diff --git a/style/fonts/junicode/woff2/Junicode-SmCond.woff2 b/style/fonts/junicode/woff2/Junicode-SmCond.woff2 new file mode 100644 index 0000000..22ae84a --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmCond.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a46c58b7ad0081f5bd7a892d5d2d021bf9b4c127c359e091667ca2ff991f9cf +size 434996 diff --git a/style/fonts/junicode/woff2/Junicode-SmCondItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmCondItalic.woff2 new file mode 100644 index 0000000..0796176 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmCondItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09302931301a3e5f01a314a5a89d05222defbe6081a9f09236161acf3d4ad729 +size 456664 diff --git a/style/fonts/junicode/woff2/Junicode-SmCondLight.woff2 b/style/fonts/junicode/woff2/Junicode-SmCondLight.woff2 new file mode 100644 index 0000000..0c330d4 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmCondLight.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11f7385d61f70b2080d2382ab056755040666da05f9d52d4704bb3c0d4daf7d5 +size 441068 diff --git a/style/fonts/junicode/woff2/Junicode-SmCondLightItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmCondLightItalic.woff2 new file mode 100644 index 0000000..f9d719c --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmCondLightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:733ced63ae65cdafd88669e4a79774dc27f750ec7ee38666c51b84cb569d8ebc +size 463448 diff --git a/style/fonts/junicode/woff2/Junicode-SmCondMedium.woff2 b/style/fonts/junicode/woff2/Junicode-SmCondMedium.woff2 new file mode 100644 index 0000000..43333b2 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmCondMedium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e875a27508b117442622c9c99530bfc3533c84ea33566a5fea2ce94fefe54534 +size 437968 diff --git a/style/fonts/junicode/woff2/Junicode-SmCondMediumItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmCondMediumItalic.woff2 new file mode 100644 index 0000000..251aad0 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmCondMediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c28023d5143fe80830d251c72d16f828c70fd6b8e0b7f8ad69cd99ad4733933 +size 462480 diff --git a/style/fonts/junicode/woff2/Junicode-SmExp.woff2 b/style/fonts/junicode/woff2/Junicode-SmExp.woff2 new file mode 100644 index 0000000..d48b5df --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExp.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50d2f1033a37ed85440bf29f9cd5829ca55458120bb8652074085916a53631af +size 441244 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpBold.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpBold.woff2 new file mode 100644 index 0000000..300d43e --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54afdb88abf1f0edc27e95a4e66044e94ac0bde34067a9b685497e6c1857032f +size 450024 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpBoldItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpBoldItalic.woff2 new file mode 100644 index 0000000..a24d7c1 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90124ea4ef1c326e351d2d38c0e73998a5c41283b7c9aef67033b58282c10c84 +size 471996 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpItalic.woff2 new file mode 100644 index 0000000..364e38b --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fefde7ce129e8c98f3329d1cb53efc4b9203980402b201ce904d2b383c2af3f3 +size 461240 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpMedium.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpMedium.woff2 new file mode 100644 index 0000000..dc9c392 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpMedium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24f34b5465acc49ece1ee1e7e38c82e4c3ca145719ff37d7c7d9ec5f5c5a5001 +size 443852 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpMediumItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpMediumItalic.woff2 new file mode 100644 index 0000000..de3d812 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpMediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dcd80e79313deb2d8df3006f3040cbfd01bdeb83ef80a0026fa860ecd85ccd7 +size 465764 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpSmBold.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpSmBold.woff2 new file mode 100644 index 0000000..882ecef --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpSmBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39d0ade45b4a211db78678d8351887e9076ea8c8590d8d33575b83b213699c0e +size 447072 diff --git a/style/fonts/junicode/woff2/Junicode-SmExpSmBoldItalic.woff2 b/style/fonts/junicode/woff2/Junicode-SmExpSmBoldItalic.woff2 new file mode 100644 index 0000000..3cc5bf2 --- /dev/null +++ b/style/fonts/junicode/woff2/Junicode-SmExpSmBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef3b1112ed0860861a317815dc91de036779bc276767199571b85e47c9c8bb8e +size 468728 diff --git a/style/fonts/junius/junius.css b/style/fonts/junius/junius.css deleted file mode 100644 index 9617bc2..0000000 --- a/style/fonts/junius/junius.css +++ /dev/null @@ -1,138 +0,0 @@ -@font-face { - font-family: JuniusX; - font-weight: 300; - font-stretch: normal; - src: - url(ttf/JuniusX-Light.ttf) format('ttf'), - url(woff2/JuniusX-Light.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 400; - font-stretch: normal; - src: - url(ttf/JuniusX-Regular.ttf) format('ttf'), - url(woff2/JuniusX-Regular.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 500; - font-stretch: normal; - src: - url(ttf/JuniusX-Medium.ttf) format('ttf'), - url(woff2/JuniusX-Medium.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 600; - font-stretch: normal; - src: - url(ttf/JuniusX-Semibold.ttf) format('ttf'), - url(woff2/JuniusX-Semibold.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 700; - font-stretch: normal; - src: - url(ttf/JuniusX-Bold.ttf) format('ttf'), - url(woff2/JuniusX-Bold.woff2) format('woff2'); -} - - -@font-face { - font-family: JuniusX; - font-weight: 300; - font-stretch: semi-condensed; - src: - url(ttf/JuniusX-SemiCondensedLight.ttf) format('ttf'), - url(woff2/JuniusX-SemiCondensedLight.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 400; - font-stretch: semi-condensed; - src: - url(ttf/JuniusX-SemiCondensed.ttf) format('ttf'), - url(woff2/JuniusX-SemiCondensed.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 500; - font-stretch: semi-condensed; - src: - url(ttf/JuniusX-SemiCondensedMedium.ttf) format('ttf'), - url(woff2/JuniusX-SemiCondensedMedium.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 600; - font-stretch: semi-condensed; - src: - url(ttf/JuniusX-SemiCondensedSemibold.ttf) format('ttf'), - url(woff2/JuniusX-SemiCondensedSemibold.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 700; - font-stretch: semi-condensed; - src: - url(ttf/JuniusX-SemiCondensedBold.ttf) format('ttf'), - url(woff2/JuniusX-SemiCondensedBold.woff2) format('woff2'); -} - - -@font-face { - font-family: JuniusX; - font-weight: 300; - font-stretch: condensed; - src: - url(ttf/JuniusX-CondensedLight.ttf) format('ttf'), - url(woff2/JuniusX-CondensedLight.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 400; - font-stretch: condensed; - src: - url(ttf/JuniusX-Condensed.ttf) format('ttf'), - url(woff2/JuniusX-Condensed.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 500; - font-stretch: condensed; - src: - url(ttf/JuniusX-CondensedMedium.ttf) format('ttf'), - url(woff2/JuniusX-CondensedMedium.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 600; - font-stretch: condensed; - src: - url(ttf/JuniusX-CondensedSemibold.ttf) format('ttf'), - url(woff2/JuniusX-CondensedSemibold.woff2) format('woff2'); -} - -@font-face { - font-family: JuniusX; - font-weight: 700; - font-stretch: condensed; - src: - url(ttf/JuniusX-CondensedBold.ttf) format('ttf'), - url(woff2/JuniusX-CondensedBold.woff2) format('woff2'); -} - -/* idk what "JuniusVF" is */ diff --git a/style/fonts/junius/ttf/JuniusVF.ttf b/style/fonts/junius/ttf/JuniusVF.ttf deleted file mode 100644 index d20b55b..0000000 --- a/style/fonts/junius/ttf/JuniusVF.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9338dc7cd0669f122ecbff0fba87625132c583a58ecef9831757b3d1b87410d4 -size 1759772 diff --git a/style/fonts/junius/ttf/JuniusX-Bold.ttf b/style/fonts/junius/ttf/JuniusX-Bold.ttf deleted file mode 100644 index 99de863..0000000 --- a/style/fonts/junius/ttf/JuniusX-Bold.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eac83ccfbd14c8368d505c6608590db7e000d232dfdc9fa0373a1642566b6b26 -size 977624 diff --git a/style/fonts/junius/ttf/JuniusX-Condensed.ttf b/style/fonts/junius/ttf/JuniusX-Condensed.ttf deleted file mode 100644 index e7ea13a..0000000 --- a/style/fonts/junius/ttf/JuniusX-Condensed.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7aa1eeae761c81172a5ac8e3a856da4c778698403948f68b78159e14c71fe77a -size 966844 diff --git a/style/fonts/junius/ttf/JuniusX-CondensedBold.ttf b/style/fonts/junius/ttf/JuniusX-CondensedBold.ttf deleted file mode 100644 index 0fde143..0000000 --- a/style/fonts/junius/ttf/JuniusX-CondensedBold.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6c0dbb3f4e8b2f855fe320af6d38e05dadeb3107781c3cfad94b0dc9dc36367 -size 1022000 diff --git a/style/fonts/junius/ttf/JuniusX-CondensedLight.ttf b/style/fonts/junius/ttf/JuniusX-CondensedLight.ttf deleted file mode 100644 index 63b4171..0000000 --- a/style/fonts/junius/ttf/JuniusX-CondensedLight.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:66c587edb73a91834cce49f6ae3aa2edecd268305737590f96177693d530b4b5 -size 955348 diff --git a/style/fonts/junius/ttf/JuniusX-CondensedMedium.ttf b/style/fonts/junius/ttf/JuniusX-CondensedMedium.ttf deleted file mode 100644 index 0c88f00..0000000 --- a/style/fonts/junius/ttf/JuniusX-CondensedMedium.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c5043cdde4318621c203427cda31f76fcdab7a31dbfb922dcadb25a59a5d05ab -size 959612 diff --git a/style/fonts/junius/ttf/JuniusX-CondensedSemibold.ttf b/style/fonts/junius/ttf/JuniusX-CondensedSemibold.ttf deleted file mode 100644 index 48200fc..0000000 --- a/style/fonts/junius/ttf/JuniusX-CondensedSemibold.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c96687554b3c8b4e0110941669ba4176bd85cd08203b291f8fa55ad82849a84 -size 977996 diff --git a/style/fonts/junius/ttf/JuniusX-Light.ttf b/style/fonts/junius/ttf/JuniusX-Light.ttf deleted file mode 100644 index 146587f..0000000 --- a/style/fonts/junius/ttf/JuniusX-Light.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d8334ec8ac6da2007332d3b023bcb448b9cda2c807ca15517099680d3a56b612 -size 948300 diff --git a/style/fonts/junius/ttf/JuniusX-Medium.ttf b/style/fonts/junius/ttf/JuniusX-Medium.ttf deleted file mode 100644 index f05a96e..0000000 --- a/style/fonts/junius/ttf/JuniusX-Medium.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6dd78bb79cd100b98a7551fad2bf18e7a3f865f205bdb6a8c007d19d8ddbdacb -size 975296 diff --git a/style/fonts/junius/ttf/JuniusX-Regular.ttf b/style/fonts/junius/ttf/JuniusX-Regular.ttf deleted file mode 100644 index 19bf1c9..0000000 --- a/style/fonts/junius/ttf/JuniusX-Regular.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a724fce6526e9d0b076cefeb426fa50af1f24db77fba2a06c9cb3d06d05af867 -size 949196 diff --git a/style/fonts/junius/ttf/JuniusX-SemiCondensed.ttf b/style/fonts/junius/ttf/JuniusX-SemiCondensed.ttf deleted file mode 100644 index d229967..0000000 --- a/style/fonts/junius/ttf/JuniusX-SemiCondensed.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bd5de498d3a313015b739dc2c037844d91fa767a9e42784668fef144f8515d6e -size 956728 diff --git a/style/fonts/junius/ttf/JuniusX-SemiCondensedBold.ttf b/style/fonts/junius/ttf/JuniusX-SemiCondensedBold.ttf deleted file mode 100644 index c7d0f87..0000000 --- a/style/fonts/junius/ttf/JuniusX-SemiCondensedBold.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b9ccc435ce03199a24688f1cd8ba6f1f110a99f3d9ebaa1e7ff01cac94d63d4c -size 1011308 diff --git a/style/fonts/junius/ttf/JuniusX-SemiCondensedLight.ttf b/style/fonts/junius/ttf/JuniusX-SemiCondensedLight.ttf deleted file mode 100644 index 116b7ac..0000000 --- a/style/fonts/junius/ttf/JuniusX-SemiCondensedLight.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cbd5786da32a5c4df7f4812e9a60080b36bf18a66394d83272344afefccc6d06 -size 953916 diff --git a/style/fonts/junius/ttf/JuniusX-SemiCondensedMedium.ttf b/style/fonts/junius/ttf/JuniusX-SemiCondensedMedium.ttf deleted file mode 100644 index 627b259..0000000 --- a/style/fonts/junius/ttf/JuniusX-SemiCondensedMedium.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c61e99aa28ce96d2af12806133897ee29bccd1d6d11ddd030ef13442d6b0e19f -size 980628 diff --git a/style/fonts/junius/ttf/JuniusX-SemiCondensedSemibold.ttf b/style/fonts/junius/ttf/JuniusX-SemiCondensedSemibold.ttf deleted file mode 100644 index 9d6858a..0000000 --- a/style/fonts/junius/ttf/JuniusX-SemiCondensedSemibold.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d6562c4b91f46b479e39f84306f3ea4e61867fb789a354cac5079a5b932d4cbd -size 973364 diff --git a/style/fonts/junius/ttf/JuniusX-Semibold.ttf b/style/fonts/junius/ttf/JuniusX-Semibold.ttf deleted file mode 100644 index 413c340..0000000 --- a/style/fonts/junius/ttf/JuniusX-Semibold.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a59ad4e6551fe8e533d54a6402e6c80649de11422ac1b1fc078a2f09fde92950 -size 952596 diff --git a/style/fonts/junius/woff2/.directory b/style/fonts/junius/woff2/.directory deleted file mode 100644 index e263a3a..0000000 --- a/style/fonts/junius/woff2/.directory +++ /dev/null @@ -1,6 +0,0 @@ -[Dolphin] -PreviewsShown=false -SortFoldersFirst=false -Timestamp=2021,4,3,1,1,24 -Version=4 -ViewMode=2 diff --git a/style/fonts/junius/woff2/JuniusVF.woff2 b/style/fonts/junius/woff2/JuniusVF.woff2 deleted file mode 100644 index af36b6c..0000000 --- a/style/fonts/junius/woff2/JuniusVF.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba71a369e74390f7c5aff047f6bbd8ea48a3a6145aa2d9c9b01cb782c8d53e23 -size 754316 diff --git a/style/fonts/junius/woff2/JuniusX-Bold.woff2 b/style/fonts/junius/woff2/JuniusX-Bold.woff2 deleted file mode 100644 index 6646b99..0000000 --- a/style/fonts/junius/woff2/JuniusX-Bold.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e13f917fd220cd08063eeb23d96034472af4765fe6b80f50f98187cd67761f13 -size 336700 diff --git a/style/fonts/junius/woff2/JuniusX-Condensed.woff2 b/style/fonts/junius/woff2/JuniusX-Condensed.woff2 deleted file mode 100644 index 1f4fa39..0000000 --- a/style/fonts/junius/woff2/JuniusX-Condensed.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:23208d589722b8a17e7cbdeffeee85ef0e29ed8b088cf68c994e150de3f59b20 -size 346732 diff --git a/style/fonts/junius/woff2/JuniusX-CondensedBold.woff2 b/style/fonts/junius/woff2/JuniusX-CondensedBold.woff2 deleted file mode 100644 index 3116b20..0000000 --- a/style/fonts/junius/woff2/JuniusX-CondensedBold.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:758d92772d176050a8e3ebe113673636006fc6f8565ba45623b02199f1905fad -size 371560 diff --git a/style/fonts/junius/woff2/JuniusX-CondensedLight.woff2 b/style/fonts/junius/woff2/JuniusX-CondensedLight.woff2 deleted file mode 100644 index 670a369..0000000 --- a/style/fonts/junius/woff2/JuniusX-CondensedLight.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b60720752198869437282f332f0efb23aba33f2bdd31e43fdd112f24f744d47 -size 351604 diff --git a/style/fonts/junius/woff2/JuniusX-CondensedMedium.woff2 b/style/fonts/junius/woff2/JuniusX-CondensedMedium.woff2 deleted file mode 100644 index 71760c0..0000000 --- a/style/fonts/junius/woff2/JuniusX-CondensedMedium.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b55cbdaf390b30b68fb3a078fe358f46b8e5b7f1cd9ccbf3b0b72444cdd82f28 -size 356840 diff --git a/style/fonts/junius/woff2/JuniusX-CondensedSemibold.woff2 b/style/fonts/junius/woff2/JuniusX-CondensedSemibold.woff2 deleted file mode 100644 index daa5d91..0000000 --- a/style/fonts/junius/woff2/JuniusX-CondensedSemibold.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5259866c61175cf20eecdf7ea31f54b4a89182509812883a61d6f6897e186355 -size 363932 diff --git a/style/fonts/junius/woff2/JuniusX-Light.woff2 b/style/fonts/junius/woff2/JuniusX-Light.woff2 deleted file mode 100644 index 2c5182f..0000000 --- a/style/fonts/junius/woff2/JuniusX-Light.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:195a97a42e199a66312dd00be49f2c8b88862da1764cf2531259034462d1a23d -size 336800 diff --git a/style/fonts/junius/woff2/JuniusX-Medium.woff2 b/style/fonts/junius/woff2/JuniusX-Medium.woff2 deleted file mode 100644 index 4a604f6..0000000 --- a/style/fonts/junius/woff2/JuniusX-Medium.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:65b78b4c1cb98e76b70edaf3eb73c0182975e24d4a2791da509f5eb966bf625e -size 341044 diff --git a/style/fonts/junius/woff2/JuniusX-Regular.woff2 b/style/fonts/junius/woff2/JuniusX-Regular.woff2 deleted file mode 100644 index 30d3d26..0000000 --- a/style/fonts/junius/woff2/JuniusX-Regular.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:280dd92d77f38c4d4ddbf84636f86784bb74de7fb0ede6f146aaf29b0df64b33 -size 326720 diff --git a/style/fonts/junius/woff2/JuniusX-SemiCondensed.woff2 b/style/fonts/junius/woff2/JuniusX-SemiCondensed.woff2 deleted file mode 100644 index 1d393ab..0000000 --- a/style/fonts/junius/woff2/JuniusX-SemiCondensed.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:942ce909d772a2256b1c4fc9bae055babe5e8f4fd579a1fefee88e1e32013e44 -size 347000 diff --git a/style/fonts/junius/woff2/JuniusX-SemiCondensedBold.woff2 b/style/fonts/junius/woff2/JuniusX-SemiCondensedBold.woff2 deleted file mode 100644 index 9655301..0000000 --- a/style/fonts/junius/woff2/JuniusX-SemiCondensedBold.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91c8fb2a449813b7020bee1ff358dfa4edde96c47ee601b009c66a579419744a -size 367260 diff --git a/style/fonts/junius/woff2/JuniusX-SemiCondensedLight.woff2 b/style/fonts/junius/woff2/JuniusX-SemiCondensedLight.woff2 deleted file mode 100644 index 179190a..0000000 --- a/style/fonts/junius/woff2/JuniusX-SemiCondensedLight.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2691dc45943d617f3ce5d4dc8b02344df706e0380ca640aeb2ec784521fb583 -size 350348 diff --git a/style/fonts/junius/woff2/JuniusX-SemiCondensedMedium.woff2 b/style/fonts/junius/woff2/JuniusX-SemiCondensedMedium.woff2 deleted file mode 100644 index dc6ad29..0000000 --- a/style/fonts/junius/woff2/JuniusX-SemiCondensedMedium.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1595068404829df4460c59424761be9818f5974783d7f0f5e0459b485f1ee7da -size 353160 diff --git a/style/fonts/junius/woff2/JuniusX-SemiCondensedSemibold.woff2 b/style/fonts/junius/woff2/JuniusX-SemiCondensedSemibold.woff2 deleted file mode 100644 index cda0e56..0000000 --- a/style/fonts/junius/woff2/JuniusX-SemiCondensedSemibold.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de262a04a745cc6a9b557defcf101ed01de6fe7278bfced5171d69b970046a35 -size 357508 diff --git a/style/fonts/junius/woff2/JuniusX-Semibold.woff2 b/style/fonts/junius/woff2/JuniusX-Semibold.woff2 deleted file mode 100644 index c9c4b44..0000000 --- a/style/fonts/junius/woff2/JuniusX-Semibold.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:735b5a7672a0ae4862fb416f884331d9a2916b9e2dfad10ed42eaa54adbf8185 -size 341192 diff --git a/style/page.css b/style/page.css index 93518d7..e706fe8 100644 --- a/style/page.css +++ b/style/page.css @@ -1,5 +1,5 @@ @import url(fonts/muller/muller.css); -@import url(fonts/junius/junius.css); +@import url(fonts/junicode/junicode.css); @import url(fonts/pragmatapro/pragmatapro.css); @import url(counters.css); @@ -10,15 +10,34 @@ --bg-col: hsl(40deg, 91%, 98%); --link-col: hsl(355deg, 52%, 48%); - --ipa-font: JuniusX; + --ipa-font: Junicode; + --body-font: Muller; + + --junicode-features: + "ccmp", "calt", "liga", "locl", "mark", "mkmk", + "ss01", "cv91" 2; + /* ccmp: glyph composition (required) + * calt: contextual alternates (required) + * liga: standard ligatures (required) + * locl: localised forms + * mark/mkmk: mark (diacritic) positioning (required) + * ss01: modern icelandic Þþð + * cv91: alternate Ŋ (the one that's like a big ŋ with no descender) + */ } :root { background: var(--root-col); - font-family: Muller; + /* font-family: var(--body-font); */ + font-family: var(--ipa-font); + font-feature-settings: var(--junicode-features); + font-weight: 500; + font-stretch: semi-expanded; font-size: 16pt; + line-height: 150%; + height: 100vh; } @@ -41,51 +60,29 @@ header { } header h1 { - font-size: 350%; - font-weight: 100; - margin-top: 0; + font-size: 250%; + margin-top: 0.4em; } h1, h2, h3, h4, h5, h6 { + font-stretch: semi-condensed; + font-weight: 600; margin: 1em 0 0.25em; } -h1 { - font-size: 200%; - font-weight: 200; -} - -h2 { - font-size: 180%; - font-weight: 200; -} - -h3 { - font-size: 160%; - font-weight: 200; -} - -h4 { - font-size: 140%; - font-weight: 300; -} - -h5 { - font-size: 120%; - font-weight: 300; -} - -h6 { - font-size: 100%; - font-weight: 400; -} +h1 { font-size: 200%; } +h2 { font-size: 180%; } +h3 { font-size: 160%; } +h4 { font-size: 140%; } +h5 { font-size: 120%; } +h6 { font-size: 100%; } a { color: var(--link-col); } b, strong { - font-weight: 600; + font-weight: 700; } ul li { @@ -100,7 +97,7 @@ table { } th { - font-weight: 500; + font-weight: 700; } thead th { @@ -114,7 +111,8 @@ td, th { code { font-family: PragmataPro; - font-size: 90%; + font-size: 80%; + font-weight: 400; } pre { @@ -126,16 +124,14 @@ pre { .ipa, .lang, .ebnf-t { font-family: var(--ipa-font); - font-feature-settings: - "ccmp", "calt", "liga", "loca", "mark", "mkmk", "ss01"; - /* ss01 to use modern Þþð design, others to make juniusx go brrr - * maybe i can just turn loca off but idk what other regional forms - * it does that i actually want */ + font-feature-settings: var(--junicode-features); text-underline-offset: 0.125em; } .ipa { + font-feature-settings: "ss03"; + /* ss03: latin-style greek letters */ font-weight: 500; } @@ -185,7 +181,7 @@ blockquote { display: flex; flex-direction: row; flex-wrap: wrap; - justify-content: space-around; + justify-content: center; width: 80%; row-gap: 0.5em; column-gap: 1.5em; From e63446418c9cc2678711bcd98776b26f3a5498d1 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 16:32:06 +0100 Subject: [PATCH 105/127] ebnf function styles --- style/page.css | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/style/page.css b/style/page.css index e706fe8..cbfe8a9 100644 --- a/style/page.css +++ b/style/page.css @@ -296,7 +296,7 @@ footer { .ebnf-nt { font-weight: 500; - color: hsl(155deg, 80%, 30%); + color: hsl(155deg, 80%, 20%); white-space: nowrap; } @@ -318,6 +318,17 @@ footer { color: hsl(330deg, 80%, 30%); } +.ebnf-f { + font-weight: bold; + color: hsl(280deg, 80%, 30%); +} + +.ebnf-com { + font-style: italic; + color: hsl(350deg, 20%, 40%); + margin-left: 1em; +} + blockquote { max-width: 70%; border-left: 1px solid black; From 0a681100b4d5349de20683366323fecc683171f5 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 16:32:36 +0100 Subject: [PATCH 106/127] =?UTF-8?q?l=C3=A1ntas=20words?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/laantas/words.yaml | 248 ++++++++++++++++++++++++--------------- 1 file changed, 156 insertions(+), 92 deletions(-) diff --git a/pages/laantas/words.yaml b/pages/laantas/words.yaml index 9568fe5..fbc6a97 100644 --- a/pages/laantas/words.yaml +++ b/pages/laantas/words.yaml @@ -159,11 +159,12 @@ tiallántas: see: lántas líbis: - - p: ˈliː.bis - t: n - d: happiness - - t: interj - d: hi! + p: ˈliː.bis + ds: + - t: n + d: happiness + - t: interj + d: hi! línai: p: ˈliː.naj @@ -192,12 +193,13 @@ parai: ustai: p: ˈus.tai - - t: {v: i} - d: sing - - t: n - d: - - song - - ustail: (also) magic + ds: + - t: {v: i} + d: sing + - t: n + d: + - song + - ustail: (also) magic purai: p: ˈpu.ɾaj @@ -226,23 +228,24 @@ raban: d: book ran: - - p: ˈɾan - t: n - d: - - thing - - of them (after quantity) - - ranł: mood (coll) - - ranla: - d: of - n: an exact countable subquantity - e: - o: pas ranla rabanḿł - t: two of the books - - t: {suf: [{v: a}, n]} - d: result - e: - o: nassúran - t: gift + p: ˈɾan + ds: + - t: n + d: + - thing + - of them (after quantity) + - ranł: mood (coll) + - ranla: + d: of + n: an exact countable subquantity + e: + o: pas ranla rabanḿł + t: two of the books + - t: {suf: [{v: a}, n]} + d: result + e: + o: nassúran + t: gift sida: p: ˈsi.da @@ -303,12 +306,13 @@ naigimi: d: sometime gimimli: - - p: gi.ˈmim.li - t: adv - d: then - n: at a time clear from context - - t: {pp: GEN} - d: at the same time as + p: gi.ˈmim.li + ds: + - t: adv + d: then + n: at a time clear from context + - t: {pp: GEN} + d: at the same time as sá: p: ˈsaː @@ -609,17 +613,18 @@ mikru: d: micro nai: - - p: ˈnaj - t: num - d: - - one - - nat: first - - natta: only - - nala: any - - t: dem - d: - - anyone - - anything + p: ˈnaj + ds: + - t: num + d: + - one + - nat: first + - natta: only + - nala: any + - t: dem + d: + - anyone + - anything pas: p: ˈpas @@ -961,12 +966,17 @@ rauš: nakasnai: p: ˈna.kas.naj t: prn + n: also násna d: - everyone - everything - nakasnala: d: [every, all] - n: used with plural + n: - used with plural + - also násná + - nakasnanua: + d: [always] + n: also násnua sufa: p: ˈsu.fa @@ -978,15 +988,16 @@ sufa: - choose fuha: - - p: ˈfu.xa - t: {v: i} - d: - - blow - - whistle - - t: n - d: - - wind - - breath + p: ˈfu.xa + ds: + - t: {v: i} + d: + - blow + - whistle + - t: n + d: + - wind + - breath bássa: p: ˈbaːs.sa @@ -1055,11 +1066,11 @@ abjas: ƶuna: p: ˈθu.na - - t: adv - d: - - exactly - - "ƶuna gimimli": just now - - ƶunat: exact + t: adv + d: + - exactly + - "ƶuna gimimli": just now + - ƶunat: exact daš: p: ˈdaʃ @@ -1070,11 +1081,12 @@ daš: # see: galtúm # this word no longer exists?????? lisma: - - p: ˈlis.ma - t: {pp: GEN} - d: regardless of - - t: conj - d: regardless of whether or not + p: ˈlis.ma + ds: + - t: {pp: GEN} + d: regardless of + - t: conj + d: regardless of whether or not miašša: p: ˈmiəʃ.ʃa @@ -1181,16 +1193,17 @@ nuabia: - "rút čauba": give up (coll) tílju: - - p: ˈtiːl.ju - t: n - d: - - light - - energy - - t: {v: i} - d: - - glow - - shine (of the sun) - - smile + p: ˈtiːl.ju + ds: + - t: n + d: + - light + - energy + - t: {v: i} + d: + - glow + - shine (of the sun) + - smile waračča: p: wa.ˈɾat.tʃa @@ -1449,6 +1462,7 @@ ličča: d: - multitude - liččala: many + - liččali: usually dagu: p: ˈda.ɡu @@ -1811,10 +1825,11 @@ lau: kalsu: p: ˈkal.su - - t: {v: t} - d: [strike, hit] - - t: n - d: [beat, drum] + ds: + - t: {v: t} + d: [strike, hit] + - t: n + d: [beat, drum] asurai: p: ˈa.su.ɾaj @@ -1857,13 +1872,14 @@ giba: t: to ride a vehicle (e.g. a bus) saunu: - - p: ˈsau.nu - t: n - d: - - wheel - - vehicle - - t: {v: i} - d: turn + p: ˈsau.nu + ds: + - t: n + d: + - wheel + - vehicle + - t: {v: i} + d: turn šámsaunu: p: ˈʃaːm.sau.nu @@ -1892,11 +1908,12 @@ gifu: niba: - - p: ˈni.ba - t: n - d: spider - - t: {v: i} - d: spin a web + p: ˈni.ba + ds: + - t: n + d: spider + - t: {v: i} + d: spin a web nibaran: p: ˈni.ba.ɾan @@ -1979,6 +1996,11 @@ gipa: t: n d: neck +gunnu: + p: ˈɡun.nu + t: n + d: belly + jaisi: p: ˈjai.si t: n @@ -2006,7 +2028,10 @@ fas: ǧiššima: p: ˈdʒiʃ.ʃima t: n - d: [oven, bakery] + d: + - oven + - bakery + - dawinǧiššima: forge see: [ǧisa, ǧima] wasal: @@ -2117,3 +2142,42 @@ kus: p: kus t: n d: [stone, rock] + +pasaga: + p: ˈpa.sa.ɡa + t: n + d: taur + see: [pas, aga] + +lagan: + p: ˈla.ɡan + t: {pp: INS} + d: belonging to + n: used to disambiguate ownership from other meanings of the genitive + +kið: + t: n + d: ring + +álitkið: + t: n + d: collar + see: [álit, kið] + +dulwa: + t: n + d: leg + +dilwi: + t: n + d: sock + see: dulwa + n: '"leggy"' + +talas: + t: n + d: [head, tip, point] + +usu: + t: n + d: mind From 264b0d47f10cea0221bad181b1915d62c30a6b94 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 17:30:07 +0100 Subject: [PATCH 107/127] update svg-builder --- cabal.project | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cabal.project b/cabal.project index a237a6b..4a78011 100644 --- a/cabal.project +++ b/cabal.project @@ -5,4 +5,4 @@ packages: source-repository-package type: git location: https://git.rhiannon.website/rhi/svg-builder - tag: 39bb6a4e04ec2caccc23576b062ebfa0566bfb96 + tag: 9c09fcea4ac316dd5e0709b40f85952047070bf1 From 79971d672e819a6463904da23e5ee1d97185ee83 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 17:30:20 +0100 Subject: [PATCH 108/127] new local build location --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 69a9dff..b97d3cd 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ IDFILE ?= ~/.ssh/xyz REMOTE_DIR ?= lang TMPDIR ?= _tmp -BUILDDIR ?= _build +BUILDDIR ?= /srv/www/lang PAGESDIR ?= pages DATADIR ?= data TEMPLATE ?= $(DATADIR)/template.html From 31a3bc83d541aacedb532673bd765976f10b7c3b Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 17:30:42 +0100 Subject: [PATCH 109/127] static build for nix --- cabal.project | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cabal.project b/cabal.project index 4a78011..2c39ff7 100644 --- a/cabal.project +++ b/cabal.project @@ -6,3 +6,6 @@ source-repository-package type: git location: https://git.rhiannon.website/rhi/svg-builder tag: 9c09fcea4ac316dd5e0709b40f85952047070bf1 + +shared: False +executable-dynamic: False From fe209a8aca97ccd5fa34bf7b548742d1b13dc647 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 26 Nov 2024 17:30:54 +0100 Subject: [PATCH 110/127] update dependencies --- laantas-script/laantas-script.cabal | 6 +++--- langfilter/langfilter.cabal | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/laantas-script/laantas-script.cabal b/laantas-script/laantas-script.cabal index b150042..5c820e1 100644 --- a/laantas-script/laantas-script.cabal +++ b/laantas-script/laantas-script.cabal @@ -30,9 +30,9 @@ executable laantas-script RecordWildCards, ViewPatterns build-depends: - base >= 4.14.0.0 && < 4.20, - containers ^>= 0.6.2.1, - mtl ^>= 2.2.2, + base >= 4.14.0.0 && < 4.21, + containers >= 0.6 && < 0.8, + mtl >= 2.2 && < 2.4, svg-builder ^>= 0.1.1, optparse-applicative ^>= 0.16.0.0, text ^>= 2.1, diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index f13767c..bcf9a35 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -33,8 +33,8 @@ executable langfilter RecordWildCards, ViewPatterns build-depends: - base >= 4.14.0.0 && < 4.20, - containers ^>= 0.6.2.1, + base >= 4.14.0.0 && < 4.21, + containers >= 0.6 && < 0.8, filepath ^>= 1.4.2.1, megaparsec ^>= 9.6.1, process ^>= 1.6.11.0, From 3911f5052b41068be8378f34b6e3e07651ffcb8e Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 00:18:31 +0100 Subject: [PATCH 111/127] make laantas-script usable as a library --- laantas-script/laantas-script.cabal | 27 ++++++++++++++++---------- laantas-script/{ => lib}/Glyphs.hs | 3 ++- laantas-script/{ => lib}/GlyphsBase.hs | 9 ++++++--- laantas-script/{ => lib}/Split.hs | 0 laantas-script/{ => lib}/Svg.hs | 0 laantas-script/{ => main}/Main.hs | 0 6 files changed, 25 insertions(+), 14 deletions(-) rename laantas-script/{ => lib}/Glyphs.hs (99%) rename laantas-script/{ => lib}/GlyphsBase.hs (96%) rename laantas-script/{ => lib}/Split.hs (100%) rename laantas-script/{ => lib}/Svg.hs (100%) rename laantas-script/{ => main}/Main.hs (100%) diff --git a/laantas-script/laantas-script.cabal b/laantas-script/laantas-script.cabal index 5c820e1..b530f6e 100644 --- a/laantas-script/laantas-script.cabal +++ b/laantas-script/laantas-script.cabal @@ -7,14 +7,7 @@ license: AGPL-3.0-or-later author: Rhiannon Morris maintainer: Rhiannon Morris -executable laantas-script - hs-source-dirs: . - main-is: Main.hs - other-modules: - Svg, - Glyphs, - GlyphsBase, - Split +common base default-language: Haskell2010 default-extensions: BlockArguments, @@ -37,5 +30,19 @@ executable laantas-script optparse-applicative ^>= 0.16.0.0, text ^>= 2.1, megaparsec ^>= 9.6.1 - ghc-options: - -Wall -threaded -rtsopts -with-rtsopts=-N + ghc-options: -Wall + +library + import: base + hs-source-dirs: lib + exposed-modules: + Svg, + Glyphs, + GlyphsBase, + Split + +executable laantas-script + import: base + hs-source-dirs: main + main-is: Main.hs + build-depends: laantas-script diff --git a/laantas-script/Glyphs.hs b/laantas-script/lib/Glyphs.hs similarity index 99% rename from laantas-script/Glyphs.hs rename to laantas-script/lib/Glyphs.hs index 854a687..703173c 100644 --- a/laantas-script/Glyphs.hs +++ b/laantas-script/lib/Glyphs.hs @@ -1,7 +1,8 @@ {-# OPTIONS_GHC -Wno-missing-signatures -Wno-name-shadowing #-} module Glyphs - (Glyph (..), Diacritic, simpleDia, Segs (..), EGlyph, Word, doGlyphs, + (Glyph (..), Diacritic, simpleDia, Segs (..), EGlyph, Word, + doGlyphs, doGlyphsNoDoctype, withSize, charHeight', lineHeight', spaceWidth', gap', charHeight, lineHeight, spaceWidth, gap, diff --git a/laantas-script/GlyphsBase.hs b/laantas-script/lib/GlyphsBase.hs similarity index 96% rename from laantas-script/GlyphsBase.hs rename to laantas-script/lib/GlyphsBase.hs index 5a49be1..3650b6e 100644 --- a/laantas-script/GlyphsBase.hs +++ b/laantas-script/lib/GlyphsBase.hs @@ -94,8 +94,8 @@ type Diacritic = Diacritic' Double simpleDia :: Segs -> Diacritic simpleDia ss (SI {width}) = (ss, width) -doGlyphs :: [Word] -> Env -> Element -doGlyphs gs e = wrap $ run act e where +doGlyphsNoDoctype :: [Word] -> Env -> Element +doGlyphsNoDoctype gs e = wrap $ run act e where act = do E {stroke, color} <- ask let gattrs = [Stroke_ <<- color, Stroke_width_ <<- toPx stroke, @@ -104,7 +104,10 @@ doGlyphs gs e = wrap $ run act e where g_ gattrs . mconcat <$> traverse placeWord gs <* newline wrap (content, T {width, height}) = let sattrs = [Height_ <<- toPx height, Width_ <<- toPx width] in - doctype <> svg11_ content `with` sattrs + svg11_ content `with` sattrs + +doGlyphs :: [Word] -> Env -> Element +doGlyphs gs e = doctype <> doGlyphsNoDoctype gs e liftDia :: Diacritic -> Diacritic' SizeInfo diff --git a/laantas-script/Split.hs b/laantas-script/lib/Split.hs similarity index 100% rename from laantas-script/Split.hs rename to laantas-script/lib/Split.hs diff --git a/laantas-script/Svg.hs b/laantas-script/lib/Svg.hs similarity index 100% rename from laantas-script/Svg.hs rename to laantas-script/lib/Svg.hs diff --git a/laantas-script/Main.hs b/laantas-script/main/Main.hs similarity index 100% rename from laantas-script/Main.hs rename to laantas-script/main/Main.hs From b36e72adf579f96cafd0a28cf4be1ab4b0fdba2d Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 00:18:50 +0100 Subject: [PATCH 112/127] some marginally better errors --- langfilter/Glosses.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/langfilter/Glosses.hs b/langfilter/Glosses.hs index c2398aa..2b1fcea 100644 --- a/langfilter/Glosses.hs +++ b/langfilter/Glosses.hs @@ -11,6 +11,7 @@ import Text.Pandoc.Walk import Data.Maybe import Data.Text (Text) import qualified Data.Text as Text +import Data.Data (toConstr) glosses :: Vars => Block -> IO [Block] @@ -38,7 +39,10 @@ glossTable = \case PGloss l p s g t -> Just <$> make l (Just p) Nothing s g t PNGloss l b n s g t -> Just <$> make l (Just b) (Just n) s g t HorizontalRule -> pure Nothing - b -> error $ "found " ++ show b ++ " in gloss section" + BulletList xs | let ℓ = length xs, ℓ < 4 || ℓ > 6 -> + fail $ "found list of length " ++ show ℓ ++ + " in gloss section (missing `---`?)" + b -> fail $ "found unexpected " ++ show (toConstr b) ++ " in gloss section" where make l b n s g t = do let ℓ = length $ splitInlines s From 0e03d360a78e0f65bce816d1409d2dd61433b21d Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 00:19:10 +0100 Subject: [PATCH 113/127] don't mark a multidigit number as an abbr --- langfilter/Spans.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langfilter/Spans.hs b/langfilter/Spans.hs index 618ed0f..2ccade9 100644 --- a/langfilter/Spans.hs +++ b/langfilter/Spans.hs @@ -91,6 +91,6 @@ abbrs (Str txt) = go $ endash txt where = abbr' l : go r | (l, r) <- Text.break isAbbr txt = Str l : go r - abbr' txt = if Text.length txt == 1 then Str txt else abbr txt + abbr' txt = if Text.any (not . isDigit) txt then abbr txt else Str txt isAbbr c = isUpper c || isDigit c || c `elem` (",.;\\[]" :: String) abbrs i = [i] From c50f7e1c3cfa003c0e84fcedb0ed12a986ea034d Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 00:19:23 +0100 Subject: [PATCH 114/127] =?UTF-8?q?l=C3=A1ntas=20words?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/laantas/words.yaml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/pages/laantas/words.yaml b/pages/laantas/words.yaml index fbc6a97..32f7c02 100644 --- a/pages/laantas/words.yaml +++ b/pages/laantas/words.yaml @@ -1048,7 +1048,7 @@ laimi: p: ˈlai.mi t: n d: - - identity + - self - laimit: the same (as each other) - "laimitta sua": agree see: abjas @@ -1059,11 +1059,15 @@ abjas: d: - similarity - equality (mathematics) - - abjat: - - similar to - - equal to (mathematics) see: laimi +abja: + p: ˈab.ja + - t: {pp: GEN} + d: [similar to, equal to (maths)] + - t: {v: i} + d: (with ESS) resemble + ƶuna: p: ˈθu.na t: adv @@ -1964,10 +1968,10 @@ maƶka: naiku: p: ˈnai.ku - t: {v: t} + t: {v: aux} d: help e: - o: lut fífatḿ naikusina + o: lut fífam naikusina t: I helped him make this núkauba: @@ -2181,3 +2185,9 @@ talas: usu: t: n d: mind + +tuaga: + t: n + d: + - harm + - pain From 55b50ab44068abbe586c0867a1ddc4ac733cafd2 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 01:26:11 +0100 Subject: [PATCH 115/127] remove old idfile --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b97d3cd..3689efd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ HOST ?= rhiannon.website REMOTE_USER ?= www-data -IDFILE ?= ~/.ssh/xyz REMOTE_DIR ?= lang TMPDIR ?= _tmp @@ -75,7 +74,7 @@ upload: build @rsync --recursive --partial --progress --copy-links \ --compress --human-readable --hard-links --size-only \ --delete --delete-after \ - --rsh='ssh -l $(REMOTE_USER) -i $(IDFILE)' \ + --rsh='ssh -l $(REMOTE_USER)' \ $(BUILDDIR)/ $(HOST):$(REMOTE_DIR)/ From 5ad7aeddc63f711ccb1bcc3711e8116cb270fd38 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 01:27:33 +0100 Subject: [PATCH 116/127] put laantas-script library behind a single module --- laantas-script/laantas-script.cabal | 7 ++----- laantas-script/lib/Laantas.hs | 5 +++++ laantas-script/main/Main.hs | 4 +--- 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 laantas-script/lib/Laantas.hs diff --git a/laantas-script/laantas-script.cabal b/laantas-script/laantas-script.cabal index b530f6e..c33a448 100644 --- a/laantas-script/laantas-script.cabal +++ b/laantas-script/laantas-script.cabal @@ -35,11 +35,8 @@ common base library import: base hs-source-dirs: lib - exposed-modules: - Svg, - Glyphs, - GlyphsBase, - Split + exposed-modules: Laantas + other-modules: Svg, Glyphs, GlyphsBase, Split executable laantas-script import: base diff --git a/laantas-script/lib/Laantas.hs b/laantas-script/lib/Laantas.hs new file mode 100644 index 0000000..f521552 --- /dev/null +++ b/laantas-script/lib/Laantas.hs @@ -0,0 +1,5 @@ +module Laantas (module Laantas) where + +import Split as Laantas +import Svg as Laantas +import Glyphs as Laantas diff --git a/laantas-script/main/Main.hs b/laantas-script/main/Main.hs index 8a95495..afadfe5 100644 --- a/laantas-script/main/Main.hs +++ b/laantas-script/main/Main.hs @@ -1,7 +1,5 @@ import Prelude hiding (getContents, readFile, writeFile, putStrLn) -import Svg -import Glyphs (doGlyphs, lineHeight') -import Split +import Laantas import Options.Applicative import Data.Functor import Data.Text.IO (readFile, getContents) From 64245228d0e599a77537b0efb7e06579cd3b18d8 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 01:30:13 +0100 Subject: [PATCH 117/127] add viewBox to svg --- laantas-script/lib/GlyphsBase.hs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/laantas-script/lib/GlyphsBase.hs b/laantas-script/lib/GlyphsBase.hs index 3650b6e..fbcdcb2 100644 --- a/laantas-script/lib/GlyphsBase.hs +++ b/laantas-script/lib/GlyphsBase.hs @@ -7,6 +7,7 @@ import Prelude hiding (Word) import Data.Foldable import Numeric import Prelude hiding (Word) +import qualified Data.Text as Text data Glyph = G {path :: Segs, size :: SizeInfo} @@ -103,8 +104,9 @@ doGlyphsNoDoctype gs e = wrap $ run act e where Fill_ <<- "none"] g_ gattrs . mconcat <$> traverse placeWord gs <* newline wrap (content, T {width, height}) = - let sattrs = [Height_ <<- toPx height, Width_ <<- toPx width] in - svg11_ content `with` sattrs + let w = toPx width; h = toPx height + viewBox = Text.unwords ["0", "0", toNoDim width, toNoDim height] in + svg11_ content `with` [Width_ <<- w, Height_ <<- h, ViewBox_ <<- viewBox] doGlyphs :: [Word] -> Env -> Element doGlyphs gs e = doctype <> doGlyphsNoDoctype gs e @@ -161,5 +163,8 @@ newline = do textHeight = textHeight + lh, firstOnLine = True} +toNoDim :: Double -> Text +toNoDim x = pack (showFFloat (Just 4) x "") + toPx :: Double -> Text toPx x = pack (showFFloat (Just 4) x "px") From 6c9d04489cb8b12614a7d633a1626b239ab74ec5 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 01:32:27 +0100 Subject: [PATCH 118/127] =?UTF-8?q?generate=20inline=20svg=20for=20l=C3=A1?= =?UTF-8?q?ntas=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- langfilter/Glosses.hs | 43 +++++++++++----------- langfilter/LaantasImage.hs | 72 +++++++++++++++---------------------- langfilter/Main.hs | 15 ++++---- langfilter/Spans.hs | 38 +++++++++----------- langfilter/langfilter.cabal | 3 +- pages/laantas/examples.md | 4 +-- pages/laantas/index.md | 2 +- pages/laantas/writing.md | 6 ++-- style/page.css | 1 + 9 files changed, 83 insertions(+), 101 deletions(-) diff --git a/langfilter/Glosses.hs b/langfilter/Glosses.hs index 2b1fcea..baeff28 100644 --- a/langfilter/Glosses.hs +++ b/langfilter/Glosses.hs @@ -14,18 +14,17 @@ import qualified Data.Text as Text import Data.Data (toConstr) -glosses :: Vars => Block -> IO [Block] +glosses :: Vars => Block -> [Block] glosses = \case - Div (i, cs, _) blocks | "glosses" `elem` cs -> do - tables <- traverse glossTable blocks - pure $ - [RawBlock (Format "html") $ " id <> classes <> ">"] ++ - catMaybes tables ++ - [RawBlock (Format "html") "
"] + Div (i, cs, _) blocks | "glosses" `elem` cs -> + let tables = map glossTable blocks in + [RawBlock (Format "html") $ " id <> classes <> ">"] ++ + catMaybes tables ++ + [RawBlock (Format "html") ""] where id = if i == "" then "" else " id=\"" <> i <> "\"" classes = " class=\"" <> Text.unwords cs <> "\"" - b -> pure [b] + b -> [b] pattern Gloss l g w t = BulletList [[Plain l], [Plain g], [Plain w], [Plain t]] pattern PGloss l p g w t = @@ -33,28 +32,28 @@ pattern PGloss l p g w t = pattern PNGloss l b n g w t = BulletList [[Plain l], [Plain b], [Plain n], [Plain g], [Plain w], [Plain t]] -glossTable :: Vars => Block -> IO (Maybe Block) +glossTable :: Vars => Block -> Maybe Block glossTable = \case - Gloss l s g t -> Just <$> make l Nothing Nothing s g t - PGloss l p s g t -> Just <$> make l (Just p) Nothing s g t - PNGloss l b n s g t -> Just <$> make l (Just b) (Just n) s g t - HorizontalRule -> pure Nothing + Gloss l s g t -> Just $ make l Nothing Nothing s g t + PGloss l p s g t -> Just $ make l (Just p) Nothing s g t + PNGloss l b n s g t -> Just $ make l (Just b) (Just n) s g t + HorizontalRule -> Nothing BulletList xs | let ℓ = length xs, ℓ < 4 || ℓ > 6 -> fail $ "found list of length " ++ show ℓ ++ " in gloss section (missing `---`?)" b -> fail $ "found unexpected " ++ show (toConstr b) ++ " in gloss section" where - make l b n s g t = do + make l b n s g t = let ℓ = length $ splitInlines s - let colspecs = replicate ℓ (AlignDefault, ColWidthDefault) - let l' = cell1 ℓ $ underlines $ noHash l + colspecs = replicate ℓ (AlignDefault, ColWidthDefault) + l' = cell1 ℓ $ underlines $ noHash l b' = cell1 ℓ <$> b; n' = cell1 ℓ <$> n - let ss = cells s; gs = cells g; t' = cell1 ℓ t - img <- case ?lang of - Just Lántas -> - [Just $ cell1 ℓ [img] | img <- makeImage $ splitImage' $ stripInlines l] - Nothing -> pure Nothing - pure $ Table ("", ["gloss"], []) (Caption Nothing []) colspecs + ss = cells s; gs = cells g; t' = cell1 ℓ t + img = case ?lang of + Just Lántas -> Just $ cell1 ℓ [makeItem $ splitItem' $ stripInlines l] + Nothing -> Nothing + in + Table ("", ["gloss"], []) (Caption Nothing []) colspecs (TableHead mempty []) [TableBody mempty (RowHeadColumns 0) [] $ concat [[row ["gloss-scr", "scr"] [i] | Just i <- [img]], diff --git a/langfilter/LaantasImage.hs b/langfilter/LaantasImage.hs index 27844c8..a3de708 100644 --- a/langfilter/LaantasImage.hs +++ b/langfilter/LaantasImage.hs @@ -1,10 +1,9 @@ module LaantasImage - (Image (..), splitImage, splitImage', makeImage) + (Item (..), splitItem, splitItem', makeItem) where import Lang -import Text.Pandoc.Definition hiding (Image) -import qualified Text.Pandoc.Definition as Pandoc +import Text.Pandoc.Definition import Data.Bifunctor import Data.Function import Data.Maybe @@ -12,37 +11,34 @@ import Data.Map (Map) import qualified Data.Map as Map import Data.Text (Text) import qualified Data.Text as Text -import System.Environment -import System.FilePath -import System.Process +import qualified Data.Text.Lazy as Lazy +import qualified Laantas -data Image = - Image { +data Item = + Item { text, title :: Text, - file :: FilePath, size, stroke :: Double, - width :: Int, + width :: Double, color :: Text, showText :: Bool } deriving (Eq, Show) -splitImage :: Vars => Text -> Maybe Image -splitImage (Text.uncons -> Just (c, txt)) - | c == '!' = Just $ splitImage' txt - | c == '#' = Just $ (splitImage' txt) {showText = False} -splitImage _ = Nothing +splitItem :: Vars => Text -> Maybe Item +splitItem (Text.uncons -> Just (c, txt)) + | c == '!' = Just $ splitItem' txt + | c == '#' = Just $ (splitItem' txt) {showText = False} +splitItem _ = Nothing -splitImage' :: Vars => Text -> Image -splitImage' txt₀ = +splitItem' :: Vars => Text -> Item +splitItem' txt₀ = case imageOpts txt₀ of - Just (txt, opts) -> defaultImage txt ?defColor - & withOpt opts "file" (\f i -> i {file = makeFile f}) + Just (txt, opts) -> defaultItem txt ?defColor & withOpt opts "size" (\s i -> i {size = readt s}) & withOpt opts "stroke" (\k i -> i {stroke = readt k}) & withOpt opts "width" (\w i -> i {width = readt w}) & withOpt opts "color" (\c i -> i {color = c}) - Nothing -> defaultImage txt₀ ?defColor + Nothing -> defaultItem txt₀ ?defColor where readt x = read $ Text.unpack x withOpt :: Ord k => Map k v -> k -> (v -> a -> a) -> (a -> a) @@ -51,14 +47,13 @@ withOpt m k f = Just v -> f v Nothing -> id -defaultImage :: Text -> Text -> Image -defaultImage txt color = - Image { +defaultItem :: Text -> Text -> Item +defaultItem txt color = + Item { text = Text.filter notPunc txt, title = toTitle txt, - file = makeFile txt, - size = 20, - stroke = 0.75, + size = 2, + stroke = 1.25, width = 600, color = color, showText = True @@ -84,27 +79,16 @@ splitOpts :: Text -> Map Text Text splitOpts = Map.fromList . map splitOpt . Text.splitOn ";" where splitOpt txt = fromMaybe ("file", txt) $ split1 "=" txt -makeFile :: Text -> FilePath -makeFile txt = map stripWeird (Text.unpack txt) <.> "svg" - where stripWeird c = if weirdUrl c then '_' else c - toTitle :: Text -> Text toTitle = Text.filter \c -> c /= '\\' && c /= '#' -makeImage :: Image -> IO Inline -makeImage (Image {..}) = do - exe <- getEnv "LAANTAS_SCRIPT" - parent <- dropFileName <$> getEnv "FILENAME" - dir <- getEnv "DIRNAME" - let fullFile = dir file - let relFile = Text.pack $ makeRelative parent fullFile - callProcess exe - ["-S", show size, "-K", show stroke, "-W", show width, - "-C", Text.unpack color, "-t", Text.unpack text, "-o", fullFile] - pure $ Pandoc.Image ("", ["scr","laantas"], []) [] (relFile, title) - -weirdUrl :: Char -> Bool -weirdUrl c = c `elem` ("#\\?&_/.·,{} " :: String) +makeItem :: Item -> Inline +makeItem (Item {..}) = + let env = Laantas.E {..} + words = Laantas.split text in + RawInline "html" $ Lazy.toStrict $ Laantas.prettyText $ + Laantas.doGlyphsNoDoctype words env `Laantas.with` + [Laantas.Class_ Laantas.<<- "scr"] notPunc :: Char -> Bool notPunc c = c `notElem` ("{}·" :: String) diff --git a/langfilter/Main.hs b/langfilter/Main.hs index aa938a0..5b94a70 100644 --- a/langfilter/Main.hs +++ b/langfilter/Main.hs @@ -25,13 +25,14 @@ main = toJSONFilter filter where defColor <- getDefColor m let ?lang = lang let ?defColor = defColor - fmap (walk fixFigureClass . - walk makeEbnf . - walk makeQuotes . - walk (concatMap makeBlocks) . - walk inlineLetterList) $ - walkM spans =<< - walkM (fmap concat . traverse glosses) p + pure $ + walk fixFigureClass $ + walk makeEbnf $ + walk makeQuotes $ + walk (concatMap makeBlocks) $ + walk inlineLetterList $ + walk spans $ + walk (concat . map glosses) p getDefColor :: Map Text MetaValue -> IO Text getDefColor m = do diff --git a/langfilter/Spans.hs b/langfilter/Spans.hs index 2ccade9..edce4f9 100644 --- a/langfilter/Spans.hs +++ b/langfilter/Spans.hs @@ -10,19 +10,19 @@ import Data.Text (Text) import qualified Data.Text as Text -spans :: Vars => Inline -> IO Inline +spans :: Vars => Inline -> Inline spans = \case Code attrs txt - | Just ('\\', txt') <- Text.uncons txt -> pure $ Code attrs txt' - | Just txt' <- enclosed "⫽" "⫽" txt -> pure $ ipaA txt' - | Just txt' <- enclosed "//" "//" txt -> pure $ ipaA txt' - | Just _ <- enclosed "/" "/" txt -> pure $ ipaB txt - | Just _ <- enclosed "[" "]" txt -> pure $ ipaN txt + | Just ('\\', txt') <- Text.uncons txt -> Code attrs txt' + | Just txt' <- enclosed "⫽" "⫽" txt -> ipaA txt' + | Just txt' <- enclosed "//" "//" txt -> ipaA txt' + | Just _ <- enclosed "/" "/" txt -> ipaB txt + | Just _ <- enclosed "[" "]" txt -> ipaN txt | Just txt' <- enclosed "{" "}" txt -> lang txt' - | Just txt' <- enclosed "!" "!" txt -> pure $ abbr txt' - | Just txt' <- enclosed "*" "*" txt -> pure $ mark txt' - | Just txt' <- enclosed "@" "@" txt -> pure $ dfn txt' - i -> pure i + | Just txt' <- enclosed "!" "!" txt -> abbr txt' + | Just txt' <- enclosed "*" "*" txt -> mark txt' + | Just txt' <- enclosed "@" "@" txt -> dfn txt' + i -> i ipaA, ipaB, ipaN, abbr, mark :: Text -> Inline ipaA = Span (cls ["ipa", "ipa-arch"]) . text' . surround "⫽" @@ -38,20 +38,16 @@ surround s txt = s <> txt <> s text' :: Text -> [Inline] text' = toList . text -lang :: Vars => Text -> IO Inline -lang = fmap (Span (cls ["lang"])) . lang' +lang :: Vars => Text -> Inline +lang = Span (cls ["lang"]) . lang' -lang' :: Vars => Text -> IO [Inline] +lang' :: Vars => Text -> [Inline] lang' txt₀ = case ?lang of Just Lántas - | Just li@(Image {..}) <- splitImage txt₀ -> - if showText then do - img <- makeImage li - pure $ [img, Span (cls ["text"]) $ underlines title] - else - pure <$> makeImage li - _ -> - pure $ underlines txt₀ + | Just li@(Item {..}) <- splitItem txt₀, + let label = Span (cls ["text"]) $ underlines title -> + if showText then [makeItem li, label] else [makeItem li] + _ -> underlines txt₀ notBrace :: Char -> Bool notBrace c = c /= '{' && c /= '}' diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index bcf9a35..bde2dee 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -40,4 +40,5 @@ executable langfilter process ^>= 1.6.11.0, pandoc-types ^>= 1.23, text ^>= 2.1, - pretty-show ^>= 1.10 + pretty-show ^>= 1.10, + laantas-script diff --git a/pages/laantas/examples.md b/pages/laantas/examples.md index bc728cb..de95a1c 100644 --- a/pages/laantas/examples.md +++ b/pages/laantas/examples.md @@ -26,7 +26,7 @@ conlang: lántas rumi ńgua. Mulin Laksimat Fuham čaubam bulla. Gimimli Guwanḿ ufatta tílju, ŕ šikkúƶłm kukkimat šutta rumin júli. Mulin Guwanḿ bahútlit amat Laksimat Fuham suam bulla. -| file = northwind ; size = 50 ; stroke = 2 +| size = 3 ; stroke = 2 }` ::: @@ -173,7 +173,7 @@ You know, [this thing]: Natta agamatta luƶ fasḿ pašulúmlin lapusum sidam tisu. Luƶ fasmamin duguwalúm dansu. Luli nakasnai nuabiam dansutul. -| file = nwwm ; size = 50 ; stroke = 2 +| size = 3 ; stroke = 2 }` ::: diff --git a/pages/laantas/index.md b/pages/laantas/index.md index 9ecc265..f632c16 100644 --- a/pages/laantas/index.md +++ b/pages/laantas/index.md @@ -5,7 +5,7 @@ conlang: lántas ... :::splash -`{#lántas | size = 200 ; stroke = 7}` +`{#lántas | size = 20 ; stroke = 10}` ::: 1. [Phonology](phono.html) diff --git a/pages/laantas/writing.md b/pages/laantas/writing.md index bb5907e..3b0a412 100644 --- a/pages/laantas/writing.md +++ b/pages/laantas/writing.md @@ -13,7 +13,7 @@ a syllabic consonant. As a quick example, here's the first sentence of :::example `{!Ruakul naipa bahútlit aimlis Laksimat Fuhamkas Guwanḿ asumsas ba sua. - | file = northwind0 ; size = 60 ; stroke = 2 }` + | size = 4 ; stroke = 2 }` ::: # Vowels @@ -125,8 +125,8 @@ Punctuation in Lántas is very simple. Phrases within a sentence can be separate by a single circle, and sentences are ended by a double circle: :::letter-list -`{!ta, ta | file=comma}` -`{!ta. ta | file=fullstop}` +`{!ta, ta}` +`{!ta. ta}` ::: Both have an equal amount of space either side, more for the second one, and if diff --git a/style/page.css b/style/page.css index cbfe8a9..cb38223 100644 --- a/style/page.css +++ b/style/page.css @@ -199,6 +199,7 @@ blockquote { } .letter-list .scr { + width: auto; height: 3em; margin-left: 0.5em; } From b1ef3fc82de2ca723142dd3f2ec0be3dca4c6391 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 01:54:36 +0100 Subject: [PATCH 119/127] only walk once --- langfilter/Main.hs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/langfilter/Main.hs b/langfilter/Main.hs index 5b94a70..73dd98b 100644 --- a/langfilter/Main.hs +++ b/langfilter/Main.hs @@ -25,14 +25,10 @@ main = toJSONFilter filter where defColor <- getDefColor m let ?lang = lang let ?defColor = defColor - pure $ - walk fixFigureClass $ - walk makeEbnf $ - walk makeQuotes $ - walk (concatMap makeBlocks) $ - walk inlineLetterList $ - walk spans $ - walk (concat . map glosses) p + let f = map (walk spans . fixFigureClass . makeEbnf . + makeQuotes . letterList) . + concatMap (makeBlocks <=< glosses) + pure $ walk f p getDefColor :: Map Text MetaValue -> IO Text getDefColor m = do @@ -86,11 +82,10 @@ makeQuotes para@(Para b) = fromMaybe para $ do checkEnd _ = empty makeQuotes other = other - -inlineLetterList :: Block -> Block -inlineLetterList (Div a@(_, cs, _) blks) +letterList :: Block -> Block +letterList (Div a@(_, cs, _) blks) | "letter-list" `elem` cs = Div a (walk go blks) where go (Para xs) = Plain xs go b = b -inlineLetterList b = b +letterList b = b From 1098cbdc1b775df26f00237cc05ae76f4aaf6f3a Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 01:55:55 +0100 Subject: [PATCH 120/127] new less ugly makeQuotes.isDelim --- langfilter/Main.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/langfilter/Main.hs b/langfilter/Main.hs index 73dd98b..f4ae468 100644 --- a/langfilter/Main.hs +++ b/langfilter/Main.hs @@ -72,7 +72,8 @@ makeQuotes para@(Para b) = fromMaybe para $ do inner <- split b return (BlockQuote [Para inner]) where - isDelim str = str == "\"\"\"" || str == "““”" -- lol + isDelim str = Text.length str == 3 && Text.all isQuote str + isQuote c = c == '"' || c == '“' || c == '”' split (Str begin:SoftBreak:rest) = guard (isDelim begin) *> checkEnd rest split _ = empty From 89270a82fb043a632b3087f3736cf2e1ad007017 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 02:04:06 +0100 Subject: [PATCH 121/127] librarify langfilter too --- Makefile | 2 +- langfilter/langfilter.cabal | 28 +++++++++++++++-------- langfilter/{ => lib}/Ebnf.hs | 0 langfilter/{ => lib}/Glosses.hs | 0 langfilter/{ => lib}/LaantasImage.hs | 0 langfilter/{ => lib}/Lang.hs | 0 langfilter/{Main.hs => lib/LangFilter.hs} | 24 +++++++++---------- langfilter/{ => lib}/Spans.hs | 0 langfilter/main/Main.hs | 4 ++++ 9 files changed, 35 insertions(+), 23 deletions(-) rename langfilter/{ => lib}/Ebnf.hs (100%) rename langfilter/{ => lib}/Glosses.hs (100%) rename langfilter/{ => lib}/LaantasImage.hs (100%) rename langfilter/{ => lib}/Lang.hs (100%) rename langfilter/{Main.hs => lib/LangFilter.hs} (84%) rename langfilter/{ => lib}/Spans.hs (100%) create mode 100644 langfilter/main/Main.hs diff --git a/Makefile b/Makefile index 3689efd..da29f56 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ define copy cp $< $@ endef -$(LANGFILTER): langfilter/*.hs langfilter/langfilter.cabal +$(LANGFILTER): langfilter/lib/*.hs langfilter/main/*.hs langfilter/langfilter.cabal $(cabal-exe) $(LAANTAS_SCRIPT): laantas-script/* diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index bde2dee..1ac2656 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -7,15 +7,7 @@ license: AGPL-3.0-or-later author: Rhiannon Morris maintainer: Rhiannon Morris -executable langfilter - hs-source-dirs: . - main-is: Main.hs - other-modules: - Lang, - Ebnf, - Spans, - LaantasImage, - Glosses +common base ghc-options: -Wall -Wno-missing-signatures -Wno-missing-pattern-synonym-signatures -Wno-name-shadowing @@ -31,6 +23,7 @@ executable langfilter OverloadedStrings, PatternSynonyms, RecordWildCards, + TupleSections, ViewPatterns build-depends: base >= 4.14.0.0 && < 4.21, @@ -42,3 +35,20 @@ executable langfilter text ^>= 2.1, pretty-show ^>= 1.10, laantas-script + +library + import: base + hs-source-dirs: lib + exposed-modules: + Lang, + Ebnf, + Spans, + LaantasImage, + Glosses, + LangFilter + +executable langfilter + import: base + hs-source-dirs: main + main-is: Main.hs + build-depends: langfilter diff --git a/langfilter/Ebnf.hs b/langfilter/lib/Ebnf.hs similarity index 100% rename from langfilter/Ebnf.hs rename to langfilter/lib/Ebnf.hs diff --git a/langfilter/Glosses.hs b/langfilter/lib/Glosses.hs similarity index 100% rename from langfilter/Glosses.hs rename to langfilter/lib/Glosses.hs diff --git a/langfilter/LaantasImage.hs b/langfilter/lib/LaantasImage.hs similarity index 100% rename from langfilter/LaantasImage.hs rename to langfilter/lib/LaantasImage.hs diff --git a/langfilter/Lang.hs b/langfilter/lib/Lang.hs similarity index 100% rename from langfilter/Lang.hs rename to langfilter/lib/Lang.hs diff --git a/langfilter/Main.hs b/langfilter/lib/LangFilter.hs similarity index 84% rename from langfilter/Main.hs rename to langfilter/lib/LangFilter.hs index f4ae468..b411594 100644 --- a/langfilter/Main.hs +++ b/langfilter/lib/LangFilter.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE TupleSections #-} +module LangFilter where import Lang import Ebnf @@ -6,7 +6,6 @@ import Spans import Glosses import Text.Pandoc.Definition -import Text.Pandoc.JSON import Text.Pandoc.Walk import Data.Maybe import Data.Map (Map) @@ -18,17 +17,16 @@ import Control.Monad import System.Environment -main :: IO () -main = toJSONFilter filter where - filter p@(Pandoc (Meta m) _) = do - lang <- toLang $ Map.lookup "conlang" m - defColor <- getDefColor m - let ?lang = lang - let ?defColor = defColor - let f = map (walk spans . fixFigureClass . makeEbnf . - makeQuotes . letterList) . - concatMap (makeBlocks <=< glosses) - pure $ walk f p +langFilter :: Pandoc -> IO Pandoc +langFilter p@(Pandoc (Meta m) _) = do + lang <- toLang $ Map.lookup "conlang" m + defColor <- getDefColor m + let ?lang = lang + let ?defColor = defColor + let f = map (walk spans . fixFigureClass . makeEbnf . + makeQuotes . letterList) . + concatMap (makeBlocks <=< glosses) + pure $ walk f p getDefColor :: Map Text MetaValue -> IO Text getDefColor m = do diff --git a/langfilter/Spans.hs b/langfilter/lib/Spans.hs similarity index 100% rename from langfilter/Spans.hs rename to langfilter/lib/Spans.hs diff --git a/langfilter/main/Main.hs b/langfilter/main/Main.hs new file mode 100644 index 0000000..549f38b --- /dev/null +++ b/langfilter/main/Main.hs @@ -0,0 +1,4 @@ +import LangFilter +import Text.Pandoc.JSON + +main = toJSONFilter langFilter From a2fc6c9f28675bbdb4d1c17d8afd3aea24547eed Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 17:38:00 +0100 Subject: [PATCH 122/127] remove width/height from svg output --- laantas-script/lib/GlyphsBase.hs | 5 ++--- pages/index.md | 2 ++ pages/laantas/index.md | 2 +- style/page.css | 12 ++++++++---- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/laantas-script/lib/GlyphsBase.hs b/laantas-script/lib/GlyphsBase.hs index fbcdcb2..931fa52 100644 --- a/laantas-script/lib/GlyphsBase.hs +++ b/laantas-script/lib/GlyphsBase.hs @@ -104,9 +104,8 @@ doGlyphsNoDoctype gs e = wrap $ run act e where Fill_ <<- "none"] g_ gattrs . mconcat <$> traverse placeWord gs <* newline wrap (content, T {width, height}) = - let w = toPx width; h = toPx height - viewBox = Text.unwords ["0", "0", toNoDim width, toNoDim height] in - svg11_ content `with` [Width_ <<- w, Height_ <<- h, ViewBox_ <<- viewBox] + let viewBox = Text.unwords ["0", "0", toNoDim width, toNoDim height] in + svg11_ content `with` [ViewBox_ <<- viewBox] doGlyphs :: [Word] -> Env -> Element doGlyphs gs e = doctype <> doGlyphsNoDoctype gs e diff --git a/pages/index.md b/pages/index.md index 08507bc..d6bf453 100644 --- a/pages/index.md +++ b/pages/index.md @@ -22,5 +22,7 @@ couple of buzzwords each: * [an unnamed language with a volapük-ass aesthetic](vol) +* [unnamed kobold language](kobl) + Also, [a mirror](syn-test-cases.html) of some syntax test cases, originally compiled by Gary Shannon, that might be useful to someone. diff --git a/pages/laantas/index.md b/pages/laantas/index.md index f632c16..96fe06e 100644 --- a/pages/laantas/index.md +++ b/pages/laantas/index.md @@ -5,7 +5,7 @@ conlang: lántas ... :::splash -`{#lántas | size = 20 ; stroke = 10}` +`{#lántas}` ::: 1. [Phonology](phono.html) diff --git a/style/page.css b/style/page.css index cb38223..a90328d 100644 --- a/style/page.css +++ b/style/page.css @@ -154,10 +154,14 @@ pre { height: 2em; } -:is(.splash, .example) .scr { - height: unset; - display: block; - margin: auto; +.example .scr { + width: 80%; height: auto; + display: block; margin: auto; +} + +.splash .scr { + height: 10em; + display: block; margin: auto; } .example { From a7bbfd5035adf67e128e030e3ba47c6fb8ed3be5 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 28 Nov 2024 17:44:41 +0100 Subject: [PATCH 123/127] fix spacing --- langfilter/lib/Spans.hs | 2 +- style/page.css | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/langfilter/lib/Spans.hs b/langfilter/lib/Spans.hs index edce4f9..1895a76 100644 --- a/langfilter/lib/Spans.hs +++ b/langfilter/lib/Spans.hs @@ -46,7 +46,7 @@ lang' txt₀ = case ?lang of Just Lántas | Just li@(Item {..}) <- splitItem txt₀, let label = Span (cls ["text"]) $ underlines title -> - if showText then [makeItem li, label] else [makeItem li] + if showText then [makeItem li, Str " ", label] else [makeItem li] _ -> underlines txt₀ notBrace :: Char -> Bool diff --git a/style/page.css b/style/page.css index a90328d..5ebee87 100644 --- a/style/page.css +++ b/style/page.css @@ -147,7 +147,6 @@ pre { .scr { height: 1.5em; vertical-align: -40%; - padding-right: 0.5ex; } .gloss .scr { From e8d46973fac634d8ee589697e19cf0cc2c39ce00 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sat, 30 Nov 2024 20:03:19 +0100 Subject: [PATCH 124/127] trim whitespace around the svg. lol --- langfilter/lib/LaantasImage.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/langfilter/lib/LaantasImage.hs b/langfilter/lib/LaantasImage.hs index a3de708..b6822a9 100644 --- a/langfilter/lib/LaantasImage.hs +++ b/langfilter/lib/LaantasImage.hs @@ -13,6 +13,7 @@ import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Lazy as Lazy import qualified Laantas +import Data.Char (isSpace) data Item = @@ -86,9 +87,10 @@ makeItem :: Item -> Inline makeItem (Item {..}) = let env = Laantas.E {..} words = Laantas.split text in - RawInline "html" $ Lazy.toStrict $ Laantas.prettyText $ - Laantas.doGlyphsNoDoctype words env `Laantas.with` - [Laantas.Class_ Laantas.<<- "scr"] + RawInline "html" $ + Lazy.toStrict $ Lazy.dropAround isSpace $ Laantas.prettyText $ + Laantas.doGlyphsNoDoctype words env `Laantas.with` + [Laantas.Class_ Laantas.<<- "scr"] notPunc :: Char -> Bool notPunc c = c `notElem` ("{}·" :: String) From ed54ec4c5af5b2b8ea25f0274e11c2f8c87714c3 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 3 Dec 2024 18:52:36 +0100 Subject: [PATCH 125/127] change how script colour is handled --- langfilter/lib/LangFilter.hs | 18 +++--------------- langfilter/main/Main.hs | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/langfilter/lib/LangFilter.hs b/langfilter/lib/LangFilter.hs index b411594..16e3460 100644 --- a/langfilter/lib/LangFilter.hs +++ b/langfilter/lib/LangFilter.hs @@ -8,35 +8,23 @@ import Glosses import Text.Pandoc.Definition import Text.Pandoc.Walk import Data.Maybe -import Data.Map (Map) import qualified Data.Map as Map import Data.Text (Text) import qualified Data.Text as Text import Control.Applicative import Control.Monad -import System.Environment -langFilter :: Pandoc -> IO Pandoc -langFilter p@(Pandoc (Meta m) _) = do +langFilter :: Text -> Pandoc -> IO Pandoc +langFilter col p@(Pandoc (Meta m) _) = do lang <- toLang $ Map.lookup "conlang" m - defColor <- getDefColor m let ?lang = lang - let ?defColor = defColor + let ?defColor = col let f = map (walk spans . fixFigureClass . makeEbnf . makeQuotes . letterList) . concatMap (makeBlocks <=< glosses) pure $ walk f p -getDefColor :: Map Text MetaValue -> IO Text -getDefColor m = do - res <- toText $ Map.lookup "lang-color" m - case res of - Just col -> pure col - Nothing -> do - env <- lookupEnv "LANG_COLOR" - pure $ maybe "black" Text.pack env - pluck :: Eq a => a -> [a] -> Maybe [a] pluck _ [] = Nothing pluck x (y:ys) | x == y = Just ys diff --git a/langfilter/main/Main.hs b/langfilter/main/Main.hs index 549f38b..77673f2 100644 --- a/langfilter/main/Main.hs +++ b/langfilter/main/Main.hs @@ -1,4 +1,17 @@ +import qualified Data.Map as Map +import qualified Data.Text as Text import LangFilter +import System.Environment import Text.Pandoc.JSON +import Lang -main = toJSONFilter langFilter +main = + toJSONFilter $ \p@(Pandoc (Meta m) _) -> do + col <- getDefColor m + langFilter col p + where + getDefColor m = do + res <- toText $ Map.lookup "lang-color" m + case res of + Just col -> pure $ col + Nothing -> maybe "currentcolor" Text.pack <$> lookupEnv "LANG_COLOR" From c4a430facbeaa55a9de8edd69145243475c94087 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 3 Dec 2024 23:56:44 +0100 Subject: [PATCH 126/127] handle figure ids better --- langfilter/lib/LangFilter.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/langfilter/lib/LangFilter.hs b/langfilter/lib/LangFilter.hs index 16e3460..34fdbcb 100644 --- a/langfilter/lib/LangFilter.hs +++ b/langfilter/lib/LangFilter.hs @@ -36,8 +36,10 @@ pluck1 (x:xs) ys = (x,) <$> pluck x ys <|> pluck1 xs ys fixFigureClass :: Block -> Block -fixFigureClass (Figure (_, c1, a1) cap [Plain [Image (i, c2, a2) alt path]]) = - Figure (i, c1 ++ c2, a1 ++ a2) cap [Plain [Image ("", [], []) alt path]] +fixFigureClass (Figure (i1, c1, a1) cap [Plain [Image (i2, c2, a2) alt path]]) = + Figure (iF, c1 ++ c2, a1 ++ a2) cap [Plain [Image (iI, [], []) alt path]] + where iF = if Text.null i1 then i2 else i1 + iI = if Text.null i1 then "" else i2 fixFigureClass b = b makeBlocks :: Block -> [Block] From 4cf30aca71c2480843d6330a2c2268547fedafce Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Tue, 18 Feb 2025 18:34:01 +0100 Subject: [PATCH 127/127] fix a warning --- laantas-script/laantas-script.cabal | 10 ++++++++-- langfilter/langfilter.cabal | 7 +++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/laantas-script/laantas-script.cabal b/laantas-script/laantas-script.cabal index c33a448..78bd829 100644 --- a/laantas-script/laantas-script.cabal +++ b/laantas-script/laantas-script.cabal @@ -8,6 +8,9 @@ author: Rhiannon Morris maintainer: Rhiannon Morris common base + ghc-options: + -Wall -Wno-missing-signatures -Wno-missing-pattern-synonym-signatures + -Wno-name-shadowing default-language: Haskell2010 default-extensions: BlockArguments, @@ -30,7 +33,10 @@ common base optparse-applicative ^>= 0.16.0.0, text ^>= 2.1, megaparsec ^>= 9.6.1 - ghc-options: -Wall + +common exe + ghc-options: + -threaded -rtsopts -with-rtsopts=-N library import: base @@ -39,7 +45,7 @@ library other-modules: Svg, Glyphs, GlyphsBase, Split executable laantas-script - import: base + import: base, exe hs-source-dirs: main main-is: Main.hs build-depends: laantas-script diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index 1ac2656..b950008 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -11,7 +11,6 @@ common base ghc-options: -Wall -Wno-missing-signatures -Wno-missing-pattern-synonym-signatures -Wno-name-shadowing - -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010 default-extensions: BlockArguments, @@ -36,6 +35,10 @@ common base pretty-show ^>= 1.10, laantas-script +common exe + ghc-options: + -threaded -rtsopts -with-rtsopts=-N + library import: base hs-source-dirs: lib @@ -48,7 +51,7 @@ library LangFilter executable langfilter - import: base + import: base, exe hs-source-dirs: main main-is: Main.hs build-depends: langfilter