summaryrefslogtreecommitdiff
path: root/src/GF/Infra/Comments.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/GF/Infra/Comments.hs')
-rw-r--r--src/GF/Infra/Comments.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/GF/Infra/Comments.hs b/src/GF/Infra/Comments.hs
new file mode 100644
index 000000000..442728b80
--- /dev/null
+++ b/src/GF/Infra/Comments.hs
@@ -0,0 +1,29 @@
+module Comments where
+
+-- comment removal : line tails prefixed by -- as well as chunks in {- ... -}
+
+remComments :: String -> String
+remComments s =
+ case s of
+ '"':s2 -> '"':pass remComments s2 -- comment marks in quotes not removed!
+ '{':'-':cs -> readNested cs
+ '-':'-':cs -> readTail cs
+ c:cs -> c : remComments cs
+ [] -> []
+ where
+ readNested t =
+ case t of
+ '"':s2 -> '"':pass readNested s2
+ '-':'}':cs -> remComments cs
+ _:cs -> readNested cs
+ [] -> []
+ readTail t =
+ case t of
+ '\n':cs -> '\n':remComments cs
+ _:cs -> readTail cs
+ [] -> []
+ pass f t =
+ case t of
+ '"':s2 -> '"': f s2
+ c:s2 -> c:pass f s2
+ _ -> t