1
0
forked from GitHub/gf-rgl

getting started on Scots

This commit is contained in:
Krasimir Angelov
2025-09-07 08:19:10 +02:00
parent 141074bec3
commit 35a6456524
30 changed files with 310 additions and 0 deletions

View File

@@ -47,6 +47,7 @@ Slv,Slovenian,slovenian,,,,,n,n,,n,n
Snd,Sindhi,sindhi,,,,,,,,y,n
Spa,Spanish,spanish,Romance,,y,,,,y,y,y
Sqi,Albanian,albanian,,,,y,n,n,n,y,n
Sco,Scots,scots,,,y,,,,,y,n
Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n
Swe,Swedish,swedish,Scand,,y,,,,y,y,y
Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
47 Snd Sindhi sindhi y n
48 Spa Spanish spanish Romance y y y y
49 Sqi Albanian albanian y n n n y n
50 Sco Scots scots y y n
51 Swa Swahili swahili Bantu y n n n n n
52 Swe Swedish swedish Scand y y y y
53 Tam Tamil tamil n n n n n n n n n

15
src/api/CombinatorsSco.gf Normal file
View File

@@ -0,0 +1,15 @@
--# -path=.:alltenses:prelude
resource CombinatorsSco = Combinators - [ appCN, appCNc ] with
(Cat = CatSco),
(Structural = StructuralSco),
(Noun = NounSco),
(Constructors = ConstructorsSco) **
{
oper
appCN : CN -> NP -> NP
= \cn,x -> mkNP the_Art (PossNP cn x) ;
appCNc : CN -> [NP] -> NP
= \cn,xs -> let np : NP = mkNP and_Conj xs
in mkNP the_Art (PossNP cn np) ;
}

View File

@@ -0,0 +1,3 @@
--# -path=.:alltenses:prelude
resource ConstructorsSco = Constructors with (Grammar = GrammarSco) ;

5
src/api/SymbolicSco.gf Normal file
View File

@@ -0,0 +1,5 @@
--# -path=.:../english:../common:../abstract:../prelude
resource SymbolicSco = Symbolic with
(Symbol = SymbolSco),
(Grammar = GrammarSco) ;

5
src/api/SyntaxSco.gf Normal file
View File

@@ -0,0 +1,5 @@
--# -path=.:alltenses:prelude
instance SyntaxSco of Syntax =
ConstructorsSco, CatSco, StructuralSco, CombinatorsSco ;

22
src/api/TrySco.gf Normal file
View File

