bronzeage grammar restored except for three ones with issues ; arabic transliteration added

This commit is contained in:
aarne
2008-08-16 18:55:28 +00:00
parent b1b2e6766d
commit 65a25ad181
25 changed files with 697 additions and 2 deletions

View File

@@ -0,0 +1,38 @@
abstract Bronzeage = Cat, Swadesh ** {
flags startcat = Phr ;
cat
Sent ; MassCN ;
fun
PhrPos : Sent -> Phr ;
PhrNeg : Sent -> Phr ;
PhrQuest : Sent -> Phr ;
PhrImp : Imp -> Phr ;
PhrImpNeg : Imp -> Phr ;
SentV : V -> NP -> Sent ;
SentV2 : V2 -> NP -> NP -> Sent ;
SentV2Mass : V2 -> NP -> MassCN -> Sent ;
SentV3 : V3 -> NP -> NP -> NP -> Sent ;
SentA : A -> NP -> Sent ;
SentNP : NP -> NP -> Sent ;
SentAdvV : V -> NP -> Adv -> Sent ;
SentAdvV2 : V2 -> NP -> NP -> Adv -> Sent ;
ImpV : V -> Imp ;
ImpV2 : V2 -> NP -> Imp ;
UsePron : Pron -> NP ;
DetCN : Det -> CN -> NP ;
NumCN : Card -> CN -> NP ;
UseN : N -> CN ;
ModCN : A -> CN -> CN ;
UseMassN : MassN -> MassCN ;
ModMass : A -> MassCN -> MassCN ;
}

View File

@@ -0,0 +1,7 @@
--# -path=.:present:prelude
concrete BronzeageDan of Bronzeage = CatDan, SwadeshDan ** BronzeageI with
(Lang = LangDan) ** {
flags language = da_DK;
}

View File

@@ -0,0 +1,7 @@
--# -path=.:present:prelude
concrete BronzeageEng of Bronzeage = CatEng, SwadeshEng ** BronzeageI with
(Lang = LangEng) ** {
flags language = en_US;
}

View File

@@ -0,0 +1,8 @@
--# -path=.:present:prelude
concrete BronzeageFin of Bronzeage = CatFin, SwadeshFin ** BronzeageI with
(Lang = LangFin) ** {
flags language = fi_FI;
}

View File

@@ -0,0 +1,8 @@
--# -path=.:present:prelude
concrete BronzeageGer of Bronzeage = CatGer, SwadeshGer ** BronzeageI with
(Lang = LangGer) ** {
flags language = de_DE;
}

View File

@@ -0,0 +1,59 @@
incomplete concrete BronzeageI of Bronzeage = open Lang in {
flags
optimize = all_subs ; --optimize = share_subs ;
unlexer = text ; lexer = text ;
lincat
Sent = {s : SForm => Str} ; MassCN = CN ;
lin
PhrPos sent = {s = sent.s ! SPos ++ "."} ;
PhrNeg sent = {s = sent.s ! SNeg ++ "."} ;
PhrQuest sent = {s = sent.s ! SQuest ++ "?"} ;
PhrImp imp = {s = (PhrUtt NoPConj (UttImpSg PPos imp) NoVoc).s ++ "!"} ;
PhrImpNeg imp = {s = (PhrUtt NoPConj (UttImpSg PNeg imp) NoVoc).s ++ "!"} ;
SentV v np = mkSent np (UseV v) ;
SentV2 v x y = mkSent x (ComplSlash (SlashV2a v) y) ;
SentV2Mass v x y = mkSent x (ComplSlash (SlashV2a v) (massNP y)) ;
SentV3 v x y z = mkSent x (ComplSlash (Slash2V3 v y) z) ;
SentA a x = mkSent x (UseComp (CompAP (PositA a))) ;
SentNP a x = mkSent x (UseComp (CompNP a)) ;
SentAdvV v np adv = mkSent np (AdvVP (UseV v) adv) ;
SentAdvV2 v x y adv = mkSent x (AdvVP (ComplSlash (SlashV2a v) y) adv) ;
ImpV v = ImpVP (UseV v) ;
ImpV2 v x = ImpVP (ComplSlash (SlashV2a v) x) ;
UsePron p = Lang.UsePron p ;
DetCN d n = Lang.DetCN d n ;
NumCN k cn = Lang.DetCN (DetArtCard (IndefArt) k) cn ;
UseN n = Lang.UseN n ;
ModCN a cn = AdjCN (PositA a) cn ;
UseMassN mn = Lang.UseN mn ;
ModMass a cn = AdjCN (PositA a) cn ;
param
SForm = SPos | SNeg | SQuest ;
oper
mkSent : NP -> VP -> Sent ;
mkSent np vp =
let cl = PredVP np vp
in {
s = table {
SPos => Predef.toStr S (UseCl Lang.TPres ASimul PPos cl) ;
SNeg => Predef.toStr S (UseCl Lang.TPres ASimul PNeg cl) ;
SQuest => Predef.toStr QS (UseQCl Lang.TPres ASimul PPos (QuestCl cl))
} ;
lock_Sent = <>
} ;
massNP : CN -> NP = MassNP ;
}

