diff --git a/laantas-script/Glyphs.hs b/laantas-script/Glyphs.hs index 47cbfa0..78fc504 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ḿ), @@ -43,41 +42,45 @@ 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} -tt = G {path = ttPath, width = 6} -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} -tb = G {path = tbPath, width = 10} -ts = G {path = tsPath, width = 9} -tš = G {path = tšPath, width = 9} -tl = G {path = tlPath, width = 9} -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 = 5} -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 (1.5,0), lR (0,5), mA (0,0), lR (5,0), lR (0,5)] -tPart ℓ = P [mA (2,0), lR (0,5), mA (0,0), lR (ℓ,0)] -ttPath = P [mA (1,0), lR (0,5), mA (3,0), lR (0,5), mA (5,0), lR (0,5), - mA (0,0), lR (7,0), lR (0,5)] -tkPath = tPart 5 <> shiftX 5 kShort -tgPath = tPart 5 <> shiftX 5 gShort +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 + <> shiftX 2.75 aPath + <> 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 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 (5.5,0)] <> shiftX 4 pPath +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 tšPath = tPart 4 <> shiftX 4 šPath -tlPath = tPart 5 <> shiftX 4 lPath +tlPath = tPart 5 <> shiftX 3.5 lPath tmPath = tPart 4.5 <> shiftX 4 mPath tnPath = tPart 6 <> shiftX 4 nPath trPath = tPart 7 <> shiftX 4 rShort @@ -86,35 +89,41 @@ 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)] -t0Path = tPath <> P [mA (1.5,7), lR (3.5,0)] +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)] 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 -kPath = P [mA (0,0), lR (0,5), sR (3,0) (5,-0.5), mA (5,-3), lR (0,8)] -kShortPart = P [mA (0,0), lR (0,5), sR (2.6,0) (4,-0.5)] +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)] +kBottom = P [cR (0,0) (3,0) (5,-0.5)] +kShortPart = kLeft <> kBottomShort kShort = kShortPart <> P [mA (4,-3), lR (0,8)] kkPath = kShortPart <> shiftX 4 kShort ksPath = kShortPart <> shiftX 4 sPath -g = G {path = gPath, width = 5} +g = simpleG gPath 5 -gPath = kPath <> P [mA (2,-3), lR (3,0), mA (5,5)] -gShort = kShort <> P [mA (1.5,-3), lR (2.5,0), mA (4,5)] +gPath = gHat <> kPath +gHat = P [mA (1.5,-2.75), qR (1.5,0.125) (3.5,-0.25)] +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' dPart = dBase <> dJoin -dJoin = P [mA (2,5), cR (2,0) (3,-1) (3,-2)] +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 @@ -124,73 +133,87 @@ 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} -ƶ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} -ƶ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 = 10} -ƶ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} -ƶ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 = dPath <> P [mA (1,-3), lR (4,0), mA (5,5)] +ƶPath = gHat <> dPath ƶtPath = dLong <> shiftX 5 tPath ƶkPath = dPart <> shiftX 5 kShort ƶgPath = dPart <> shiftX 5 gShort -ƶdPath = dFree <> shiftX 5 dPath <> P [mA (1,-2), lR (2,0)] +ƶdPath = dFree <> shiftX 5 dPath ƶƶPath = dFree <> shiftX 5 ƶPath ƶpPath = dFree <> shiftX 5 pPath -ƶbPath = dPart <> shiftX 5 bPath +ƶbPath = dPart' <> shiftX 5 bPath ƶsPath = dPart <> shiftX 5 sPath ƶšPath = dPart <> shiftX 5 šPath ƶlPath = dPart <> shiftX 5 lPath ƶmPath = dPart <> shiftX 5 mPath -ƶnPath = dPart <> shiftX 5 nPath -ƶrPath = dPart <> shiftX 5 rCursive +ƶnPath = dPart' <> shiftX 4.75 nPath +ƶ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 +ƶwPath = dPart' <> shiftX 5 wPath ƶhPath = dPart <> shiftX 5 hPath ƶfPath = dFree <> shiftX 4 fPath -ƶjPath = dFree <> shiftX 4 fPath -ƶ0Path = dFree <> P [mA (0,7), lR (3.5,0)] +ƶ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} -pp = G {path = ppPath, width = 8} -ps = G {path = psPath, width = 10} -pj = G {path = pjPath, width = 9} +p = simpleG pPath 5.5 +pp = simpleG ppPath 9 +ps = simpleG psPath 10.5 +pj = simpleG pjPath 10 -pPath = P [mA (1.5,-3), lR (0,8), sR (-1.5,-3) (-1.5,-5), lR (5,0), lR (0,5)] -ppPath = P [mA (1.5,-3), lR (0,8), sR (-1.5,-3) (-1.5,-5), - mA (4,-3), lR (0,8), mA (0,0), lR (8,0), lR (0,5)] -psPath = P [mA (1.5,-3), lR (0,8), sR (-1.5,-3) (-1.5,-5), lR (5,0)] - <> shiftX 5 sPath -pjPath = pPath <> P [mA (5,0), lR (4,0), lR (0,5)] +pInit = + P [mA (0,-3), cR (-1,1) (-0.5,6) (-0.5,8)] +pPart = + shiftX 2 pInit <> + P [cR (-1,-3) (-2,-4) (0,-5), cR (1,-0.5) (2.5,-0.5) (4,0)] +pPath = pPart <> shiftX 5.25 aPath +ppPath = + shiftX 2 pInit <> shiftX 4.5 pInit <> + 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 = + shiftX 2 pInit <> + P [cR (-1,-3) (-2,-4) (0,-5), cR (1,-0.5) (4,-1) (4,1), + lR (0,4), mR (0,-4), + cR (0,-2) (3.5,-1) (4.5,-1)] <> + shiftX 9.75 aPath 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 = wPart <> P [mA (2,-3), lR (4,0), lR (0,8)] -bjPath = bPath <> P [mA (6,-3), lR (3,0), lR (0,8)] +bPath = shiftX 1 gHat <> wPart <> P [mA (6,-3), lR (0,8)] +bjPath = + bPath <> + P [mA (6,0.5), qR (1.5,0) (3,-0.5)] <> + shiftX 8.75 aPath sGlyphs = [("s",s), ("st",st), ("sk",sk), ("sg",sg), ("sd",sd), ("sƶ",sƶ), @@ -198,52 +221,57 @@ 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} -st = G {path = stPath, width = 9} -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 = 10} -sb = G {path = sbPath, width = 10} -ss = G {path = ssPath, width = 10} -sš = G {path = sšPath, width = 10} -sl = G {path = slPath, width = 10} -sm = G {path = smPath, width = 11} -sn = G {path = snPath, width = 10} -sr = G {path = srPath, width = 9} -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} -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 <> P [mA (5,0), lR (0,5)] -sPart = P [mA (0, 0), lR (0, 3.5), aR 1.5 1.5 0 Small CCW (3,0), lR (0,-3.5)] -sPartLine = sPart <> P [mA (3,0), lR (2,0)] -stPath = sPartLine <> shiftX 4 tPath +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)] +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 (3,0), lR (1,0)] <> shiftX 4 dPath -sƶPath = sPart <> P [mA (3,0), lR (1,0)] <> shiftX 4 ƶPath -spPath = sPart <> P [mA (3,0), lR (3.5,0)] <> shiftX 5 pPath -sbPath = sPart <> shiftX 4 bPath <> P [mA (3,0), lR (0,-3), lR (3.5,0), mA (10,5)] +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 +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 (3,0), lR (3,0)] <> shiftX 5 lPath -smPath = sPart <> P [mA (3,0), lR (2.5,0)] <> shiftX 5 mPath -snPath = sPart <> P [mA (3,0), lR (4,0)] <> shiftX 5 nPath -srPath = sPart <> P [mA (3,0), lR (4,0)] <> shiftX 4 rShort -sčPath = sPart <> shiftX 3 čFlat -sǧPath = sPart <> shiftX 4 ǧPath -swPath = sPart <> P [mA (3,0), lR (3.5,0)] <> shiftX 4 wPath -shPath = sPart <> shiftX 5 hPath -sfPath = sPart <> 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)] -s0Path = sPath <> P [mA (0.5,7), lR (4,0)] +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.25 fPath +sjPath = sPartLine <> jTall +s0Path = sPath <> P [mA (1.5,7), cR (1.8,-0.25) (2.6,0) (3,0.5)] šGlyphs = [("š",š), ("št",št), ("šk",šk), ("šg",šg), ("šd",šd), ("šƶ",šƶ), @@ -251,7 +279,7 @@ s0Path = sPath <> P [mA (0.5,7), lR (4,0)] ("šn",šn), ("šr",šr), ("šč",šč), ("šǧ",šǧ), ("šw",šw), ("šh",šh), ("šf",šf), ("šj",šj)] -š = G {path = šPath, width = 5} +š@(G {path = šPath}) = s2š s šš = ss {path = ššPath} šp = sp {path = špPath} šb = sb {path = šbPath} @@ -273,13 +301,11 @@ s0Path = sPath <> P [mA (0.5,7), lR (4,0)] šj = s2š sj š0 = s2š s0 -šPath = sPath <> šLine <> P [mA (5,5)] -šLine = P [mA (0.5,-1.5), lR (2,0)] -ššPath = ssPath <> P [mA (1,-2), lR (7,0), mA (10,5)] -špPath = spPath <> P [mA (0,-3), lR (3,0)] +š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, width}) = - g {path = path <> šLine <> P [mA (width,5)]} +s2š g@(G {path}) = g {path = šLine <> path} lGlyphs = [("l",l), ("ll", ll), ("lt",lt), ("lk",lk), ("lg",lg), ("ld",ld), @@ -287,62 +313,59 @@ 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 = 5} -ll = G {path = llPath, width = 10} -lt = G {path = ltPath, width = 10} -lk = G {path = lkPath, width = 9} -lg = G {path = lgPath, width = 9} -ld = G {path = ldPath, width = 10} -lƶ = G {path = lƶPath, width = 10} -lp = G {path = lpPath, width = 10} -lb = G {path = lbPath, width = 11} -ls = G {path = lsPath, width = 10} -lš = G {path = lšPath, width = 10} -lm = G {path = lmPath, width = 11} -ln = G {path = lnPath, width = 10} -lr = G {path = lrPath, width = 10} -lč = G {path = lčPath, width = 10} -lǧ = G {path = lǧPath, width = 10} -lw = G {path = lwPath, width = 11} -lh = G {path = lhPath, width = 13} -lf = G {path = lfPath, width = 11} -lj = G {path = ljPath, width = 6} -l0 = G {path = l0Path, width = 4} +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,4.5), lR (1,-0.7), mA (5,0), lR (0,5)] -lBase = P [mA (4,0.5), cR (-2.25,-0.75) (-2.55,-0.5) (-2.75,-0.5), - aR 1.25 1.25 0 Small CCW (0,2.5), lR (2,0), mR (-2,0), - aR 1.25 1.25 0 Small CCW (0,2.5), lR (0.75,0)] -lPart = lBase <> dJoin -lPartFlat = lBaseFlat <> shiftX 1 dJoin -lBaseFlat = P [mA (4,0), lR (-2.75,0), - aR 1.25 1.25 0 Small CCW (0,2.5), lR (2,0), mR (-2,0), - aR 1.25 1.25 0 Small CCW (0,2.5), lR (2,0)] -lFree = P [mA (4,0.5), cR (-2.25,-0.75) (-2.55,-0.5) (-2.75,-0.5), - aR 1.25 1.25 0 Small CCW (0,2.5), lR (2,0), mR (-2,0), - aR 1.25 1.25 0 Small CCW (0,2.5), - cR (0.2,0.25) (2.25,0) (2.75,-0.5)] -lLong = lBase <> P [mA (2,5), lR (2,0)] <> shiftX 1.5 dJoin -llPath = lPart <> shiftX 5 lPath -ltPath = lLong <> shiftX 5 tPath -lkPath = lPart <> shiftX 5 kShort -lgPath = lPart <> shiftX 5 gShort -ldPath = lFree <> shiftX 5 dPath -lƶPath = lFree <> shiftX 5 ƶPath -lpPath = lFree <> shiftX 5 pPath -lbPath = lPart <> shiftX 5 bPath -lsPath = lPart <> shiftX 5 sPath -lšPath = lPart <> shiftX 5 šPath -lmPath = lPart <> shiftX 5 mPath -lnPath = lPart <> shiftX 5 nPath -lrPath = lPart <> shiftX 5 rCursive -lčPath = lFree <> shiftX 5 čPath -lǧPath = lFree <> shiftX 5 ǧPath -lwPath = lPart <> shiftX 5 wPath -lhPath = lPart <> shiftX 5 hPath -lfPath = lFree <> shiftX 5 fPath -ljPath = lPartFlat <> P [mA (4,0), lR (2,0), lR (0,5)] -l0Path = lFree <> P [mA (0.25,7), lR (3.5,0)] +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), + cR (-1.5,0.3) (-2,2.5) (0,2.5)] +lJoin = P [lR (0.25,0)] <> dJoin +lJoin' = P [lR (0.25,0)] <> dJoin' +lPart = lBase <> lJoin +lPart' = lBase <> lJoin' +lFree = lBase <> P [qR (2.25,0) (2.5,-0.5)] +lFree' = lBase <> P [qR (2,0) (2.25,-0.75)] +llPath = lPart <> shiftX 4.5 lPath +ltPath = lBase <> P [qR (4.5,0) (4.75,-3)] <> shiftX 4.5 tPath +lkPath = lPart <> shiftX 4.5 kShort +lgPath = lPart <> shiftX 4.5 gShort +ldPath = lFree' <> shiftX 4.5 dPath +lƶPath = lFree' <> shiftX 4.5 ƶPath +lpPath = lFree' <> shiftX 4.5 pPath +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.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 = lFree' <> jTall +l0Path = lFree <> P [mA (1.25,7), cR (1.8,-0.25) (2.2,0) (2.5,0.5)] mGlyphs = [("m",m), ("mt",mt), ("mk",mk), ("mg",mg), ("md",md), ("mƶ",mƶ), @@ -350,53 +373,58 @@ 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 = 9.5} -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} -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.125 +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)] +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 (0.5,7), lR (5,0)] +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ƶ), @@ -404,55 +432,57 @@ 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} -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 = 9.5} -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} -nč = G {path = nčPath, width = 10} -nǧ = G {path = nǧPath, width = 9.5} -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} -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)] -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 +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 (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)] +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 (0.5,7), lR (3,0)] +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ƶ), @@ -460,32 +490,30 @@ 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} -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 = 9.5} -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)] -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)] @@ -509,20 +537,20 @@ 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)] -r0Path = ŕPath <> P [mA (0.5,7), lR (4,0)] +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' čPart' = P [aR 1.25 1.25 0 Small CW (0,2.5), lR (-2,0), mR (2,0), aR 1.25 1.25 0 Small CW (0,2.5), - cR (-0.2,0.25) (-2.25,0) (-2.75,-0.5)] -- FIXME? + cR (-0.2,0.25) (-2.25,0) (-2.75,-0.5)] čJoin = P [mA (2.5,5), cR (1.5,0) (2.5,-0.5) (2.5,-1)] čPartFlat = P [mA (0,0), lR (3.5,0)] <> čPart' čFlat = čPartFlat <> shiftX 1 čJoin <> P [mA (6,0), lR (0,5)] @@ -530,7 +558,7 @@ r0Path = ŕPath <> P [mA (0.5,7), lR (4,0)] čč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), @@ -542,142 +570,160 @@ r0Path = ŕPath <> P [mA (0.5,7), lR (4,0)] cR (-0.2,0.25) (-2.25,0) (-2.75,-0.5)] -w = G {path = wPath, width = 6} +w = simpleG wPath 6 -wPath = wPart <> P [mA (6,0), lR (0,5)] -wPart = P $ circA 2.5 (2.5,2.5) <> [mA (2.5,0), lR (3.5,0)] +wPath = wPart <> shiftX 5.75 aPath +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} -hh = G {path = hhPath, width = 16} -hn = G {path = hnPath, width = 14} -hm = G {path = hmPath, width = 15} +h = simpleG hPath 8.5 +hh = simpleG hhPath 16.5 +hn = simpleG hnPath 15 +hm = simpleG hmPath 16 -hPath = hPart <> P [mA (5,-3), lR (3,0), lR (0,8)] -hPart = sPart <> P [mA (3,0), lR (1,0)] <> shiftX 4 sPart -hhPath = hPart <> P [mA (7,0), lR (1,0)] <> shiftX 8 hPart <> - P [mA (12,-3), lR (4,0), lR (0,8)] -hnPath = hPath <> shiftX 9 nPath -hmPath = hPath <> shiftX 9 mPath +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 +hPart = hPart' sPartIso +hhPath = hPart' sPart <> P [mA (6.5,0), lR (1.5,0)] <> shiftX 8 hPart <> + shiftX 11.5 gHat <> P [mA (16.5,-3), lR (0,8)] +hnPath = hPath <> shiftX 10 nPath +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 (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 (0.5,7), lR (5,0)] +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 = G {path = jPath, width = 5} +j = simpleG jPath 4 -jPath = P [mA (0,0), lR (5,0), lR (0,5)] +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), ("ú", ú), ("ai", ai), ("au", au), ("ia", ia), ("ua", ua), ("ḿ", ḿ), ("ń", ń), ("ł", ł), ("ŕ", ŕ)] -a = G {path = aPath, width = 0} -á = G {path = áPath, width = 3} +a = simpleG aPath 0.125 +á = simpleG áPath 2.125 i = j -í = G {path = íPath, width = 5} -u = G {path = uPath, width = 5} -ú = G {path = úPath, width = 6} -ai = G {path = aiPath, width = 5} -au = G {path = auPath, width = 5} -ia = G {path = iaPath, width = 5} -ua = G {path = uaPath, width = 5} -ḿ = G {path = ḿPath, width = 6} -ń = G {path = ńPath, width = 3} -ł = G {path = łPath, width = 4} -ŕ = 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,0), lR (0,5)] -áPath = P [mA (0,0), lR (0,5), mA (3,0), lR (0,5)] -íPath = P [mA (0,0), lR (3,0), lR (0,5), mR (0,-5), lR (2,0), lR (0,5)] -uPath = P $ circA 2.5 (2.5,2.5) -úPath = P $ ellipseA 1.5 2.5 (1.5,2.5) <> ellipseA 1.5 2.5 (4.5,2.5) -aiPath = P [mA (0,0), lR (0,5), mR (2,-5), lR (3,0), lR (0,5), - mA (2.5,7), lR (2,0)] -auPath = P $ - [mA (0,0), lR (0,5)] <> ellipseA 1.5 2.5 (3.5,2.5) <> [mA (2.5,7), lR (2,0)] -iaPath = P [mA (0,0), lR (3,0), lR (0,5), mA (5,0), lR (0,5)] -uaPath = P $ ellipseA 1.5 2.5 (1.5,2.5) <> [mA (5,0), lR (0,5)] -ḿ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 = 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)] +aPath = P [mA (0.25,0), cR (-0.25,1) (-0.25,2) (-0.25,5)] +á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), + cR (-3.2,0.5) (-3.2,5.5) (0,5), + cR (3.2,-0.5) (3.2,-5.5) (0,-5)] +uNarrow = P [mA (1.5,0), + cR (-2.2,0.25) (-2.2,5.25) (0,5), + cR (2.2,-0.25) (2.2,-5.25) (0,-5)] +úPath = uPath <> P [mA (4.25,-3), cR (-1.5,3) (-3.2,8) (-2.8,12)] +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 = mFree +ńPath = nFree łPath = lFree ŕPath = rPart <> P [mA (5,0), lR (0,5)] 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 (SI {width}) = (f width, width) +sP = simpleDia . P -dai = da <> P [mR (-4,-3), lR (2.5,0), lR (0,3)] -dau = da <> P (circR 1.5 (-3,-2)) <> P [mR (1.5,-1.5), lR (3,0)] -dia = di <> adot (-1.5,0) -dua = du <> adot (2,-2) +-- 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)]] -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 (-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 (-3,0), cR (1,0) (3,-1) (3,-2)] +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 <> + [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 [(".", 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 0ac2421..2bdceb7 100644 --- a/laantas-script/GlyphsBase.hs +++ b/laantas-script/GlyphsBase.hs @@ -3,13 +3,23 @@ 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) -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 @@ -74,23 +84,39 @@ 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' a = SizeInfo -> (Segs, a) +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 act = do E {stroke, color} <- ask let gattrs = [Stroke_ <<- color, Stroke_width_ <<- toPx stroke, - Stroke_linecap_ <<- "round", Fill_ <<- "none"] + Stroke_linecap_ <<- "round", Stroke_linejoin_ <<- "round", + Fill_ <<- "none"] 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 +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}, _) = (+) <$> withSize (* width) <*> 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 wordWidth :: Word -> M Double wordWidth = fmap sum . traverse glyphWidth @@ -110,11 +136,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, 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] + +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/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 "" diff --git a/laantas-script/Svg.hs b/laantas-script/Svg.hs index 6f53a8c..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) +import Graphics.Svg + hiding (mA, mR, lA, lR, cA, cR, sA, sR, aA, aR, qA, qR, tA, tR) import Data.Text (Text, pack) @@ -66,6 +67,28 @@ cR (x1, y1) (x2, y2) (x3, y3) = (x3 * size) (y3 * size) <> " " -- lmao +qA :: Point -> Point -> M Text +qA (x1, y1) (x2, y2) = + reader \E {size} -> + Base.qA (x1 * size) (y1 * size) + (x2 * size) (y2 * size) + +qR :: Point -> Point -> M Text +qR (x1, y1) (x2, y2) = + reader \E {size} -> + 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 c9c853a..9e84e4c 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, containers ^>= 0.6.2.1, diff --git a/pages/laantas/writing.md b/pages/laantas/writing.md index 8c4a3b2..bb5907e 100644 --- a/pages/laantas/writing.md +++ b/pages/laantas/writing.md @@ -40,9 +40,9 @@ In other cases, vowels are attached to the letter for the previous consonant. The basic consonant shapes are: :::letter-list -`{!t\}` `{!k\}` `{!g\}` `{!d\}` `{!ƶ\}` `{!p\}` `{!b\}` -`{!s\}` `{!š\}` `{!l\}` `{!m\}` `{!n\}` `{!č\}` `{!ǧ\}` -`{!w\}` `{!h\}` `{!f\}` `{!j\}` `{!r\}` +`{!ta}` `{!ka}` `{!ga}` `{!da}` `{!ƶa}` `{!pa}` `{!ba}` +`{!sa}` `{!ša}` `{!la}` `{!ma}` `{!na}` `{!ča}` `{!ǧa}` +`{!wa}` `{!ha}` `{!fa}` `{!ja}` `{!ra}` ::: Clusters are written with a single glyph called a 'conjunct'. These aren't @@ -61,54 +61,54 @@ surprising. ::: {.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