aboutsummaryrefslogtreecommitdiffstats
path: root/FMark/src/Common/TOCite/RefParse.fs
diff options
context:
space:
mode:
Diffstat (limited to 'FMark/src/Common/TOCite/RefParse.fs')
-rw-r--r--FMark/src/Common/TOCite/RefParse.fs52
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