@@ -0,0 +1,22 @@
--# -path=.:../english:../common:../abstract:../prelude
resource TrySco = SyntaxSco-[mkAdN], LexiconSco, ParadigmsSco - [mkAdv,mkAdN,mkOrd,mkQuant,mkVoc] **
open (P = ParadigmsEng) in {
oper
mkAdv = overload SyntaxSco {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
mkAdN = overload {
mkAdN : CAdv -> AdN = SyntaxSco.mkAdN ;
mkAdN : Str -> AdN = P.mkAdN ;
} ;
mkOrd = overload SyntaxSco {
mkOrd : Str -> Ord = P.mkOrd ;
} ;
}

View File

@@ -0,0 +1,2 @@
concrete AdjectiveSco of Adjective = AdjectiveEng ** {
}

2
src/scots/AdverbSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete AdverbSco of Adverb = AdverbEng ** {
}

7
src/scots/AllSco.gf Normal file
View File

@@ -0,0 +1,7 @@
--# -path=.:../abstract:../common:../api
concrete AllSco of AllScoAbs =
LangSco,
ExtendSco
**
{} ;

2
src/scots/CatSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete CatSco of Cat = CatEng ** {
}

View File

@@ -0,0 +1,2 @@
concrete ConjunctionSco of Conjunction = ConjunctionEng ** {
}

View File

@@ -0,0 +1,2 @@
concrete ConstructionSco of Construction = ConstructionEng ** {
}

View File

@@ -0,0 +1,3 @@
--# -path=.:../abstract:../common
concrete DocumentationSco of Documentation = DocumentationEng ** {
}

4
src/scots/ExtendSco.gf Normal file
View File

@@ -0,0 +1,4 @@
--# -path=.:../common:../abstract
concrete ExtendSco of Extend = ExtendEng ** {
}

28
src/scots/GrammarSco.gf Normal file
View File

@@ -0,0 +1,28 @@
--# -path=.:../abstract:../common:prelude
concrete GrammarSco of Grammar =
NounSco,
VerbSco,
AdjectiveSco,
AdverbSco,
NumeralSco,
SentenceSco,
QuestionSco,
RelativeSco,
ConjunctionSco,
PhraseSco,
TextX - [Pol,PPos,PNeg,SC,CAdv],
StructuralSco,
IdiomSco,
TenseX - [Pol,PPos,PNeg,SC,CAdv],
NamesSco
** open ResSco, Prelude in {
flags startcat = Phr ; unlexer = text ; lexer = text ;
lin
PPos = {s = [] ; p = CPos} ;
PNeg = {s = [] ; p = CNeg True} ; -- contracted: don't
} ;

2
src/scots/IdiomSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete IdiomSco of Idiom = IdiomEng ** {
}

10
src/scots/LangSco.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract:../common:../api:../prelude
concrete LangSco of Lang =
GrammarSco,
LexiconSco
,ConstructionSco
,DocumentationSco --# notpresent
** {
} ;

2
src/scots/LexiconSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete LexiconSco of Lexicon = LexiconEng ** open ParadigmsSco in {
} ;

2
src/scots/NamesSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete NamesSco of Names = NamesEng ** {
}

16
src/scots/NounSco.gf Normal file
View File

@@ -0,0 +1,16 @@
concrete NounSco of Noun = NounEng - [IndefArt] ** open Prelude, ResSco in {
lin IndefArt = {
s = \\hasCard,n => case <n,hasCard> of {
<Sg,False> => "a" ;
_ => []
} ;
sp = \\g,hasCard,n => case <n,hasCard> of {
<Sg,False> => table {NCase Gen => "ane's"; _ => "ane" };
<Pl,False> => table {NCase Gen => "anes'"; _ => "anes" } ;
_ => \\c => []
} ;
isDef = False
} ;
}

156
src/scots/NumeralSco.gf Normal file
View File

@@ -0,0 +1,156 @@
concrete NumeralSco of Numeral = CatSco [Numeral,Digits,Decimal] ** open Prelude, ResSco in {
lincat
Digit = {s : DForm => CardOrd => Case => Str} ;
Sub10 = {s : DForm => CardOrd => Case => Str ; n : Number} ;
Sub100 = {s : CardOrd => Case => Str ; n : Number} ;
Sub1000 = {s : Bool => CardOrd => Case => Str ; n : Number} ;
Sub1000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ;
Sub1000000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ;
Sub1000000000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ;
lin num x = x ;
lin n2 = let two = mkNum "twa" "twal" "twintie" "saicont" in
{s = \\f,o => case <f,o> of {
<teen,NOrd> => regGenitiveS "twalt" ;
_ => two.s ! f ! o
}
} ;
lin n3 = mkNum "three" "thirteen" "thirty" "third" ;
lin n4 = mkNum "fower" "fourteen" "fourtie" "fourth" ;
lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;
lin n6 = regNum "sax" ;
lin n7 = regNum "seiven" ;
lin n8 = mkNum "echt" "echteen" "echtie" "echt" ;
lin n9 = mkNum "nine" "nineteen" "ninetie" "nint" ;
lin pot01 = mkNum "ane" "eleivin" "ten" "first" ** {n = Sg} ;
lin pot0 d = d ** {n = Pl} ;
lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
lin pot110 = regCardOrd "ten" ** {n = Pl} ;
lin pot111 = regCardOrd "eleven" ** {n = Pl} ;
lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;
lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
lin pot1plus d e = {
s = \\o,c => d.s ! ten ! NCard ! Nom ++ BIND ++ "-" ++ BIND ++ e.s ! unit ! o ! c ; n = Pl} ;
lin pot1as2 n = {s = \\_ => n.s; n=n.n} ;
lin pot21 = {
s = \\d,o,c => case d of {True => []; False => "a"} ++
(regCardOrd "hunner").s ! o ! c;
n = Pl
} ;
lin pot2 d = {s = \\_,o,c => d.s ! unit ! NCard ! Nom ++ mkCard o "hundred" ! c} ** {n = Pl} ;
lin pot2plus d e = {
s = \\_,o,c => d.s ! unit ! NCard ! Nom ++ "hundred" ++ "and" ++ e.s ! o ! c ; n = Pl} ;
lin pot2as3 n = n ;
lin pot31 = {
s = \\d,o,c => case d of {True => []; False => "a"} ++
(regCardOrd "thousand").s ! o ! c;
n = Pl
} ;
lin pot3 n = {
s = \\d,o,c => n.s ! d ! NCard ! Nom ++ mkCard o "thoosand" ! c ; n = Pl} ;
lin pot3plus n m = {
s = \\d,o,c => n.s ! d ! NCard ! Nom ++ "thoosand" ++ m.s ! False ! o ! c; n = Pl} ;
lin pot3as4 n = n ;
lin pot3decimal f = {
s = \\d,o,c => f.s ! NCard ! Nom ++ mkCard o "thoosand" ! c ; n = Pl} ;
lin pot41 = {
s = \\d,o,c => case d of {True => []; False => "a"} ++
(regCardOrd "million").s ! o ! c;
n = Pl
} ;
lin pot4 n = {
s = \\d,o,c => n.s ! d ! NCard ! Nom ++ pot41.s ! True ! o ! c ;
n = Pl
} ;
lin pot4plus n1 n2 = {
s = \\d,o,c => n1.s ! d ! NCard ! Nom ++ pot41.s ! True ! NCard ! Nom ++ "and" ++ n2.s ! True ! o ! c;
n = Pl
} ;
lin pot4as5 n = n ;
lin pot4decimal f = {
s = \\d,o,c => f.s ! NCard ! Nom ++ pot41.s ! True ! o ! c ; n = Pl} ;
lin pot51 = {
s = \\d,o,c => case d of {True => []; False => "a"} ++
(regCardOrd "billion").s ! o ! c;
n = Pl
} ;
lin pot5 n = {
s = \\d,o,c => n.s ! d ! NCard ! Nom ++ pot51.s ! True ! o ! c ;
n = Pl
} ;
lin pot5plus n1 n2 = {
s = \\d,o,c => n1.s ! d ! NCard ! Nom ++ pot51.s ! True ! NCard ! Nom ++ "and" ++ n2.s ! True ! o ! c;
n = Pl
} ;
lin pot5decimal f = {
s = \\d,o,c => f.s ! NCard ! Nom ++ pot51.s ! True ! o ! c ; n = Pl} ;
-- numerals as sequences of digits
lincat
Dig = TDigit ;
lin
IDig d = d ** {tail = T1} ;
IIDig d i = {
s = \\o,c => d.s ! NCard ! Nom ++ commaIf i.tail ++ i.s ! o ! c ;
n = Pl ;
tail = inc i.tail
} ;
D_0 = mkDig "0" ;
D_1 = mk3Dig "1" "1st" Sg ;
D_2 = mk2Dig "2" "2nd" ;
D_3 = mk2Dig "3" "3rd" ;
D_4 = mkDig "4" ;
D_5 = mkDig "5" ;
D_6 = mkDig "6" ;
D_7 = mkDig "7" ;
D_8 = mkDig "8" ;
D_9 = mkDig "9" ;
lin PosDecimal d = d ** {hasDot=False} ;
NegDecimal d = {s=\\o,c=>"-" ++ BIND ++ d.s ! o ! c; hasDot=False; n = Pl} ;
IFrac d i = {
s=\\o,c=>d.s ! NCard ! Nom ++
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
i.s ! o ! c ;
hasDot=True;
n = Pl
} ;
oper
commaIf : DTail -> Str = \t -> case t of {
T3 => BIND ++ "," ++ BIND ;
_ => BIND
} ;
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ;
mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {
s = table {NCard => regGenitiveS c ; NOrd => regGenitiveS o} ;
n = n
} ;
TDigit = {
n : Number ;
s : CardOrd => Case => Str
} ;
}

View File

@@ -0,0 +1,2 @@
resource ParadigmsSco = ParadigmsEng ** {
} ;

2
src/scots/PhraseSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete PhraseSco of Phrase = PhraseEng ** {
}

2
src/scots/QuestionSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete QuestionSco of Question = QuestionEng ** {
}

2
src/scots/RelativeSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete RelativeSco of Relative = RelativeEng ** {
}

2
src/scots/ResSco.gf Normal file
View File

@@ -0,0 +1,2 @@
resource ResSco = ResEng ** {
}

3
src/scots/SentenceSco.gf Normal file
View File

@@ -0,0 +1,3 @@
concrete SentenceSco of Sentence = SentenceEng ** {
}

View File

@@ -0,0 +1,2 @@
concrete StructuralSco of Structural = StructuralEng ** {
}

2
src/scots/SymbolSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete SymbolSco of Symbol = SymbolEng ** {
}

2
src/scots/VerbSco.gf Normal file
View File

@@ -0,0 +1,2 @@
concrete VerbSco of Verb = VerbEng ** {
}