View File

@@ -0,0 +1,6 @@
--# -path=.:present:prelude
concrete BronzeageNor of Bronzeage = CatNor, SwadeshNor ** BronzeageI with
(Lang = LangNor) ** {
flags language = nb_NO;
}

View File

@@ -0,0 +1,7 @@
--# -path=.:present:prelude
concrete BronzeageRus of Bronzeage = CatRus, SwadeshRus ** BronzeageI with
(Lang = LangRus) ** {
flags language = ru_RU;
}

View File

@@ -0,0 +1,7 @@
--# -path=.:present:prelude
concrete BronzeageSpa of Bronzeage = CatSpa, SwadeshSpa ** BronzeageI with
(Lang = LangSpa) ** {
flags language = es_ES;
}

View File

@@ -0,0 +1,8 @@
--# -path=.:present:prelude
concrete BronzeageSwe of Bronzeage = CatSwe, SwadeshSwe ** BronzeageI with
(Lang = LangSwe) ** {
flags language = sv_SE;
}

View File

@@ -0,0 +1,245 @@
abstract Swadesh = Cat ** {
cat
MassN ;
fun
-- Pronouns
i_NP : Pron ;
youSg_NP : Pron ;
he_NP : Pron ;
we_NP : Pron ;
youPl_NP : Pron ;
they_NP : Pron ;
whoPl_IP : IP ; -- only one who in Swadesh 207
whoSg_IP : IP ;
whatPl_IP : IP ; -- only one what in Swadesh 207
whatSg_IP : IP ;
-- Determiners
that_Det : Det ;
this_Det : Det ;
---- all_Predet : Predet ;
many_Det : Det ;
some_Det : Det ;
left_Ord : Ord ;
right_Ord : Ord ;
-- Adverbs
here_Adv : Adv ;
there_Adv : Adv ;
where_IAdv : IAdv ;
when_IAdv : IAdv ;
how_IAdv : IAdv ;
far_Adv : Adv ;
-- Conjunctions
and_Conj : Conj ;
-- Prepositions
-- at_Prep : Prep ;
in_Prep : Prep ;
with_Prep : Prep ;
-- not -- ?
-- if -- ?
-- because -- ?
-- Numerals
one_Det : Card ;
two_Num : Card ;
three_Num : Card ;
four_Num : Card ;
five_Num : Card ;
-- Adjectives
bad_A : A ;
big_A : A ;
black_A : A ;
cold_A : A ;
correct_A : A ;
dirty_A : A ;
dry_A : A ;
dull_A : A ;
full_A : A ;
good_A : A ;
green_A : A ;
heavy_A : A ;
long_A : A ;
narrow_A : A ;
near_A : A ;
new_A : A ;
old_A : A ;
---- other_A : A ;
red_A : A ;
rotten_A : A ;
round_A : A ;
sharp_A : A ;
short_A : A ;
small_A : A ;
smooth_A : A ;
straight_A : A ;
thick_A : A ;
thin_A : A ;
warm_A : A ;
wet_A : A ;
white_A : A ;
wide_A : A ;
yellow_A : A ;
-- Nouns
animal_N : N ;
ashes_N : MassN ;
back_N : N ;
bark_N : MassN ;
belly_N : N ;
bird_N : N ;
blood_N : MassN ;
bone_N : N ;
breast_N : N ;
child_N : N ;
cloud_N : N ;
day_N : N ;
dog_N : N ;
dust_N : MassN ;
ear_N : N ;
earth_N : MassN ;
egg_N : N ;
eye_N : N ;
fat_N : MassN ;
---- father_N : N ;
feather_N : N ;
fingernail_N : N ;
fire_N : N ;
fish_N : N ;
flower_N : N ;
fog_N : MassN ;
foot_N : N ;
forest_N : N ;
fruit_N : N ;
grass_N : N ;
guts_N : N ;
hair_N : N ;
hand_N : N ;
head_N : N ;
heart_N : N ;
horn_N : N ;
husband_N : N ;
ice_N : MassN ;
knee_N : N ;
lake_N : N ;
leaf_N : N ;
leg_N : N ;
liver_N : N ;
louse_N : N ;
man_N : N ;
meat_N : MassN ;
moon_N : N ;
---- mother_N : N ;
mountain_N : N ;
mouth_N : N ;
name_N : N ;
neck_N : N ;
night_N : N ;
nose_N : N ;
person_N : N ;
rain_N : MassN ;
river_N : N ;
road_N : N ;
root_N : N ;
rope_N : N ;
salt_N : MassN ;
sand_N : MassN ;
sea_N : N ;
seed_N : N ;
skin_N : N ;
sky_N : N ;
smoke_N : MassN ;
snake_N : N ;
snow_N : MassN ;
star_N : N ;
stick_N : N ;
stone_N : N ;
sun_N : N ;
tail_N : N ;
tongue_N : N ;
tooth_N : N ;
tree_N : N ;
water_N : MassN ;
wife_N : N ;
wind_N : N ;
wing_N : N ;
woman_N : N ;
worm_N : N ;
year_N : N ;
-- Verbs
bite_V2 : V2 ;
blow_V : V ;
breathe_V : V ;
burn_V : V ;
come_V : V ;
count_V2 : V2 ;
cut_V2 : V2 ;
die_V : V ;
dig_V : V ;
drink_V2 : V2 ;
eat_V2 : V2 ;
fall_V : V ;
fear_V2 : V2 ;
fight_V2 : V2 ;
float_V : V ;
flow_V : V ;
fly_V : V ;
freeze_V : V ;
give_V3 : V3 ;
hear_V2 : V2 ;
hit_V2 : V2 ;
hold_V2 : V2 ;
hunt_V2 : V2 ;
kill_V2 : V2 ;
know_V2 : V2 ;
laugh_V : V ;
lie_V : V ;
live_V : V ;
play_V : V ;
pull_V2 : V2 ;
push_V2 : V2 ;
rub_V2 : V2 ;
say_V : V ;
scratch_V2 : V2 ;
see_V2 : V2 ;
sew_V : V ;
sing_V : V ;
sit_V : V ;
sleep_V : V ;
smell_V : V ;
spit_V : V ;
split_V2 : V2 ;
squeeze_V2 : V2 ;
stab_V2 : V2 ;
stand_V : V ;
suck_V2 : V2 ;
swell_V : V ;
swim_V : V ;
think_V : V ;
throw_V2 : V2 ;
tie_V2 : V2 ;
turn_V : V ;
vomit_V : V ;
walk_V : V ;
wash_V2 : V2 ;
wipe_V2 : V2 ;
}

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshAra of Swadesh = CatAra ** SwadeshI with
(Lang = LangAra) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshDan of Swadesh = CatDan ** SwadeshI with
(Lang = LangDan) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshEng of Swadesh = CatEng ** SwadeshI with
(Lang = LangEng) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshFin of Swadesh = CatFin ** SwadeshI with
(Lang = LangFin) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshFre of Swadesh = CatFre ** SwadeshI with
(Lang = LangFre) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshGer of Swadesh = CatGer ** SwadeshI with
(Lang = LangGer) ;

