diff options
Diffstat (limited to 'FMark/src/Common/TOCite/RefParse.fs')
-rw-r--r-- | FMark/src/Common/TOCite/RefParse.fs | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/FMark/src/Common/TOCite/RefParse.fs b/FMark/src/Common/TOCite/RefParse.fs index 432f503..e9af507 100644 --- a/FMark/src/Common/TOCite/RefParse.fs +++ b/FMark/src/Common/TOCite/RefParse.fs @@ -152,6 +152,14 @@ let ref2TLine format ref:TLine = urlGen Harvard ref.URL; dateGen Harvard ref.AccessDate] |> List.reduce List.append +let (|AgnoEqual|_|) = function + | WHITESPACE _::EQUAL::WHITESPACE _::tl + | WHITESPACE _::EQUAL::tl + | EQUAL::WHITESPACE _::tl + | EQUAL::tl -> + Some tl + | _ -> None + // parses a single reference entry // This probably should never see ENDLINE let refParser style tLst = @@ -170,25 +178,33 @@ let refParser style tLst = | _ -> None, tail match tLst with - | LITERAL "type"::EQUAL::WHITESPACE _::LITERAL t::tl -> - match t with - | "Book" -> refPar' {refData with Cat = Some Book} tl - | "Website" -> refPar' {refData with Cat = Some Website} tl + | LITERAL f::AgnoEqual tl -> + match f with + | "type" -> + match tl with + | LITERAL "Book"::tl -> refPar' {refData with Cat = Some Book} tl + | LITERAL "Website":: tl -> refPar' {refData with Cat = Some Website} tl + | _ -> refPar' refData tl + | "author" -> + refParse' [] tl + |> fun (x,y) -> refPar' {refData with Author = Some x} y + | "title" -> + refParse' [] tl + |> fun (x,y) -> refPar' {refData with Title = Some x} y + | "year" -> + match tl with + | NUMBER a::tl -> refPar' {refData with Year = Some (int a)} tl + | _ -> refPar' refData tl + | "url" -> + match tl with + | LITERAL s::tl -> refPar' {refData with URL = Some s} tl + | _ -> refPar' refData tl + | "access" -> + dateFormat tl + |> fun (x,y) -> refPar' {refData with AccessDate = x} y | _ -> refPar' refData tl - | LITERAL "author"::EQUAL::WHITESPACE _::tl -> - refParse' [] tl - |> fun (x,y) -> refPar' {refData with Author = Some x} y - | LITERAL "title"::EQUAL::WHITESPACE _::tl -> - refParse' [] tl - |> fun (x,y) -> refPar' {refData with Title = Some x} y - | LITERAL "year"::EQUAL::WHITESPACE _::NUMBER a::tl -> - refPar' {refData with Year = Some (int a)} tl - | LITERAL "url"::EQUAL::WHITESPACE _::LITERAL s::tl -> - refPar' {refData with URL = Some s} tl - | LITERAL "access"::EQUAL::WHITESPACE _::tl -> - dateFormat tl - |> fun (x,y) -> refPar' {refData with AccessDate = x} y - | ENDLINE::tl -> refData,tl + | ENDLINE::ENDLINE::tl -> refData,tl + | ENDLINE::tl -> refPar' refData tl | _::tl -> refPar' refData tl | [] -> refData, [] tLst |