Skip to content

Commit 89e6743

Browse files
authored
Merge pull request #10 from JuliaString/spj/fixindex
Fix indexing into packed names
2 parents 666e969 + c61555a commit 89e6743

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/Unicode_Entities.jl

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ struct PackedEntities{S,T} <: AbstractPackedTable{String}
2020
namtab::Vector{S}
2121
end
2222
PackedEntities(tab::PackedTable) = PackedEntities(tab.offsetvec, tab.namtab)
23-
Base.getindex(str::PackedEntities, ind::Integer) =
24-
_unpackword(_tab, str.namtab[str.offsetvec[ind]+1:str.offsetvec[ind+1]])
2523

2624
VER = UInt32(1)
2725

@@ -45,6 +43,12 @@ struct Unicode_Entity <: AbstractEntityTable
4543
nam::PackedEntities
4644
end
4745

46+
function Base.getindex(ent::Unicode_Entity, ind::Integer)
47+
str = ent.nam
48+
_unpackword(str.namtab[str.offsetvec[ind] + 1 : str.offsetvec[ind+1]],
49+
ent.tab.wrd1, ent.tab.wrd2)
50+
end
51+
4852
function __init__()
4953
tab = Unicode_Table(StrTables.load(joinpath(Pkg.dir("Unicode_Entities"),
5054
"data", "unicode.dat"))...)
@@ -94,21 +98,20 @@ function _unpackword(v::Vector{UInt8}, w1, w2)
9498
end
9599
String(take!(io))
96100
end
97-
_unpackword(tab, v::Vector{UInt8}) = _unpackword(v, tab.wrd1, tab.wrd2)
98101

99102
## Override methods
100103

101104
StrTables._get_table(ent::Unicode_Entity) = ent.tab
102-
StrTables._get_names(ent::Unicode_Entity) = ent.nam
105+
StrTables._get_names(ent::Unicode_Entity) = ent
103106

104107
function StrTables._get_str(ent::Unicode_Entity, ind)
105108
tab = ent.tab
106109
string(Char(ind <= tab.base32 ? tab.val16[ind] : tab.val32[ind - tab.base32] + 0x10000))
107110
end
108111

109-
function StrTables.lookupname(tab::Unicode_Entity, str::AbstractString)
110-
rng = searchsorted(tab.nam, uppercase(str))
111-
isempty(rng) ? StrTables._empty_str : _get_str(tab.tab, tab.tab.ind[rng.start])
112+
function StrTables.lookupname(ent::Unicode_Entity, str::AbstractString)
113+
rng = searchsorted(ent.nam, uppercase(str))
114+
isempty(rng) ? StrTables._empty_str : _get_str(ent.tab, ent.tab.ind[rng.start])
112115
end
113116

114117
StrTables.matches(ent::Unicode_Entity, vec::Vector{T}) where {T} =

0 commit comments

Comments
 (0)