View File

@@ -0,0 +1,226 @@
incomplete concrete SwadeshI of Swadesh = open Lang in {
lincat
MassN = Lang.N ;
lin
-- Pronouns
i_NP = Lang.i_Pron ;
youSg_NP = Lang.youSg_Pron ;
he_NP = Lang.he_Pron ;
we_NP = Lang.we_Pron ;
youPl_NP = Lang.youPl_Pron ;
they_NP = Lang.they_Pron ;
whoPl_IP = Lang.whoPl_IP ;
whoSg_IP = Lang.whoSg_IP ;
whatPl_IP = Lang.whatPl_IP ;
whatSg_IP = Lang.whatSg_IP ;
-- Determiners
this_Det = DetQuant (this_Quant) NumSg ;
that_Det = DetQuant (that_Quant) NumSg ;
many_Det = Lang.many_Det ;
some_Det = someSg_Det ;
---- few_Det = few_Det ;
left_Ord = Lang.left_Ord ;
right_Ord = Lang.right_Ord ;
-- Adverbs
here_Adv = Lang.here_Adv;
there_Adv = Lang.there_Adv;
where_IAdv = Lang.where_IAdv;
when_IAdv = Lang.when_IAdv;
how_IAdv = Lang.how_IAdv;
far_Adv = Lang.far_Adv ;
-- not : Adv ; -- ?
-- Conjunctions
and_Conj = Lang.and_Conj ;
-- Prepositions
in_Prep = Lang.in_Prep ;
with_Prep = Lang.with_Prep ;
-- Numerals
one_Det = Lang.NumNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01)))) ;
two_Num = Lang.NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2))))) ;
three_Num = Lang.NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n3))))) ;
four_Num = Lang.NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n4))))) ;
five_Num = Lang.NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))) ;
-- Adjectives
bad_A = Lang.bad_A ;
big_A = Lang.big_A ;
black_A = Lang.black_A ;
cold_A = Lang.cold_A ;
correct_A = Lang.correct_A ;
dirty_A = Lang.dirty_A ;
dry_A = Lang.dry_A ;
dull_A = Lang.dull_A ;
full_A = Lang.full_A ;
good_A = Lang.good_A ;
green_A = Lang.green_A ;
heavy_A = Lang.heavy_A ;
long_A = Lang.long_A ;
narrow_A = Lang.narrow_A ;
near_A = Lang.near_A ;
new_A = Lang.new_A ;
old_A = Lang.old_A ;
---- other_A = Lang.other_A ;
red_A = Lang.red_A ;
rotten_A = Lang.rotten_A ;
round_A = Lang.round_A ;
sharp_A = Lang.sharp_A ;
short_A = Lang.short_A ;
small_A = Lang.small_A ;
smooth_A = Lang.smooth_A ;
straight_A = Lang.straight_A ;
thick_A = Lang.thick_A ;
thin_A = Lang.thin_A ;
warm_A = Lang.warm_A ;
wet_A = Lang.wet_A ;
white_A = Lang.white_A ;
wide_A = Lang.wide_A ;
yellow_A = Lang.yellow_A ;
-- Nouns
animal_N = Lang.animal_N ;
ashes_N = Lang.ashes_N ;
back_N = Lang.back_N ;
bark_N = Lang.bark_N ;
belly_N = Lang.belly_N ;
bird_N = Lang.bird_N;
blood_N = Lang.blood_N ;
bone_N = Lang.bone_N ;
breast_N = Lang.breast_N ;
child_N = Lang.child_N ;
cloud_N = Lang.cloud_N ;
day_N = Lang.day_N ;
dog_N = Lang.dog_N ;
dust_N = Lang.dust_N ;
ear_N = Lang.ear_N ;
earth_N = Lang.earth_N ;
egg_N = Lang.egg_N ;
eye_N = Lang.eye_N ;
fat_N = Lang.fat_N ;
feather_N = Lang.feather_N ;
fingernail_N = Lang.fingernail_N ;
fire_N = Lang.fire_N ;
fish_N = Lang.fish_N ;
flower_N = Lang.flower_N ;
fog_N = Lang.fog_N ;
foot_N = Lang.foot_N ;
forest_N = Lang.forest_N ;
fruit_N = Lang.fruit_N ;
grass_N = Lang.grass_N ;
guts_N = Lang.guts_N ;
hair_N = Lang.hair_N ;
hand_N = Lang.hand_N ;
head_N = Lang.head_N ;
heart_N = Lang.heart_N ;
horn_N = Lang.horn_N ;
husband_N = Lang.man_N ; --- aviomies
ice_N = Lang.ice_N ;
knee_N = Lang.knee_N ;
lake_N = Lang.lake_N ;
leaf_N = Lang.leaf_N ;
leg_N = Lang.leg_N ;
liver_N = Lang.liver_N ;
louse_N = Lang.louse_N ;
man_N = Lang.man_N ;
meat_N = Lang.meat_N ;
moon_N = Lang.moon_N ;
---- mother_N = Lang.mother_N ;
mountain_N = Lang.mountain_N ;
mouth_N = Lang.mouth_N ;
name_N = Lang.name_N ;
neck_N = Lang.neck_N ;
night_N = Lang.night_N ;
nose_N = Lang.nose_N ;
person_N = Lang.person_N ;
rain_N = Lang.rain_N ;
river_N = Lang.river_N ;
road_N = Lang.road_N ;
root_N = Lang.root_N ;
rope_N = Lang.rope_N ;
salt_N = Lang.salt_N ;
sand_N = Lang.sand_N ;
sea_N = Lang.sea_N ;
seed_N = Lang.seed_N ;
skin_N = Lang.skin_N ;
sky_N = Lang.sky_N ;
smoke_N = Lang.smoke_N ;
snake_N = Lang.snake_N ;
snow_N = Lang.snow_N ;
star_N = Lang.star_N ;
stick_N = Lang.stick_N ;
stone_N = Lang.stone_N ;
sun_N = Lang.sun_N ;
tail_N = Lang.tail_N ;
tongue_N = Lang.tongue_N ;
tooth_N = Lang.tooth_N ;
tree_N = Lang.tree_N ;
water_N = Lang.water_N ;
wife_N = Lang.wife_N ;
wind_N = Lang.wind_N ;
wing_N = Lang.wing_N ;
woman_N = Lang.woman_N ;
worm_N = Lang.worm_N ;
year_N = Lang.year_N ;
-- Verbs
bite_V2 = Lang.bite_V2 ;
blow_V = Lang.blow_V ;
breathe_V = Lang.breathe_V ;
burn_V = Lang.burn_V ;
come_V = Lang.come_V ;
count_V2 = Lang.count_V2 ;
cut_V2 = Lang.cut_V2 ;
die_V = Lang.die_V ;
dig_V = Lang.dig_V ;
drink_V2 = Lang.drink_V2 ;
eat_V2 = Lang.eat_V2 ;
fall_V = Lang.fall_V ;
fear_V2 = Lang.fear_V2 ;
fight_V2 = Lang.fight_V2 ;
float_V = Lang.float_V ;
flow_V = Lang.flow_V ;
fly_V = Lang.fly_V ;
freeze_V = Lang.freeze_V ;
give_V3 = Lang.give_V3 ;
hear_V2 = Lang.hear_V2 ;
hit_V2 = Lang.hit_V2 ;
hold_V2 = Lang.hold_V2 ;
hunt_V2 = Lang.hunt_V2 ;
kill_V2 = Lang.kill_V2 ;
know_V2 = Lang.know_V2 ;
laugh_V = Lang.laugh_V ;
lie_V = Lang.lie_V ;
live_V = Lang.live_V ;
play_V = Lang. play_V2 ;
pull_V2 = Lang.pull_V2 ;
push_V2 = Lang.push_V2 ;
rub_V2 = Lang.rub_V2 ;
say_V = Lang.say_VS ;
scratch_V2 = Lang.scratch_V2 ;
see_V2 = Lang.see_V2 ;
sew_V = Lang.sew_V ;
sing_V = Lang.sing_V ;
sit_V = Lang.sit_V ;
sleep_V = Lang.sleep_V ;
smell_V = Lang.smell_V ;
spit_V = Lang.spit_V ;
split_V2 = Lang.split_V2 ;
squeeze_V2 = Lang.squeeze_V2 ;
stab_V2 = Lang.stab_V2 ;
stand_V = Lang.stand_V ;
suck_V2 = Lang.suck_V2 ;
swell_V = Lang.swell_V ;
swim_V = Lang.swim_V ;
think_V = Lang.think_V ;
throw_V2 = Lang.throw_V2 ;
tie_V2 = Lang.tie_V2 ;
turn_V = Lang.turn_V ;
vomit_V = Lang.vomit_V ;
walk_V = Lang.walk_V ;
wash_V2 = Lang.wash_V2 ;
wipe_V2 = Lang.wipe_V2 ;
}

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshIta of Swadesh = CatIta ** SwadeshI with
(Lang = LangIta) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshNor of Swadesh = CatNor ** SwadeshI with
(Lang = LangNor) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshRus of Swadesh = CatRus ** SwadeshI with
(Lang = LangRus) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshSpa of Swadesh = CatSpa ** SwadeshI with
(Lang = LangSpa) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:present:prelude
concrete SwadeshSwe of Swadesh = CatSwe ** SwadeshI with
(Lang = LangSwe) ;

