diff --git a/src/english/NounEng.gf b/src/english/NounEng.gf index 23c10888f..7477bcdb5 100644 --- a/src/english/NounEng.gf +++ b/src/english/NounEng.gf @@ -22,7 +22,7 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { } ; RelNP np rs = { - s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ++ finalComma ; + s = \\c => np.s ! c ++ frontComma ++ rs.s ! np.a ++ finalComma ; a = np.a } ; @@ -32,7 +32,7 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { } ; ExtAdvNP np adv = { - s = \\c => np.s ! c ++ "," ++ adv.s ++ finalComma; + s = \\c => np.s ! c ++ frontComma ++ adv.s ++ finalComma; a = np.a } ; diff --git a/src/english/NumeralEng.gf b/src/english/NumeralEng.gf index fbc28717e..79f9bd97d 100644 --- a/src/english/NumeralEng.gf +++ b/src/english/NumeralEng.gf @@ -69,7 +69,7 @@ lin pot3plus n m = { oper commaIf : DTail -> Str = \t -> case t of { - T3 => "," ; + T3 => frontComma ; _ => [] } ; diff --git a/src/english/ParseEng.gf b/src/english/ParseEng.gf index ceb763d51..28f05b37f 100644 --- a/src/english/ParseEng.gf +++ b/src/english/ParseEng.gf @@ -90,8 +90,8 @@ lin compl = vp.s2 ! np.a in case o of { - ODir => compl ++ "," ++ np.s ! npNom ++ verb.aux ++ vp.ad ++ verb.fin ++ verb.adv ++ verb.inf ; - OQuest => verb.aux ++ compl ++ "," ++ np.s ! npNom ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf + ODir => compl ++ frontComma ++ np.s ! npNom ++ verb.aux ++ vp.ad ++ verb.fin ++ verb.adv ++ verb.inf ; + OQuest => verb.aux ++ compl ++ frontComma ++ np.s ! npNom ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf } } ; @@ -102,7 +102,7 @@ lin compl = vp.s2 ! np.a in case o of { - ODir => compl ++ "," ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ np.s ! npNom ; + ODir => compl ++ frontComma ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ np.s ! npNom ; OQuest => verb.aux ++ compl ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ np.s ! npNom } } ; @@ -137,7 +137,7 @@ lin } ; ApposNP np1 np2 = { - s = \\c => np1.s ! c ++ "," ++ np2.s ! npNom ++ finalComma ; + s = \\c => np1.s ! c ++ frontComma ++ np2.s ! npNom ++ finalComma ; a = np1.a } ; diff --git a/src/english/PhraseEng.gf b/src/english/PhraseEng.gf index 26b2e030e..4f32db8e1 100644 --- a/src/english/PhraseEng.gf +++ b/src/english/PhraseEng.gf @@ -23,6 +23,6 @@ concrete PhraseEng of Phrase = CatEng ** open Prelude, ResEng in { PConjConj conj = {s = conj.s2} ; --- NoVoc = {s = []} ; - VocNP np = {s = "," ++ np.s ! npNom} ; + VocNP np = {s = frontComma ++ np.s ! npNom} ; } diff --git a/src/english/ResEng.gf b/src/english/ResEng.gf index efbe6b22d..d2868c9de 100644 --- a/src/english/ResEng.gf +++ b/src/english/ResEng.gf @@ -543,6 +543,7 @@ resource ResEng = ParamX ** open Prelude in { } } ; - finalComma : Str = pre {"," | "." => []; "" => ","; _ => []} ; + finalComma : Str = pre {"," | "." => []; "" => SOFT_BIND ++ ","; _ => []} ; + frontComma : Str = SOFT_BIND ++ "," ; } diff --git a/src/english/SentenceEng.gf b/src/english/SentenceEng.gf index 7270b9780..625c3295b 100644 --- a/src/english/SentenceEng.gf +++ b/src/english/SentenceEng.gf @@ -57,11 +57,11 @@ concrete SentenceEng of Sentence = CatEng ** open Prelude, ResEng in { } ; AdvS a s = {s = a.s ++ s.s} ; - ExtAdvS a s = {s = a.s ++ "," ++ s.s} ; + ExtAdvS a s = {s = a.s ++ frontComma ++ s.s} ; - SSubjS a s b = {s = a.s ++ "," ++ s.s ++ b.s} ; + SSubjS a s b = {s = a.s ++ frontComma ++ s.s ++ b.s} ; - RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ; + RelS s r = {s = s.s ++ frontComma ++ r.s ! agrP3 Sg} ; oper ctr : CPolarity -> CPolarity = \x -> x ; diff --git a/src/english/SymbolEng.gf b/src/english/SymbolEng.gf index 1a1dad265..b4f549b00 100644 --- a/src/english/SymbolEng.gf +++ b/src/english/SymbolEng.gf @@ -33,7 +33,7 @@ lin MkSymb s = s ; BaseSymb = infixSS "and" ; - ConsSymb = infixSS "," ; + ConsSymb = infixSS frontComma ; oper -- Note: this results in a space before 's, but there's diff --git a/src/english/VerbEng.gf b/src/english/VerbEng.gf index 435304baf..33275ca5d 100644 --- a/src/english/VerbEng.gf +++ b/src/english/VerbEng.gf @@ -39,7 +39,7 @@ concrete VerbEng of Verb = CatEng ** open ResEng, Prelude in { UseComp comp = insertObj comp.s (predAux auxBe) ; AdvVP vp adv = insertObj (\\_ => adv.s) vp ; - ExtAdvVP vp adv = insertObj (\\_ => "," ++ adv.s ++ finalComma) vp ; + ExtAdvVP vp adv = insertObj (\\_ => frontComma ++ adv.s ++ finalComma) vp ; AdVVP adv vp = insertAdV adv.s vp ; AdvVPSlash vp adv = insertObj (\\_ => adv.s) vp ** {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle} ; diff --git a/src/prelude/Predef.gf b/src/prelude/Predef.gf index 10af6e3f2..6e1ab7cf2 100644 --- a/src/prelude/Predef.gf +++ b/src/prelude/Predef.gf @@ -38,5 +38,6 @@ resource Predef = { -- map all strings in a data structure; experimental --- oper nonExist : Str = variants {} ; -- a placeholder for non-existant morphological forms oper BIND : Str = variants {} ; -- a token for gluing + oper SOFT_BIND : Str = variants {} ; -- a token for soft gluing } ; diff --git a/src/prelude/Prelude.gf b/src/prelude/Prelude.gf index fd8ac6aef..b8164efe8 100644 --- a/src/prelude/Prelude.gf +++ b/src/prelude/Prelude.gf @@ -2,7 +2,7 @@ -- This file defines some prelude facilities usable in all grammars. -resource Prelude = open (Predef=Predef) in { +resource Prelude = Predef[nonExist, BIND, SOFT_BIND] ** open (Predef=Predef) in { oper @@ -33,10 +33,6 @@ oper --2 Optional elements --- Missing form. - - nonExist : Str = Predef.nonExist; - -- Optional string with preference on the string vs. empty. optStr : Str -> Str = \s -> variants {s ; []} ; @@ -114,7 +110,6 @@ oper -- These should be hidden, and never changed since they are hardcoded in (un)lexers - BIND : Str = Predef.BIND; PARA : Str = "&-" ; CAPIT : Str = "&|" ;