diff options
author | Qieerb <qieerbushe7@gmail.com> | 2018-03-15 13:59:42 +0000 |
---|---|---|
committer | Qieerb <qieerbushe7@gmail.com> | 2018-03-15 13:59:42 +0000 |
commit | f64b2ef1183b18fc92d01b025c419a08b5d3b7f1 (patch) | |
tree | b243405db506de1aec4887a212ddd9065a1fff6b /FMark | |
parent | e4ed1d1028a046f072be3cb92e3e2202daecb828 (diff) | |
download | FMark-f64b2ef1183b18fc92d01b025c419a08b5d3b7f1.tar.gz FMark-f64b2ef1183b18fc92d01b025c419a08b5d3b7f1.zip |
parser build header id
Diffstat (limited to 'FMark')
-rw-r--r-- | FMark/src/Common/Parser/Parser.fs | 11 | ||||
-rw-r--r-- | FMark/src/Common/Parser/ParserTest.fs | 4 |
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")]); |