1
0
forked from GitHub/gf-core

module Markup for marking up subphrases with html tags (or other things). Implemented for Eng and Swe so far.

This commit is contained in:
aarne
2014-02-11 15:42:17 +00:00
parent be31b52e07
commit 4c26fc80ee
10 changed files with 115 additions and 0 deletions

View File

@@ -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 ;
} ;

View File

@@ -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
}

View File

@@ -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 ==> <b> everything </b>
--
-- 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 ;
}

View File

@@ -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 = "<a href=" ++ Predef.BIND ++ url.s ++ Predef.BIND ++ ">" ; end = "</a>"} ;
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 ;
}

View File

@@ -5,6 +5,7 @@ concrete LangEng of Lang =
LexiconEng
,ConstructionEng
,DocumentationEng
,MarkupEng
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -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} ;
}

View File

@@ -1,4 +1,5 @@
resource HTML = open Prelude in {
oper
tag : Str -> Str = \t -> "<" + t + ">" ;
endtag : Str -> Str = \t -> tag ("/" + t) ;

View File

@@ -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} ;
}

View File

@@ -5,6 +5,7 @@ concrete LangSwe of Lang =
LexiconSwe
,ConstructionSwe
,DocumentationSwe
,MarkupSwe
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -0,0 +1,3 @@
--# -path=.:../abstract:../common:../scandinavian
concrete MarkupSwe of Markup = CatSwe, MarkHTMLX ** MarkupScand with (ResScand = ResSwe) ;