From 4c26fc80eef998490149b4899ed62ad339d60a7c Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 11 Feb 2014 15:42:17 +0000 Subject: [PATCH] module Markup for marking up subphrases with html tags (or other things). Implemented for Eng and Swe so far. --- lib/src/abstract/Lang.gf | 1 + lib/src/abstract/MarkHTML.gf | 25 +++++++++++++++++++++ lib/src/abstract/Markup.gf | 20 +++++++++++++++++ lib/src/common/MarkHTMLX.gf | 35 +++++++++++++++++++++++++++++ lib/src/english/LangEng.gf | 1 + lib/src/english/MarkupEng.gf | 15 +++++++++++++ lib/src/prelude/HTML.gf | 1 + lib/src/scandinavian/MarkupScand.gf | 13 +++++++++++ lib/src/swedish/LangSwe.gf | 1 + lib/src/swedish/MarkupSwe.gf | 3 +++ 10 files changed, 115 insertions(+) create mode 100644 lib/src/abstract/MarkHTML.gf create mode 100644 lib/src/abstract/Markup.gf create mode 100644 lib/src/common/MarkHTMLX.gf create mode 100644 lib/src/english/MarkupEng.gf create mode 100644 lib/src/scandinavian/MarkupScand.gf create mode 100644 lib/src/swedish/MarkupSwe.gf diff --git a/lib/src/abstract/Lang.gf b/lib/src/abstract/Lang.gf index 8498984ed..1a1866e98 100644 --- a/lib/src/abstract/Lang.gf +++ b/lib/src/abstract/Lang.gf @@ -10,6 +10,7 @@ abstract Lang = Lexicon ,Construction --- could be compiled here, but not in concretes, as they call Syntax and Grammar ,Documentation + ,Markup ** { flags startcat=Phr ; } ; diff --git a/lib/src/abstract/MarkHTML.gf b/lib/src/abstract/MarkHTML.gf new file mode 100644 index 000000000..791281cb0 --- /dev/null +++ b/lib/src/abstract/MarkHTML.gf @@ -0,0 +1,25 @@ +abstract MarkHTML = { + +-- HTML markup to be used in Markup.gf. Will have a common implementation for all languages. +-- AR 11/2/2014 + +cat + Mark ; + +fun + i_Mark : Mark ; + b_Mark : Mark ; + ul_Mark : Mark ; + li_Mark : Mark ; + h1_Mark : Mark ; + h2_Mark : Mark ; + table_Mark : Mark ; + tr_Mark : Mark ; + td_Mark : Mark ; + p_Mark : Mark ; + + a_Mark : String -> Mark ; + + stringMark : String -> String -> Mark ; -- make your own markup + +} \ No newline at end of file diff --git a/lib/src/abstract/Markup.gf b/lib/src/abstract/Markup.gf new file mode 100644 index 000000000..9ef55b336 --- /dev/null +++ b/lib/src/abstract/Markup.gf @@ -0,0 +1,20 @@ +abstract Markup = Cat, MarkHTML ** { + +-- Adding markup to sentences and their parts. By default both start and end tags. +-- For instance +-- +-- MarkupNP boldMarkup everything_NP ==> everything +-- +-- AR 11/2/2014 + +fun + MarkupCN : Mark -> CN -> CN ; + MarkupNP : Mark -> NP -> NP ; + MarkupAP : Mark -> AP -> AP ; + MarkupAdv : Mark -> Adv -> Adv ; + MarkupS : Mark -> S -> S ; + MarkupUtt : Mark -> Utt -> Utt ; + MarkupPhr : Mark -> Phr -> Phr ; + MarkupText : Mark -> Text -> Text ; + +} \ No newline at end of file diff --git a/lib/src/common/MarkHTMLX.gf b/lib/src/common/MarkHTMLX.gf new file mode 100644 index 000000000..8f4a48a4c --- /dev/null +++ b/lib/src/common/MarkHTMLX.gf @@ -0,0 +1,35 @@ +--# -path=.:../abstract + +concrete MarkHTMLX of MarkHTML = open HTML, Prelude in { + +lincat + Mark = {begin,end : Str} ; + +lin + i_Mark = mkMark "i" ; + b_Mark = mkMark "b" ; + ul_Mark = mkMark "ul" ; + li_Mark = mkMark "li" ; + h1_Mark = mkMark "h1" ; + h2_Mark = mkMark "h2" ; + table_Mark = mkMark "table" ; + tr_Mark = mkMark "tr" ; + td_Mark = mkMark "td" ; + p_Mark = mkMark "p" ; + + a_Mark url = {begin = "" ; end = ""} ; + + stringMark begin end = {begin = begin.s ; end = end.s} ; + +oper + mkMark = overload { + mkMark : Str -> Mark + = \s -> lin Mark {begin = tag s ; end = endtag s} ; + mkMark : Str -> Str -> Mark + = \s,t -> lin Mark {begin = tag s ; end = endtag t} ; + } ; + + appMark : {begin,end : Str} -> Str -> Str + = \m,s -> m.begin ++ s ++ m.end ; + +} \ No newline at end of file diff --git a/lib/src/english/LangEng.gf b/lib/src/english/LangEng.gf index 6533caf4a..47059fa08 100644 --- a/lib/src/english/LangEng.gf +++ b/lib/src/english/LangEng.gf @@ -5,6 +5,7 @@ concrete LangEng of Lang = LexiconEng ,ConstructionEng ,DocumentationEng + ,MarkupEng ** { flags startcat = Phr ; unlexer = text ; lexer = text ; diff --git a/lib/src/english/MarkupEng.gf b/lib/src/english/MarkupEng.gf new file mode 100644 index 000000000..505db7a75 --- /dev/null +++ b/lib/src/english/MarkupEng.gf @@ -0,0 +1,15 @@ +--# -path=.:../abstract:../common + +concrete MarkupEng of Markup = CatEng, MarkHTMLX ** { + +lin + MarkupCN m cn = {s = \\n,c => appMark m (cn.s ! n ! c) ; g = cn.g} ; + MarkupNP m np = {s = \\c => appMark m (np.s ! c) ; a = np.a} ; + MarkupAP m ap = {s = \\a => appMark m (ap.s ! a) ; isPre = ap.isPre} ; + MarkupAdv m adv = {s = appMark m adv.s} ; + MarkupS m s = {s = appMark m s.s} ; + MarkupUtt m utt = {s = appMark m utt.s} ; + MarkupPhr m phr = {s = appMark m phr.s} ; + MarkupText m txt = {s = appMark m txt.s} ; + +} \ No newline at end of file diff --git a/lib/src/prelude/HTML.gf b/lib/src/prelude/HTML.gf index 1a58415f9..1387018fc 100644 --- a/lib/src/prelude/HTML.gf +++ b/lib/src/prelude/HTML.gf @@ -1,4 +1,5 @@ resource HTML = open Prelude in { + oper tag : Str -> Str = \t -> "<" + t + ">" ; endtag : Str -> Str = \t -> tag ("/" + t) ; diff --git a/lib/src/scandinavian/MarkupScand.gf b/lib/src/scandinavian/MarkupScand.gf new file mode 100644 index 000000000..1372444e5 --- /dev/null +++ b/lib/src/scandinavian/MarkupScand.gf @@ -0,0 +1,13 @@ +incomplete concrete MarkupScand of Markup = CatScand, MarkHTMLX ** open ResScand in { + +lin + MarkupCN m cn = {s = \\n,d,c => appMark m (cn.s ! n ! d ! c) ; g = cn.g ; isMod = cn.isMod} ; + MarkupNP m np = {s = \\c => appMark m (np.s ! c) ; a = np.a} ; + MarkupAP m ap = {s = \\a => appMark m (ap.s ! a) ; isPre = ap.isPre} ; + MarkupAdv m adv = {s = appMark m adv.s} ; + MarkupS m s = {s = \\o => appMark m (s.s ! o)} ; + MarkupUtt m utt = {s = appMark m utt.s} ; + MarkupPhr m phr = {s = appMark m phr.s} ; + MarkupText m txt = {s = appMark m txt.s} ; + +} \ No newline at end of file diff --git a/lib/src/swedish/LangSwe.gf b/lib/src/swedish/LangSwe.gf index aa29960e3..ff26a0185 100644 --- a/lib/src/swedish/LangSwe.gf +++ b/lib/src/swedish/LangSwe.gf @@ -5,6 +5,7 @@ concrete LangSwe of Lang = LexiconSwe ,ConstructionSwe ,DocumentationSwe + ,MarkupSwe ** { flags startcat = Phr ; unlexer = text ; lexer = text ; diff --git a/lib/src/swedish/MarkupSwe.gf b/lib/src/swedish/MarkupSwe.gf new file mode 100644 index 000000000..75d4fa127 --- /dev/null +++ b/lib/src/swedish/MarkupSwe.gf @@ -0,0 +1,3 @@ +--# -path=.:../abstract:../common:../scandinavian + +concrete MarkupSwe of Markup = CatSwe, MarkHTMLX ** MarkupScand with (ResScand = ResSwe) ; \ No newline at end of file