Skip to content

Commit

Permalink
Fixing issue #22 by restructuring tracking of curly brace nesting.
Browse files Browse the repository at this point in the history
  • Loading branch information
LazyScholar authored and Azzaare committed Jul 21, 2021
1 parent e9bb8f4 commit e18bb8d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "BibParser"
uuid = "13533e5b-e1c2-4e57-8cef-cac5e52f6474"
authors = ["azzaare <jf@baffier.fr>"]
version = "0.1.17"
version = "0.1.18"

[deps]
BibInternal = "2027ae74-3657-4b95-ae00-e2f7d55c3e64"
Expand Down
24 changes: 16 additions & 8 deletions src/bibtex.jl
Original file line number Diff line number Diff line change
Expand Up @@ -401,30 +401,38 @@ function dump!(parser, char, ::Val{:field_in})
parser.task = :field_inquote
elseif char == '{'
parser.task = :field_inbrace
parser.field.braces += 1
elseif occursin(r"[0-9]", char)
parser.task = :field_number
elseif occursin(r"[a-zA-Z]", char)
parser.task = :field_var
end
end

is_dumped(parser, char, ::Val{:field_inbrace}) = char ['@', '{', '}']
function is_dumped(parser, char, ::Val{:field_inbrace})
if char == '{'
parser.field.braces += 1
return false
elseif char == '}'
parser.field.braces -= 1
return (parser.field.braces == 0)
elseif char == '@'
return true
else
return false
end
end
function dump!(parser, char, ::Val{:field_inbrace})
if char == '@'
parser.task = :entry
parser.field.braces = 0
e = BibTeXError(:incomplete_entry, get_acc(parser), parser.pos_start, parser.pos_end)
push!(parser.errors, e)
elseif char == '}' && parser.field.braces == 0
elseif char == '}'
parser.field.value *= get_acc(parser; from = 2)
push!(parser.storage.fields, deepcopy(parser.field))
parser.field.value = ""
parser.task = :field_out
elseif char == '{'
parser.field.value *= get_acc(parser; from = 2) # * parser.field.value
parser.field.braces += 1
elseif char == '}'
parser.field.value *= get_acc(parser; from = 1, to = -1) # * parser.field.value
parser.field.braces -= 1
end
end

Expand Down

0 comments on commit e18bb8d

Please sign in to comment.