summaryrefslogtreecommitdiff
path: root/src/lacweb.grm
diff options
context:
space:
mode:
Diffstat (limited to 'src/lacweb.grm')
-rw-r--r--src/lacweb.grm30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/lacweb.grm b/src/lacweb.grm
index 115c528a..2fcc8d89 100644
--- a/src/lacweb.grm
+++ b/src/lacweb.grm
@@ -298,9 +298,27 @@ xml : xmlOne xml (let
xmlOne : NOTAGS (EApp ((EVar (["Basis"], "cdata"), s (NOTAGSleft, NOTAGSright)),
(EPrim (Prim.String NOTAGS), s (NOTAGSleft, NOTAGSright))),
s (NOTAGSleft, NOTAGSright))
- | BEGIN_TAG DIVIDE GT (EApp ((EApp ((EVar (["Basis"], "tag"), s (BEGIN_TAGleft, GTright)),
- (EVar ([], BEGIN_TAG), s (BEGIN_TAGleft, GTright))),
- s (BEGIN_TAGleft, GTright)),
- (EApp ((EVar (["Basis"], "cdata"), s (BEGIN_TAGleft, GTright)),
- (EPrim (Prim.String ""), s (BEGIN_TAGleft, GTright))),
- s (BEGIN_TAGleft, GTright))), s (BEGIN_TAGleft, GTright))
+ | BEGIN_TAG DIVIDE GT (let
+ val pos = s (BEGIN_TAGleft, GTright)
+ in
+ (EApp ((EApp ((EVar (["Basis"], "tag"), pos),
+ (EVar ([], BEGIN_TAG), pos)),
+ pos),
+ (EApp ((EVar (["Basis"], "cdata"), pos),
+ (EPrim (Prim.String ""), pos)),
+ pos)), pos)
+ end)
+
+ | BEGIN_TAG GT xml END_TAG (let
+ val pos = s (BEGIN_TAGleft, GTright)
+ in
+ if BEGIN_TAG = END_TAG then
+ (EApp ((EApp ((EVar (["Basis"], "tag"), pos),
+ (EVar ([], BEGIN_TAG), pos)),
+ pos),
+ xml), pos)
+ else
+ (ErrorMsg.errorAt pos "Begin and end tags don't match.";
+ (EFold, pos))
+ end)
+