diff --git a/images/gujarati/gujarati-abvm-after.svg b/images/gujarati/gujarati-abvm-after.svg
new file mode 100644
index 0000000..4f6cc8a
--- /dev/null
+++ b/images/gujarati/gujarati-abvm-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-abvm-before.svg b/images/gujarati/gujarati-abvm-before.svg
new file mode 100644
index 0000000..2080aca
--- /dev/null
+++ b/images/gujarati/gujarati-abvm-before.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-abvm.svg b/images/gujarati/gujarati-abvm.svg
new file mode 100644
index 0000000..8e9575f
--- /dev/null
+++ b/images/gujarati/gujarati-abvm.svg
@@ -0,0 +1,57 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-abvs-after.svg b/images/gujarati/gujarati-abvs-after.svg
new file mode 100644
index 0000000..b93e52e
--- /dev/null
+++ b/images/gujarati/gujarati-abvs-after.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-abvs-before.svg b/images/gujarati/gujarati-abvs-before.svg
new file mode 100644
index 0000000..5b40f67
--- /dev/null
+++ b/images/gujarati/gujarati-abvs-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-abvs.svg b/images/gujarati/gujarati-abvs.svg
new file mode 100644
index 0000000..a6e61ff
--- /dev/null
+++ b/images/gujarati/gujarati-abvs.svg
@@ -0,0 +1,65 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-akhn-jnya-after.svg b/images/gujarati/gujarati-akhn-jnya-after.svg
new file mode 100644
index 0000000..26e4360
--- /dev/null
+++ b/images/gujarati/gujarati-akhn-jnya-after.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-akhn-jnya-before.svg b/images/gujarati/gujarati-akhn-jnya-before.svg
new file mode 100644
index 0000000..8443b2d
--- /dev/null
+++ b/images/gujarati/gujarati-akhn-jnya-before.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/images/gujarati/gujarati-akhn-jnya.svg b/images/gujarati/gujarati-akhn-jnya.svg
new file mode 100644
index 0000000..da17c05
--- /dev/null
+++ b/images/gujarati/gujarati-akhn-jnya.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-akhn-kssa-after.svg b/images/gujarati/gujarati-akhn-kssa-after.svg
new file mode 100644
index 0000000..c7b912e
--- /dev/null
+++ b/images/gujarati/gujarati-akhn-kssa-after.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-akhn-kssa-before.svg b/images/gujarati/gujarati-akhn-kssa-before.svg
new file mode 100644
index 0000000..02a2367
--- /dev/null
+++ b/images/gujarati/gujarati-akhn-kssa-before.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/images/gujarati/gujarati-akhn-kssa.svg b/images/gujarati/gujarati-akhn-kssa.svg
new file mode 100644
index 0000000..63b3569
--- /dev/null
+++ b/images/gujarati/gujarati-akhn-kssa.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-blwf-after.svg b/images/gujarati/gujarati-blwf-after.svg
new file mode 100644
index 0000000..22df1bb
--- /dev/null
+++ b/images/gujarati/gujarati-blwf-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-blwf-before.svg b/images/gujarati/gujarati-blwf-before.svg
new file mode 100644
index 0000000..0182267
--- /dev/null
+++ b/images/gujarati/gujarati-blwf-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-blwf.svg b/images/gujarati/gujarati-blwf.svg
new file mode 100644
index 0000000..c2cdfd1
--- /dev/null
+++ b/images/gujarati/gujarati-blwf.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-blwm-after.svg b/images/gujarati/gujarati-blwm-after.svg
new file mode 100644
index 0000000..7b8a5aa
--- /dev/null
+++ b/images/gujarati/gujarati-blwm-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-blwm-before.svg b/images/gujarati/gujarati-blwm-before.svg
new file mode 100644
index 0000000..7b8a5aa
--- /dev/null
+++ b/images/gujarati/gujarati-blwm-before.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-blwm.svg b/images/gujarati/gujarati-blwm.svg
new file mode 100644
index 0000000..28a857b
--- /dev/null
+++ b/images/gujarati/gujarati-blwm.svg
@@ -0,0 +1,57 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-blws-after.svg b/images/gujarati/gujarati-blws-after.svg
new file mode 100644
index 0000000..b8f4305
--- /dev/null
+++ b/images/gujarati/gujarati-blws-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-blws-before.svg b/images/gujarati/gujarati-blws-before.svg
new file mode 100644
index 0000000..b8f4305
--- /dev/null
+++ b/images/gujarati/gujarati-blws-before.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-blws.svg b/images/gujarati/gujarati-blws.svg
new file mode 100644
index 0000000..eba79c9
--- /dev/null
+++ b/images/gujarati/gujarati-blws.svg
@@ -0,0 +1,57 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-cjct-after.svg b/images/gujarati/gujarati-cjct-after.svg
new file mode 100644
index 0000000..862f77f
--- /dev/null
+++ b/images/gujarati/gujarati-cjct-after.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-cjct-before-COLORTEST-INKSCAPE-PLAIN.svg b/images/gujarati/gujarati-cjct-before-COLORTEST-INKSCAPE-PLAIN.svg
new file mode 100644
index 0000000..df6560f
--- /dev/null
+++ b/images/gujarati/gujarati-cjct-before-COLORTEST-INKSCAPE-PLAIN.svg
@@ -0,0 +1,95 @@
+
+
diff --git a/images/gujarati/gujarati-cjct-before-COLORTEST-INKSCAPE.svg b/images/gujarati/gujarati-cjct-before-COLORTEST-INKSCAPE.svg
new file mode 100644
index 0000000..e07a0f4
--- /dev/null
+++ b/images/gujarati/gujarati-cjct-before-COLORTEST-INKSCAPE.svg
@@ -0,0 +1,113 @@
+
+
diff --git a/images/gujarati/gujarati-cjct-before-EDIT-TEST.svg b/images/gujarati/gujarati-cjct-before-EDIT-TEST.svg
new file mode 100644
index 0000000..3a86a40
--- /dev/null
+++ b/images/gujarati/gujarati-cjct-before-EDIT-TEST.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/images/gujarati/gujarati-cjct-before.svg b/images/gujarati/gujarati-cjct-before.svg
new file mode 100644
index 0000000..1bb2548
--- /dev/null
+++ b/images/gujarati/gujarati-cjct-before.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/images/gujarati/gujarati-cjct.svg b/images/gujarati/gujarati-cjct.svg
new file mode 100644
index 0000000..6d4fa00
--- /dev/null
+++ b/images/gujarati/gujarati-cjct.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-half-after.svg b/images/gujarati/gujarati-half-after.svg
new file mode 100644
index 0000000..fd926f5
--- /dev/null
+++ b/images/gujarati/gujarati-half-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-half-before.svg b/images/gujarati/gujarati-half-before.svg
new file mode 100644
index 0000000..9c3bbfa
--- /dev/null
+++ b/images/gujarati/gujarati-half-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-half.svg b/images/gujarati/gujarati-half.svg
new file mode 100644
index 0000000..e032314
--- /dev/null
+++ b/images/gujarati/gujarati-half.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-haln-after.svg b/images/gujarati/gujarati-haln-after.svg
new file mode 100644
index 0000000..6e6fcc0
--- /dev/null
+++ b/images/gujarati/gujarati-haln-after.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-haln-before.svg b/images/gujarati/gujarati-haln-before.svg
new file mode 100644
index 0000000..6e6fcc0
--- /dev/null
+++ b/images/gujarati/gujarati-haln-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-haln.svg b/images/gujarati/gujarati-haln.svg
new file mode 100644
index 0000000..74775c5
--- /dev/null
+++ b/images/gujarati/gujarati-haln.svg
@@ -0,0 +1,65 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-matra-decompose-after.svg b/images/gujarati/gujarati-matra-decompose-after.svg
new file mode 100644
index 0000000..d9985b4
--- /dev/null
+++ b/images/gujarati/gujarati-matra-decompose-after.svg
@@ -0,0 +1,27 @@
+
+
diff --git a/images/gujarati/gujarati-matra-decompose-before.svg b/images/gujarati/gujarati-matra-decompose-before.svg
new file mode 100644
index 0000000..50fb86b
--- /dev/null
+++ b/images/gujarati/gujarati-matra-decompose-before.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-matra-decompose.svg b/images/gujarati/gujarati-matra-decompose.svg
new file mode 100644
index 0000000..f5e68e9
--- /dev/null
+++ b/images/gujarati/gujarati-matra-decompose.svg
@@ -0,0 +1,62 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-matra-position-after.svg b/images/gujarati/gujarati-matra-position-after.svg
new file mode 100644
index 0000000..05895aa
--- /dev/null
+++ b/images/gujarati/gujarati-matra-position-after.svg
@@ -0,0 +1,34 @@
+
+
diff --git a/images/gujarati/gujarati-matra-position-before.svg b/images/gujarati/gujarati-matra-position-before.svg
new file mode 100644
index 0000000..6efcf83
--- /dev/null
+++ b/images/gujarati/gujarati-matra-position-before.svg
@@ -0,0 +1,38 @@
+
+
diff --git a/images/gujarati/gujarati-matra-position.svg b/images/gujarati/gujarati-matra-position.svg
new file mode 100644
index 0000000..516c61c
--- /dev/null
+++ b/images/gujarati/gujarati-matra-position.svg
@@ -0,0 +1,85 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-nukt-after.svg b/images/gujarati/gujarati-nukt-after.svg
new file mode 100644
index 0000000..5e07e29
--- /dev/null
+++ b/images/gujarati/gujarati-nukt-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-nukt-before.svg b/images/gujarati/gujarati-nukt-before.svg
new file mode 100644
index 0000000..508381e
--- /dev/null
+++ b/images/gujarati/gujarati-nukt-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-nukt.svg b/images/gujarati/gujarati-nukt.svg
new file mode 100644
index 0000000..b80149f
--- /dev/null
+++ b/images/gujarati/gujarati-nukt.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-pres-after.svg b/images/gujarati/gujarati-pres-after.svg
new file mode 100644
index 0000000..0d217cf
--- /dev/null
+++ b/images/gujarati/gujarati-pres-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-pres-before.svg b/images/gujarati/gujarati-pres-before.svg
new file mode 100644
index 0000000..a5141c2
--- /dev/null
+++ b/images/gujarati/gujarati-pres-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-pres.svg b/images/gujarati/gujarati-pres.svg
new file mode 100644
index 0000000..6279d70
--- /dev/null
+++ b/images/gujarati/gujarati-pres.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-psts-after.svg b/images/gujarati/gujarati-psts-after.svg
new file mode 100644
index 0000000..f30af9c
--- /dev/null
+++ b/images/gujarati/gujarati-psts-after.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-psts-before.svg b/images/gujarati/gujarati-psts-before.svg
new file mode 100644
index 0000000..f30af9c
--- /dev/null
+++ b/images/gujarati/gujarati-psts-before.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-psts.svg b/images/gujarati/gujarati-psts.svg
new file mode 100644
index 0000000..94ddccb
--- /dev/null
+++ b/images/gujarati/gujarati-psts.svg
@@ -0,0 +1,49 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-reph-position-after.svg b/images/gujarati/gujarati-reph-position-after.svg
new file mode 100644
index 0000000..be67769
--- /dev/null
+++ b/images/gujarati/gujarati-reph-position-after.svg
@@ -0,0 +1,34 @@
+
+
diff --git a/images/gujarati/gujarati-reph-position-before.svg b/images/gujarati/gujarati-reph-position-before.svg
new file mode 100644
index 0000000..fdeb135
--- /dev/null
+++ b/images/gujarati/gujarati-reph-position-before.svg
@@ -0,0 +1,38 @@
+
+
diff --git a/images/gujarati/gujarati-reph-position.svg b/images/gujarati/gujarati-reph-position.svg
new file mode 100644
index 0000000..7d5c851
--- /dev/null
+++ b/images/gujarati/gujarati-reph-position.svg
@@ -0,0 +1,85 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-rkrf-after.svg b/images/gujarati/gujarati-rkrf-after.svg
new file mode 100644
index 0000000..08ce03e
--- /dev/null
+++ b/images/gujarati/gujarati-rkrf-after.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-rkrf-before.svg b/images/gujarati/gujarati-rkrf-before.svg
new file mode 100644
index 0000000..9354588
--- /dev/null
+++ b/images/gujarati/gujarati-rkrf-before.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/images/gujarati/gujarati-rkrf.svg b/images/gujarati/gujarati-rkrf.svg
new file mode 100644
index 0000000..20dce27
--- /dev/null
+++ b/images/gujarati/gujarati-rkrf.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-rphf-after.svg b/images/gujarati/gujarati-rphf-after.svg
new file mode 100644
index 0000000..dedcff9
--- /dev/null
+++ b/images/gujarati/gujarati-rphf-after.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/images/gujarati/gujarati-rphf-before.svg b/images/gujarati/gujarati-rphf-before.svg
new file mode 100644
index 0000000..7213dd1
--- /dev/null
+++ b/images/gujarati/gujarati-rphf-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-rphf.svg b/images/gujarati/gujarati-rphf.svg
new file mode 100644
index 0000000..3be551a
--- /dev/null
+++ b/images/gujarati/gujarati-rphf.svg
@@ -0,0 +1,61 @@
+
+
+
+
diff --git a/images/gujarati/gujarati-svg-image-generation-log.md b/images/gujarati/gujarati-svg-image-generation-log.md
new file mode 100644
index 0000000..8880f38
--- /dev/null
+++ b/images/gujarati/gujarati-svg-image-generation-log.md
@@ -0,0 +1,193 @@
+# Commands used to generate the images in [opentype-shaping-bengali.md](../../opentype-shaping-bengali.md)
+
+## Arrow general
+
+hb-view --font-size=110 --output-file=right-arrow.svg --background=FFFFFF00 --margin=0,0,0,0 /usr/share/fonts/opentype/gentiumplus/GentiumPlus-R.ttf --unicodes=2192
+
+
+## 2.2 Matra decomposition
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-matra-decompose-before.svg --features=-init --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ac9
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-matra-decompose-after.svg --features=-init --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ac5,25cc,0abe
+
+svg_stack --direction=h gujarati-matra-decompose-before.svg right-arrow.svg gujarati-matra-decompose-after.svg > gujarati-matra-decompose.svg
+
+
+## 2.7 Post-base consonants
+
+> None
+
+
+## 3.2 `nukt`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-nukt-before.svg --features=-init,-nukt --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a97,25cc,0abc
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-nukt-after.svg --features=-init,+nukt --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a97,0abc
+
+svg_stack --direction=h gujarati-nukt-before.svg right-arrow.svg gujarati-nukt-after.svg > gujarati-nukt.svg
+
+## 3.3 `akhn`
+
+### KSsa
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-akhn-kssa-before.svg --features=-init,-akhn --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a95,25cc,0acd,0ab7
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-akhn-kssa-after.svg --features=-init,+akhn --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a95,0acd,0ab7
+
+svg_stack --direction=h gujarati-akhn-kssa-before.svg right-arrow.svg gujarati-akhn-kssa-after.svg > gujarati-akhn-kssa.svg
+
+### JNya
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-akhn-jnya-before.svg --features=-init,-akhn --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9c,25cc,0acd,0a9e
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-akhn-jnya-after.svg --features=-init,+akhn --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9c,0acd,0a9e
+
+svg_stack --direction=h gujarati-akhn-jnya-before.svg right-arrow.svg gujarati-akhn-jnya-after.svg > gujarati-akhn-jnya.svg
+
+
+## 3.4 `rphf`
+
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-rphf-before.svg --features=-init,-rphf --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,25cc,0acd
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-rphf-after.svg --features=-init,+rphf --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,25cc
+
+svg_stack --direction=h gujarati-rphf-before.svg right-arrow.svg gujarati-rphf-after.svg > gujarati-rphf.svg
+
+
+## 3.5 `rkrf`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-rkrf-before.svg --features=-init,-rkrf,-blwf --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa6,25cc,0acd,0ab0
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-rkrf-after.svg --features=-init,+rkrf --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa6,0acd,0ab0
+
+svg_stack --direction=h gujarati-rkrf-before.svg right-arrow.svg gujarati-rkrf-after.svg > gujarati-rkrf.svg
+
+
+## 3.7 `blwf`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-blwf-before.svg --features=-init,-blwf --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=25cc,0acd,0ab0
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-blwf-after.svg --features=-init,+blwf --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=25cc,0acd,0ab0
+
+svg_stack --direction=h gujarati-blwf-before.svg right-arrow.svg gujarati-blwf-after.svg > gujarati-blwf.svg
+
+
+## 3.9 `half`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-half-before.svg --features=-init,-half --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aad,0acd,0ab0,25cc,0acd
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-half-after.svg --features=-init,+half --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aad,0acd,0ab0,0acd,25cc
+
+svg_stack --direction=h gujarati-half-before.svg right-arrow.svg gujarati-half-after.svg > gujarati-half.svg
+
+
+## 3.11 `vatu`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-vatu-before.svg --features=-init,-vatu --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa4,25cc,0acd,0ab0
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-vatu-after.svg --features=-init,+vatu --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa4,0acd,0ab0
+
+svg_stack --direction=h gujarati-vatu-before.svg right-arrow.svg gujarati-vatu-after.svg > gujarati-vatu.svg
+
+
+## 3.12 `cjct`
+
+> Note that Noto Serif Gujarati implements this in `pres` for unknown
+> reasons.
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-cjct-before.svg --features=-init,-pres,-cjct --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa6,25cc,0acd,0aae
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-cjct-after.svg --features=-init,+cjct --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa6,0acd,0aae
+
+svg_stack --direction=h gujarati-cjct-before.svg right-arrow.svg gujarati-cjct-after.svg > gujarati-cjct.svg
+
+
+## 4.2 Pre-base matras
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-matra-position-before.svg --features=-init --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0abf,0a9f,0acd,0a9d,0acd,0ab9,0acd,0aa4
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-matra-position-after.svg --features=-init,-pres --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9f,0acd,0a9d,0acd,0ab9,0acd,0aa4,0abf
+
+svg_stack --direction=h gujarati-matra-position-before.svg right-arrow.svg gujarati-matra-position-after.svg > gujarati-matra-position.svg
+
+
+## 4.3 Reph position
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-reph-position-before.svg --features=-init --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,25cc,0aab,0acd,0aa8,0acd,0a9a,0ac2
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-reph-position-after.svg --features=-init --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,0aab,0acd,0aa8,0acd,0a9a,0ac2
+
+svg_stack --direction=h gujarati-reph-position-before.svg right-arrow.svg gujarati-reph-position-after.svg > gujarati-reph-position.svg
+
+
+## 5 `pres`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-pres-before.svg --features=-init,-pres --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9e,0acd,0a9a,25cc
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-pres-after.svg --features=-init,+pres --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9e,0acd,0a9a,25cc
+
+svg_stack --direction=h gujarati-pres-before.svg right-arrow.svg gujarati-pres-after.svg > gujarati-pres.svg
+
+
+## 5 `abvs`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-abvs-before.svg --features=-init,-abvs --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,0aa3,0abf
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-abvs-after.svg --features=-init,+abvs --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,0aa3,0abf
+
+svg_stack --direction=h gujarati-abvs-before.svg right-arrow.svg gujarati-abvs-after.svg > gujarati-abvs.svg
+
+
+## 5 `blws`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-blws-before.svg --features=-init,-blws --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa3,0ac1
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-blws-after.svg --features=-init,+blws --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0aa3,0ac1
+
+svg_stack --direction=h gujarati-blws-before.svg right-arrow.svg gujarati-blws-after.svg > gujarati-blws.svg
+
+
+## 5 `psts`
+
+> Note: Noto Serif Gujarati implements this as an `abvs` lookup for
+> unknown reasons.
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-psts-before.svg --features=-init,-abvs --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9c,0acd,0ab0,0abe
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-psts-after.svg --features=-init,+abvs --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9c,0acd,0ab0,0abe
+
+svg_stack --direction=h gujarati-psts-before.svg right-arrow.svg gujarati-psts-after.svg > gujarati-psts.svg
+
+
+## 5 `haln`
+
+> Note: Noto Serif Gujarati implements this as a `blwm` lookup.
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-haln-after.svg --features=-init,+blwm --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a95,0acd,0a95,0abc,0acd
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-haln-before.svg --features=-init,-blwm --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a95,0acd,0a95,0abc,0acd
+
+svg_stack --direction=h gujarati-haln-before.svg right-arrow.svg gujarati-haln-after.svg > gujarati-haln.svg
+
+
+## 6 `abvm`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-abvm-before.svg --features=-init,-abvm --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,0ab9
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-abvm-after.svg --features=-init,+abvm --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0ab0,0acd,0ab9
+
+svg_stack --direction=h gujarati-abvm-before.svg right-arrow.svg gujarati-abvm-after.svg > gujarati-abvm.svg
+
+
+## 6 `blwm`
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-blwm-before.svg --features=-init,-blwm --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9f,0acd,0aa0,0ac4
+
+hb-view --font-size=110 --margin=2,16,2,16 --output-file=gujarati-blwm-after.svg --features=-init,+blwm --background=FFFFFF00 /usr/share/fonts/truetype/noto/NotoSerifGujarati-Regular.ttf --unicodes=0a9f,0acd,0aa0,0ac4
+
+svg_stack --direction=h gujarati-blwm-before.svg right-arrow.svg gujarati-blwm-after.svg > gujarati-blwm.svg
+
+
+
diff --git a/images/gujarati/gujarati-vatu-after.svg b/images/gujarati/gujarati-vatu-after.svg
new file mode 100644
index 0000000..718dc31
--- /dev/null
+++ b/images/gujarati/gujarati-vatu-after.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/images/gujarati/gujarati-vatu-before.svg b/images/gujarati/gujarati-vatu-before.svg
new file mode 100644
index 0000000..50b999c
--- /dev/null
+++ b/images/gujarati/gujarati-vatu-before.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/images/gujarati/gujarati-vatu.svg b/images/gujarati/gujarati-vatu.svg
new file mode 100644
index 0000000..87a453f
--- /dev/null
+++ b/images/gujarati/gujarati-vatu.svg
@@ -0,0 +1,57 @@
+
+
+
+
diff --git a/images/gujarati/right-arrow.svg b/images/gujarati/right-arrow.svg
new file mode 100644
index 0000000..9ebd213
--- /dev/null
+++ b/images/gujarati/right-arrow.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/opentype-shaping-gujarati.md b/opentype-shaping-gujarati.md
index 6442675..78d919e 100644
--- a/opentype-shaping-gujarati.md
+++ b/opentype-shaping-gujarati.md
@@ -914,7 +914,7 @@ Unicode-normalization stage. However, all such decompositions must be
completed before the shaping engine begins step three, below.
:::{figure-md}
-
+
Two-part matra decomposition
:::
@@ -1161,7 +1161,7 @@ precomposed nukta-variant of the consonant glyph.
:::{figure-md}
-
+
nukt feature application
:::
@@ -1189,14 +1189,14 @@ feature must be applied before all other many-to-one substitutions.
:::{figure-md}
-
+
akhn KSsa formation
:::
:::{figure-md}
-
+
akhn JNya formation
:::
@@ -1219,7 +1219,7 @@ The `rphf` feature replaces initial "Ra,Halant" sequences with the
:::{figure-md}
-
+
Reph formation
:::
@@ -1238,7 +1238,7 @@ The `rkrf` feature replaces "_Consonant_,Halant,Ra" sequences with
:::{figure-md}
-
+
Rakaar ligation
:::
@@ -1276,7 +1276,7 @@ Indic scripts that use a different `BLWF_MODE_` shaping
characteristic.
:::{figure-md}
-
+
blwf feature application
:::
@@ -1325,7 +1325,7 @@ the shaping engine must test:
flagged for potential `half` substitutions.
:::{figure-md}
-
+
half-form feature application
:::
@@ -1352,7 +1352,7 @@ the `blwf` feature.
> must support and process both features.
:::{figure-md}
-
+
vatu feature application
:::
@@ -1400,7 +1400,7 @@ substitutions apply to half-form consonants; therefore, this feature
must be applied after the `half` feature.
:::{figure-md}
-
+
cjct feature application
:::
@@ -1469,7 +1469,7 @@ consonant or syllable base, all conjuncts or ligatures that contain
the base consonant or syllable base, and all half forms.
:::{figure-md}
-
+
Pre-base matra positioning
:::
@@ -1562,7 +1562,7 @@ left of "Halant", to allow for potential matching with `abvs` or
:::{figure-md}
-
+
Reph positioning
:::
@@ -1614,7 +1614,7 @@ consonants, and stylistic variants of left-side dependent vowels
(matras).
:::{figure-md}
-
+
pres feature application
:::
@@ -1625,7 +1625,7 @@ presentation forms. This usually includes contextual variants of
above-base marks or contextually appropriate mark-and-base ligatures.
:::{figure-md}
-
+
abvs feature application
:::
@@ -1638,7 +1638,7 @@ are adjacent to the below-base-consonant form "Rakaar" with context
ligatures.
:::{figure-md}
-
+
blws feature application
:::
@@ -1650,7 +1650,7 @@ dependent vowels (matras) with stylistic variants or replacing
post-base-consonant/matra pairs with contextual ligatures.
:::{figure-md}
-
+
psts feature application
:::
@@ -1662,7 +1662,7 @@ consonant where placing the "Halant" mark on its own is
typographically problematic.
:::{figure-md}
-
+
haln feature application
:::
@@ -1700,7 +1700,7 @@ characters. In Gujarati, this includes "Reph" in addition to
above-base dependent vowels (matras), diacritical marks, and Vedic signs.
:::{figure-md}
-
+
Above-base mark positioning
:::
@@ -1711,7 +1711,7 @@ characters. In Gujarati, this includes below-base dependent vowels
(matras) and diacritical marks as well as the below-base consonant form "Rakaar".
:::{figure-md}
-
+
Below-base mark positioning
:::