View File

@@ -445,6 +445,7 @@ allCommands enc pgf = Map.fromList [
let out = maybe "no such transliteration" characterTable $ transliteration t
return $ fromString out,
options = [
("arabic", "Arabic"),
("devanagari","Devanagari"),
("thai", "Thai")
]
@@ -584,6 +585,7 @@ stringOpOptions = [
("bind","bind tokens separated by Prelude.BIND, i.e. &+"),
("chars","lexer that makes every non-space character a token"),
("from_cp1251","decode from cp1251 (Cyrillic used in Bulgarian resource)"),
("from_arabic","from unicode to GF Arabic transliteration"),
("from_devanagari","from unicode to GF Devanagari transliteration"),
("from_thai","from unicode to GF Thai transliteration"),
("from_utf8","decode from utf8"),
@@ -591,6 +593,7 @@ stringOpOptions = [
("lexcode","code-like lexer"),
("lexmixed","mixture of text and code (code between $...$)"),
("to_cp1251","encode to cp1251 (Cyrillic used in Bulgarian resource)"),
("to_arabic","from GF Arabic transliteration to unicode"),
("to_devanagari","from GF Devanagari transliteration to unicode"),
("to_html","wrap in a html file with linebreaks"),
("to_thai","from GF Thai transliteration to unicode"),

View File

@@ -25,9 +25,10 @@ transliterate s = case s of
transliteration :: String -> Maybe Transliteration
transliteration s = case s of
"arabic" -> Just transArabic
"devanagari" -> Just transDevanagari
"thai" -> Just transThai
"urdu" -> Just transUrdu
---- "urdu" -> Just transUrdu
_ -> Nothing
characterTable :: Transliteration -> String
@@ -101,5 +102,15 @@ allTransUrduHindi = words $
transUrdu :: Transliteration
transUrdu =
(mkTransliteration allTransUrduHindi allCodes){invisible_chars = ["a"]} where
allCodes = [0x0901 .. 0x094c]
allCodes = [0x0901 .. 0x094c] ---- TODO: this is devanagari
transArabic :: Transliteration
transArabic = mkTransliteration allTrans allCodes where
allTrans = words $
" V A: A? w? A- y? A b t. t v g H K d " ++ -- 0621 - 062f
"W r z s C S D T Z c G " ++ -- 0630 - 063a
" f q k l m n h w y. y a. u. i. a u " ++ -- 0641 - 064f
"i v2 o a: V+ V- i: a+" -- 0650 - 0657
allCodes = [0x0621..0x062f] ++ [0x0630..0x063a] ++
[0x0641..0x064f] ++ [0x0650..0x0657]