diff --git a/src/latex.jl b/src/latex.jl index 9dd7f59..984d7d8 100644 --- a/src/latex.jl +++ b/src/latex.jl @@ -30,14 +30,14 @@ from the `arg`. function search_latexdirective(s::Union{String,SubString{String}}, istart::Int=1) e = sizeof(s) 0 < istart ≤ e || return 0,0,0 - p = pointer(s) + p = Vector{UInt8}(s) i = istart allspaces=true # find \foo directive or {...}: c = UInt8(0) while i ≤ e - c = unsafe_load(p, i) + c = p[i] (c == BACKSLASH || c == BRACEOPEN || c == CARET || c == UNDERSCORE) && break c != SPACE && (allspaces = false) i += 1 @@ -47,8 +47,8 @@ function search_latexdirective(s::Union{String,SubString{String}}, istart::Int=1 if c == BACKSLASH i += 2 i-1 > e && return 0,0,0 - if isalpha8(unsafe_load(p, i-1)) - while i ≤ e && isalpha8(unsafe_load(p, i)) + if isalpha8(p[i-1]) + while i ≤ e && isalpha8(p[i]) i += 1 end end @@ -59,19 +59,19 @@ function search_latexdirective(s::Union{String,SubString{String}}, istart::Int=1 end # look for optional opening brace - while i ≤ e && unsafe_load(p, i) == SPACE + while i ≤ e && p[i] == SPACE i += 1 end i > e && return directive_start, directive_end, e - inbrace = unsafe_load(p, i) == BRACEOPEN + inbrace = p[i] == BRACEOPEN if !inbrace # search backwards from \foo to look for { \foo ...} j = directive_start - 1 - while j ≥ istart && unsafe_load(p, j) == SPACE + while j ≥ istart && p[j] == SPACE j -= 1 end - if j < istart || unsafe_load(p, j) != BRACEOPEN - if unsafe_load(p, i) == BACKSLASH + if j < istart || p[j] != BRACEOPEN + if p[i] == BACKSLASH # argument is another latex directive ds,de,ae = search_latexdirective(s, i) return directive_start, directive_end, ae @@ -86,7 +86,7 @@ function search_latexdirective(s::Union{String,SubString{String}}, istart::Int=1 return directive_start, directive_end, e else # argument is not in braces … get next token - while i ≤ e && isalnum8(unsafe_load(p, i)) + while i ≤ e && isalnum8(p[i]) i += 1 end return directive_start, directive_end, i-1 @@ -106,7 +106,7 @@ function search_latexdirective(s::Union{String,SubString{String}}, istart::Int=1 # search for end of argument (closing brace) nbraces = 1 while i ≤ e - c = unsafe_load(p, i) + c = p[i] if c == BRACEOPEN nbraces += 1 elseif c == BRACECLOSE @@ -127,22 +127,23 @@ Return the substring of `s` corresponding to the argument from `argstart:argend` leading/trailing whitespace and braces. """ function striparg(s::Union{String,SubString{String}}, argstart::Int=start(s), argend::Int=endof(s)) + argstart > argend && return SubString(s, 1, 0) e = endof(s) (1 ≤ argstart ≤ e && 1 ≤ argend ≤ e) || throw(BoundsError()) - p = pointer(s) - if unsafe_load(p, argend) == BRACECLOSE + p = Vector{UInt8}(s) + if p[argend] == BRACECLOSE argend -= 1 # omit brace - while argstart ≤ argend && unsafe_load(p, argstart) != BRACEOPEN + while argstart ≤ argend && p[argstart] != BRACEOPEN argstart += 1 end argstart > argend && error("malformed argument") argstart += 1 # omit brace end - while argstart ≤ argend && unsafe_load(p, argend) == SPACE + while argstart ≤ argend && p[argend] == SPACE argend -= 1 end - while argstart ≤ argend && unsafe_load(p, argstart) == SPACE + while argstart ≤ argend && p[argstart] == SPACE argstart += 1 end return SubString(s, argstart, argend) @@ -239,7 +240,7 @@ const superscripts = Dict{Char,Char}( 'A'=>'ᴬ', 'B'=>'ᴮ', 'C'=>'ᶜ', 'D'=>'ᴰ', 'E'=>'ᴱ', 'G'=>'ᴳ', 'H'=>'ᴴ', 'I'=>'ᴵ', 'J'=>'ᴶ', 'K'=>'ᴷ', 'L'=>'ᴸ', 'M'=>'ᴹ', 'N'=>'ᴺ', 'O'=>'ᴼ', 'P'=>'ᴾ', 'R'=>'ᴿ', 'S'=>'ˢ', 'T'=>'ᵀ', 'U'=>'ᵁ', 'V'=>'ⱽ', 'W'=>'ᵂ', 'β'=>'ᵝ', 'γ'=>'ᵞ', 'δ'=>'ᵟ', 'ψ'=>'ᵠ', 'χ'=>'ᵡ', 'Θ'=>'ᶿ', - '+'=>'⁺', '-'=>'⁻', '='=>'⁼', '('=>'⁽', ')'=>'⁾', ' '=>' ', + '+'=>'⁺', '-'=>'⁻', '='=>'⁼', '('=>'⁽', ')'=>'⁾', ' '=>' ', '∘'=>'°', ) const subscripts = Dict{Char,Char}( '0'=>'₀', '1'=>'₁', '2'=>'₂', '3'=>'₃', '4'=>'₄', '5'=>'₅', '6'=>'₆', '7'=>'₇', '8'=>'₈', '9'=>'₉', @@ -296,10 +297,10 @@ replace_directives(s::AbstractString, extra_directives::Associative{String,Strin # strip unescaped $ signs from s function strip_dollars(s::Union{String,SubString{String}}) buf = IOBuffer() - p = pointer(s) + p = Vector{UInt8}(s) for i = 1:sizeof(s) - c = unsafe_load(p, i) - if c == BACKSLASH && i < sizeof(s) && unsafe_load(p, i+1) == DOLLAR + c = p[i] + if c == BACKSLASH && i < sizeof(s) && p[i+1] == DOLLAR write(buf, DOLLAR) # \$ -> $ elseif c != DOLLAR write(buf, c)