Skip to content

Commit 91b3104

Browse files
committed
refactor(wordcloud): reorder parameters in wordcloud function
1 parent fab596e commit 91b3104

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

src/wc-class.jl

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ function wordcloud(text; language=:auto, stopwords=:auto, stopwords_extra=nothin
8181
wordcloud(processtext(text, language=language, stopwords=stopwords, stopwords_extra=stopwords_extra, maxnum=maxnum); language=language, kargs...)
8282
end
8383
wordcloud(words, weight::Number; kargs...) = wordcloud(words, repeat([weight], length(words)); kargs...)
84-
function wordcloud(words::AbstractVector{<:AbstractString}, weights::AbstractVector{<:Real};
85-
colors=:auto, angles=:auto,
86-
mask=:auto, svgmask=nothing, editmask=true, masksize=:auto, fonts=:auto, language=:auto,
87-
transparent=:auto, minfontsize=:auto, maxfontsize=:auto, avgfontsize=12,
84+
function wordcloud(words::AbstractVector{<:AbstractString}, weights::AbstractVector{<:Real};
85+
colors=:auto, angles=:auto, fonts=:auto, language=:auto,
86+
mask=:auto, svgmask=nothing, editmask=true, transparent=:auto, masksize=:auto,
87+
avgfontsize=12, minfontsize=:auto, maxfontsize=:auto,
8888
spacing=:auto, density=0.5, state=layout!,
8989
style=:auto, centralword=:auto, reorder=:auto, level=:auto, rt=:auto, kargs...)
9090
@assert length(words) == length(weights) > 0
@@ -97,10 +97,12 @@ function wordcloud(words::AbstractVector{<:AbstractString}, weights::AbstractVec
9797
level != :auto && (params[:level] = level)
9898
rt != :auto && (params[:rt] = rt)
9999

100-
colors, angles, mask, svgmask, fonts, transparent = processscheme(words, weights; colors=colors, angles=angles, mask=mask, svgmask=svgmask, editmask=editmask, masksize=masksize,
101-
fonts=fonts, avgfontsize=avgfontsize, language=language, transparent=transparent, params=params, kargs...)
100+
colors, angles, fonts, mask, svgmask, transparent = processscheme(words, weights; colors=colors, angles=angles, fonts=fonts, language=language,
101+
mask=mask, svgmask=svgmask, editmask=editmask, transparent=transparent, masksize=masksize,
102+
avgfontsize=avgfontsize, params=params, kargs...)
102103
params[:colors] = Any[colors...]
103104
params[:angles] = angles
105+
params[:fonts] = fonts
104106
params[:transparent] = transparent
105107
mask, maskqtree, groundsize, volume = preparemask(mask, transparent)
106108
params[:groundsize] = groundsize
@@ -130,8 +132,7 @@ function wordcloud(words::AbstractVector{<:AbstractString}, weights::AbstractVec
130132
end
131133
params[:spacing] = spacing
132134
params[:density] = density
133-
params[:fonts] = fonts
134-
135+
135136
params[:state] = nameof(wordcloud)
136137
params[:epoch] = 0
137138
params[:word2index] = nothing
@@ -140,31 +141,35 @@ function wordcloud(words::AbstractVector{<:AbstractString}, weights::AbstractVec
140141
params[:scale] = -1
141142
params[:wordids] = collect(1:length(words))
142143
l = length(words)
143-
wc = WC(copy(words), float.(weights), Vector(undef, l), Vector{SVG}(undef, l),
144+
wc = WC(copy(words), float.(weights), Vector(undef, l), Vector{SVG}(undef, l),
144145
mask, svgmask, Vector{Stuffing.QTrees.U8SQTree}(undef, l), maskqtree, params)
145146
if state != wordcloud
146147
state(wc)
147148
end
148149
wc
149150
end
150-
function processscheme(words, weights; colors=:auto, angles=:auto, mask=:auto, svgmask=nothing, editmask=true,
151-
masksize=:auto, maskcolor=:default, keepmaskarea=:auto,
152-
backgroundcolor=:default, padding=:default,
153-
outline=:default, linecolor=:auto, fonts=:auto, avgfontsize=12, language=:auto,
154-
transparent=:auto, params=Dict{Symbol,Any}(), kargs...)
151+
function processscheme(words, weights; colors=:auto, angles=:auto, fonts=:auto, language=:auto,
152+
mask=:auto, svgmask=nothing, editmask=true, transparent=:auto,
153+
masksize=:auto, maskcolor=:default, keepmaskarea=:auto, avgfontsize=12,
154+
backgroundcolor=:default, padding=:default, outline=:default, linecolor=:auto,
155+
params=Dict{Symbol,Any}(), kargs...)
155156
merge!(params, kargs)
156-
colors in DEFAULTSYMBOLS && (colors = randomscheme(weights))
157-
angles in DEFAULTSYMBOLS && (angles = randomangles())
158-
fonts in DEFAULTSYMBOLS && (fonts = randomfonts(detect_language(words, language)))
157+
159158
maskcolor0 = maskcolor
160159
backgroundcolor0 = backgroundcolor
160+
161+
colors in DEFAULTSYMBOLS && (colors = randomscheme(weights))
162+
angles in DEFAULTSYMBOLS && (angles = randomangles())
163+
fonts in DEFAULTSYMBOLS && (language = detect_language(words, language); fonts = randomfonts(language))
161164
colors isa Symbol && (colors = (colorschemes[colors].colors...,))
162165
params[:colors_scheme] = colors
163166
params[:angles_scheme] = angles
164167
params[:fonts_scheme] = fonts
168+
params[:language] = language
165169
colors = Iterators.take(iter_expand(colors), length(words)) |> collect
166170
angles = Iterators.take(iter_expand(angles), length(words)) |> collect
167171
fonts = Iterators.take(iter_expand(fonts), length(words)) |> collect
172+
168173
if mask == :auto || mask isa Function
169174
if maskcolor in DEFAULTSYMBOLS
170175
if backgroundcolor in DEFAULTSYMBOLS || backgroundcolor == :maskcolor
@@ -243,10 +248,10 @@ function processscheme(words, weights; colors=:auto, angles=:auto, mask=:auto, s
243248
end
244249
padding in DEFAULTSYMBOLS && (padding = outline)
245250
if svgmask !== nothing
246-
svgmask = loadmask(svgmask, ms...; color=maskcolor, transparent=transparent, backgroundcolor=bc,
251+
svgmask = loadmask(svgmask, ms...; color=maskcolor, transparent=transparent, backgroundcolor=bc,
247252
outline=outline, linecolor=linecolor, padding=padding, preservevolume=keepmaskarea, kargs...)
248253
end
249-
mask, binarymask = loadmask(mask, ms...; color=maskcolor, transparent=transparent, backgroundcolor=bc,
254+
mask, binarymask = loadmask(mask, ms...; color=maskcolor, transparent=transparent, backgroundcolor=bc,
250255
outline=outline, linecolor=linecolor, padding=padding, return_bitmask=true, preservevolume=keepmaskarea, kargs...)
251256
binarymask === nothing || (transparent = .!binarymask)
252257
else
@@ -275,7 +280,7 @@ function processscheme(words, weights; colors=:auto, angles=:auto, mask=:auto, s
275280
Render.recolor!(mask, maskcolor) # tobitmap后有杂色 https://github.com/JuliaGraphics/Luxor.jl/issues/160
276281
end
277282
end
278-
colors, angles, mask, svgmask, fonts, transparent
283+
colors, angles, fonts, mask, svgmask, transparent
279284
end
280285

281286
"""
@@ -309,7 +314,7 @@ Base.lastindex(wc::WC) = lastindex(wc.words)
309314
Base.broadcastable(wc::WC) = Ref(wc)
310315
getstate(wc::WC) = wc.params[:state]
311316
setstate!(wc::WC, st::Symbol) = wc.params[:state] = st
312-
struct ID{T}
317+
struct ID{T}
313318
id::T
314319
end
315320
wordids(wc, i::Integer) = wc.params[:wordids][i]
@@ -355,7 +360,7 @@ setdoc = "This function accepts three positional arguments: a wordcloud object,
355360
function setfonts!(wc::WC, w, v::Union{AbstractString,AbstractVector{<:AbstractString}})
356361
@view(wc.params[:fonts][index(wc, w)]) .= v
357362
end
358-
@doc setdoc
363+
@doc setdoc
359364
function setwords!(wc::WC, w, v::Union{AbstractString,AbstractVector{<:AbstractString}})
360365
m = word2index(wc)
361366
@assert !any(v .∈ Ref(keys(m)))
@@ -368,7 +373,7 @@ end
368373
@doc getdoc getimages(wc::WC, w=:) = wc.imgs[index(wc, w)]
369374
@doc getdoc getsvgimages(wc::WC, w=:) = wc.svgs[index(wc, w)]
370375

371-
@doc setdoc
376+
@doc setdoc
372377
function setimages!(wc::WC, w, v::AbstractMatrix)
373378
@view(wc.imgs[index(wc, w)]) .= Ref(v)
374379
initqtree!(wc, w)

0 commit comments

Comments
 (0)