aboutsummaryrefslogtreecommitdiffstats
path: root/FMark
diff options
context:
space:
mode:
authorQieerb <qieerbushe7@gmail.com>2018-03-15 13:59:42 +0000
committerQieerb <qieerbushe7@gmail.com>2018-03-15 13:59:42 +0000
commitf64b2ef1183b18fc92d01b025c419a08b5d3b7f1 (patch)
treeb243405db506de1aec4887a212ddd9065a1fff6b /FMark
parente4ed1d1028a046f072be3cb92e3e2202daecb828 (diff)
downloadFMark-f64b2ef1183b18fc92d01b025c419a08b5d3b7f1.tar.gz
FMark-f64b2ef1183b18fc92d01b025c419a08b5d3b7f1.zip
parser build header id
Diffstat (limited to 'FMark')
-rw-r--r--FMark/src/Common/Parser/Parser.fs11
-rw-r--r--FMark/src/Common/Parser/ParserTest.fs4
2 files changed, 11 insertions, 4 deletions
diff --git a/FMark/src/Common/Parser/Parser.fs b/FMark/src/Common/Parser/Parser.fs
index cb72501..9186566 100644
--- a/FMark/src/Common/Parser/Parser.fs
+++ b/FMark/src/Common/Parser/Parser.fs
@@ -56,7 +56,14 @@ let (|MatchTable|_|) toks =
| _ -> None
| _ -> None
-
+let headerIDGen id hd =
+ let hdLine = hd.HeaderName
+ let rec headerIDGen' hdLine =
+ match hdLine with
+ | FrmtedString (Literal a)::tl -> a + headerIDGen' tl
+ | FrmtedString (Emphasis a)::tl -> (headerIDGen' a) + (headerIDGen' tl)
+ | _ -> ""
+ headerIDGen' hdLine + string id
/// parse supported `ParsedObj`s, turn them into a list
/// assuming each item start at the beginning of the line
@@ -70,7 +77,7 @@ let rec parseItem (hdLst: THeader list) (ftLst: ParsedObj list) (rawToks: Token
| MatchQuote (content, rtks) ->
(parseInLineElements2 ftLst content |> Quote , rtks)
|> Ok
- | HEADER i :: rtks -> (Header (hdLst.[i],"HEADER STRING NOT IMPLEMENTED"), rtks) |> Ok
+ | HEADER i :: rtks -> (Header (hdLst.[i],(headerIDGen i hdLst.[i])), rtks) |> Ok
| PickoutParagraph (par, retoks) ->
(parseParagraph ftLst par, retoks) |> Ok
| _ -> sprintf "Parse item did not match: %A" toks |> removeChars ["[";"]"] |> Error
diff --git a/FMark/src/Common/Parser/ParserTest.fs b/FMark/src/Common/Parser/ParserTest.fs
index ed4886a..2341859 100644
--- a/FMark/src/Common/Parser/ParserTest.fs
+++ b/FMark/src/Common/Parser/ParserTest.fs
@@ -210,7 +210,7 @@ let testGlobal =
);
(
[ENDLINE; HASH; HASH; WHITESPACE 2; LITERAL "h2"],
- [Header({HeaderName=[FrmtedString(Literal "h2")]; Level=2},"HEADER STRING NOT IMPLEMENTED")] |>Ok, "h2 header"
+ [Header({HeaderName=[FrmtedString(Literal "h2")]; Level=2},"h20")] |>Ok, "h2 header"
);
(
[HASH; HASH; LITERAL "h2"],
@@ -263,7 +263,7 @@ let testGlobal2 =
LITERAL "access"; EQUAL; WHITESPACE 1; NUMBER "2018"; MINUS; NUMBER "3";
MINUS; NUMBER "4"; ENDLINE],
[Paragraph [[FrmtedString (Literal "text1#text2")]];
- Header ({HeaderName = [FrmtedString (Literal "Header1")]; Level = 1;},"HEADER STRING NOT IMPLEMENTED");
+ Header ({HeaderName = [FrmtedString (Literal "Header1")]; Level = 1;},"Header10");
Paragraph [[Link (Literal "Footer1","./#1"); FrmtedString (Literal "text4")]];
Paragraph [[FrmtedString (Literal "(Eric, 2017)text6")]];
Footnote (1,[FrmtedString (Literal "footer1")]);