diff --git a/lib/src/api/Constructors.gf b/lib/src/api/Constructors.gf index e6012e6ee..ebc062337 100644 --- a/lib/src/api/Constructors.gf +++ b/lib/src/api/Constructors.gf @@ -91,13 +91,29 @@ incomplete resource Constructors = open Grammar in { --% mkText : Phr -> Text -- But she sleeps. --% = \x -> TFullStop x TEmpty ; --% +-- A text can also be directly built from utterances. --- A text can also be directly built from utterances, which in turn can --- be directly built from sentences, present-tense clauses, questions, or + mkText : Utt -> (Punct) -> (Text) -> Text -- Does she sleep? Yes. --: + = \u,punct,text -> let phr = (PhrUtt NoPConj u NoVoc) in case punct of { --% + PFullStop => TFullStop phr text ; --% + PExclMark => TExclMark phr text ; --% + PQuestMark => TQuestMark phr text --% + } ; --% + mkText : Utt -> Text -> Text -- But she sleeps. Yes! --% + = \u,t -> TFullStop (PhrUtt NoPConj u NoVoc) t ; --% + mkText : Utt -> Punct -> Text --% + = \u,punct -> let phr = (PhrUtt NoPConj u NoVoc) in case punct of { --% + PFullStop => TFullStop phr TEmpty ; --% + PExclMark => TExclMark phr TEmpty ; --% + PQuestMark => TQuestMark phr TEmpty --% + } ; --% + mkText : Utt -> Text -- But she sleeps. --% + = \u -> TFullStop (PhrUtt NoPConj u NoVoc) TEmpty ; --% + +-- Utterances in turn can +-- be directly given as sentences, present-tense clauses, questions, or -- positive imperatives. - mkText : Utt -> Text -- Yes. - = \u -> TFullStop (PhrUtt NoPConj u NoVoc) TEmpty ; --% mkText : S -> Text -- She slept. = \s -> TFullStop (PhrUtt NoPConj (UttS s) NoVoc) TEmpty ; --% mkText : Cl -> Text -- She sleeps. diff --git a/lib/src/api/libraryBrowser/LibraryBrowserAPI.gf b/lib/src/api/libraryBrowser/LibraryBrowserAPI.gf index 9d6db3d85..5187329b7 100644 --- a/lib/src/api/libraryBrowser/LibraryBrowserAPI.gf +++ b/lib/src/api/libraryBrowser/LibraryBrowserAPI.gf @@ -154,7 +154,7 @@ lin PNeg = mkTerm "negativePol" ; lin PPartNP np_1 v2_2 = mkTerm "mkNP" np_1 v2_2 ; lin PPos = mkTerm (hide "positivePol") ; lin PassV2 v2_1 = mkTerm "passiveVP" v2_1 ; -lin PhrUtt pconj_1 utt_2 voc_3 = mkTerm "mkPhr" pconj_1 utt_2 voc_3 ; +lin PhrUtt pconj_1 utt_2 voc_3 = mkFlat (mkTerm "mkPhr" pconj_1 utt_2 voc_3) ; lin PositA a_1 = mkFlat (mkTerm "mkAP" a_1) ; lin PositAdAAdj a_1 = mkTerm "mkAdA" a_1 ; lin PositAdvAdj a_1 = mkTerm "mkAdv" a_1 ; @@ -197,13 +197,13 @@ lin SlashVS np_1 vs_2 sslash_3 = mkTerm "mkClSlash" np_1 vs_2 sslash_3 ; lin SlashVV vv_1 vpslash_2 = mkTerm "mkVPSlash" vv_1 vpslash_2 ; lin SubjS subj_1 s_2 = mkTerm "mkAdv" subj_1 s_2 ; lin TEmpty = mkTerm (hide "emptyText") ; -lin TExclMark phr_1 text_2 = mkTerm "mkText" phr_1 (mkTerm "exclMarkPunct") text_2 ; -lin TFullStop phr_1 text_2 = mkTerm "mkText" phr_1 text_2 ; +lin TExclMark phr_1 text_2 = mkTerm "mkText" (flatIfTerm phr_1) (mkTerm "exclMarkPunct") text_2 ; +lin TFullStop phr_1 text_2 = mkTerm "mkText" (flatIfTerm phr_1) text_2 ; lin TCond = mkTerm "conditionalTense" ; lin TFut = mkTerm "futureTense" ; lin TPast = mkTerm "pastTense" ; lin TPres = mkTerm (hide "presentTense") ; -lin TQuestMark phr_1 text_2 = mkTerm "mkText" phr_1 (mkTerm "questMarkPunct") text_2 ; +lin TQuestMark phr_1 text_2 = mkTerm "mkText" (flatIfTerm phr_1) (mkTerm "questMarkPunct") text_2 ; lin TTAnt tense_1 ant_2 = mkTerm "mkTense" tense_1 ant_2 ; --lin Use2N3 n3_1 = mkTerm "mkN2" n3_1 ; --lin Use3N3 n3_1 = mkTerm "mkN2" n3_1 ; @@ -231,8 +231,8 @@ lin UttImpPol pol_1 imp_2 = mkTerm "mkUtt" (mkTerm "politeImpForm") pol_1 imp_2 lin UttImpSg pol_1 imp_2 = mkTerm "mkUtt" pol_1 imp_2 ; --lin UttInterj interj_1 = mkTerm "mkUtt" interj_1 ; lin UttNP np_1 = mkTerm "mkUtt" np_1 ; -lin UttQS qs_1 = mkTerm "mkUtt" qs_1 ; -lin UttS s_1 = mkTerm "mkUtt" s_1 ; +lin UttQS qs_1 = mkFlat (mkTerm "mkUtt" qs_1) ; +lin UttS s_1 = mkFlat (mkTerm "mkUtt" s_1) ; lin UttVP vp_1 = mkTerm "mkUtt" vp_1 ; lin VocNP np_1 = mkTerm "mkVoc" np_1 ;