diff --git a/Project.toml b/Project.toml
index fbef8bca..84266b53 100644
--- a/Project.toml
+++ b/Project.toml
@@ -1,7 +1,7 @@
name = "Plots"
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
author = ["Tom Breloff (@tbreloff)"]
-version = "1.0.13"
+version = "1.0.14"
[deps]
Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
diff --git a/src/output.jl b/src/output.jl
index 003deec4..1501c214 100644
--- a/src/output.jl
+++ b/src/output.jl
@@ -1,54 +1,51 @@
-
defaultOutputFormat(plt::Plot) = "png"
function png(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "png")
- io = open(fn, "w")
- show(io, MIME("image/png"), plt)
- close(io)
+ fn = addExtension(fn, "png")
+ io = open(fn, "w")
+ show(io, MIME("image/png"), plt)
+ close(io)
end
png(fn::AbstractString) = png(current(), fn)
function svg(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "svg")
- io = open(fn, "w")
- show(io, MIME("image/svg+xml"), plt)
- close(io)
+ fn = addExtension(fn, "svg")
+ io = open(fn, "w")
+ show(io, MIME("image/svg+xml"), plt)
+ close(io)
end
svg(fn::AbstractString) = svg(current(), fn)
-
function pdf(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "pdf")
- io = open(fn, "w")
- show(io, MIME("application/pdf"), plt)
- close(io)
+ fn = addExtension(fn, "pdf")
+ io = open(fn, "w")
+ show(io, MIME("application/pdf"), plt)
+ close(io)
end
pdf(fn::AbstractString) = pdf(current(), fn)
-
function ps(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "ps")
- io = open(fn, "w")
- show(io, MIME("application/postscript"), plt)
- close(io)
+ fn = addExtension(fn, "ps")
+ io = open(fn, "w")
+ show(io, MIME("application/postscript"), plt)
+ close(io)
end
ps(fn::AbstractString) = ps(current(), fn)
function eps(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "eps")
- io = open(fn, "w")
- show(io, MIME("image/eps"), plt)
- close(io)
+ fn = addExtension(fn, "eps")
+ io = open(fn, "w")
+ show(io, MIME("image/eps"), plt)
+ close(io)
end
eps(fn::AbstractString) = eps(current(), fn)
function tex(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "tex")
- io = open(fn, "w")
- show(io, MIME("application/x-tex"), plt)
- close(io)
+ fn = addExtension(fn, "tex")
+ io = open(fn, "w")
+ show(io, MIME("application/x-tex"), plt)
+ close(io)
end
tex(fn::AbstractString) = tex(current(), fn)
@@ -69,48 +66,39 @@ end
html(fn::AbstractString) = html(current(), fn)
function txt(plt::Plot, fn::AbstractString)
- fn = addExtension(fn, "txt")
- io = open(fn, "w")
- show(io, MIME("text/plain"), plt)
- close(io)
+ fn = addExtension(fn, "txt")
+ io = open(fn, "w")
+ show(io, MIME("text/plain"), plt)
+ close(io)
end
txt(fn::AbstractString) = txt(current(), fn)
-# ----------------------------------------------------------------
+# ----------------------------------------------------------------
const _savemap = Dict(
"png" => png,
"svg" => svg,
"pdf" => pdf,
- "ps" => ps,
+ "ps" => ps,
"eps" => eps,
"tex" => tex,
"json" => json,
"html" => html,
"tikz" => tex,
"txt" => txt,
- )
+)
-function getExtension(fn::AbstractString)
- pieces = split(fn, ".")
- length(pieces) > 1 || error("Can't extract file extension: ", fn)
- ext = pieces[end]
- haskey(_savemap, ext) || error("Invalid file extension: ", fn)
- ext
-end
+const _extension_map = Dict("tikz" => "tex")
function addExtension(fn::AbstractString, ext::AbstractString)
- try
- oldext = getExtension(fn)
- if string(_savemap[oldext]) == ext
- return fn
+ oldfn, oldext = splitext(fn)
+ oldext = chop(oldext, head = 1, tail = 0)
+ if get(_extension_map, oldext, oldext) == ext
+ return fn
else
- return "$fn.$ext"
+ return string(fn, ".", ext)
end
- catch
- return "$fn.$ext"
- end
end
"""
@@ -121,27 +109,28 @@ type is inferred from the file extension. All backends support png and pdf
file types, some also support svg, ps, eps, html and tex.
"""
function savefig(plt::Plot, fn::AbstractString)
- fn = abspath(expanduser(fn))
- # get the extension
- local ext
- try
- ext = getExtension(fn)
- catch
- # if we couldn't extract the extension, add the default
- ext = defaultOutputFormat(plt)
- fn = addExtension(fn, ext)
- end
+ fn = abspath(expanduser(fn))
- # save it
- func = get(_savemap, ext) do
- error("Unsupported extension $ext with filename ", fn)
- end
- func(plt, fn)
+ # get the extension
+ fn, ext = splitext(fn)
+ ext = chop(ext, head = 1, tail = 0)
+ if isempty(ext)
+ ext = defaultOutputFormat(plt)
+ end
+
+ # save it
+ if haskey(_savemap, ext)
+ func = _savemap[ext]
+ return func(plt, fn)
+ else
+ error("Invalid file extension: ", fn)
+ end
end
savefig(fn::AbstractString) = savefig(current(), fn)
# ---------------------------------------------------------
+
"""
gui([plot])
@@ -164,17 +153,13 @@ end
_do_plot_show(plt, showval::Bool) = showval && gui(plt)
function _do_plot_show(plt, showval::Symbol)
showval == :gui && gui(plt)
- showval in (:inline,:ijulia) && inline(plt)
+ showval in (:inline, :ijulia) && inline(plt)
end
# ---------------------------------------------------------
-const _best_html_output_type = KW(
- :pyplot => :png,
- :unicodeplots => :txt,
- :plotlyjs => :html,
- :plotly => :html
-)
+const _best_html_output_type =
+ KW(:pyplot => :png, :unicodeplots => :txt, :plotlyjs => :html, :plotly => :html)
# a backup for html... passes to svg or png depending on the html_output_format arg
function _show(io::IO, ::MIME"text/html", plt::Plot)
@@ -184,7 +169,12 @@ function _show(io::IO, ::MIME"text/html", plt::Plot)
end
if output_type == :png
# @info("writing png to html output")
- print(io, "
")
+ print(
+ io,
+ "
",
+ )
elseif output_type == :svg
# @info("writing svg to html output")
show(io, MIME("image/svg+xml"), plt)
@@ -196,7 +186,7 @@ function _show(io::IO, ::MIME"text/html", plt::Plot)
end
# delegate showable to _show instead
-function Base.showable(m::M, plt::P) where {M<:MIME, P<:Plot}
+function Base.showable(m::M, plt::P) where {M <: MIME, P <: Plot}
return hasmethod(_show, Tuple{IO, M, P})
end
@@ -205,21 +195,31 @@ function _display(plt::Plot)
end
# for writing to io streams... first prepare, then callback
-for mime in ("text/plain", "text/html", "image/png", "image/eps", "image/svg+xml",
- "application/eps", "application/pdf", "application/postscript",
- "application/x-tex", "application/vnd.plotly.v1+json")
+for mime in (
+ "text/plain",
+ "text/html",
+ "image/png",
+ "image/eps",
+ "image/svg+xml",
+ "application/eps",
+ "application/pdf",
+ "application/postscript",
+ "application/x-tex",
+ "application/vnd.plotly.v1+json",
+)
@eval function Base.show(io::IO, m::MIME{Symbol($mime)}, plt::Plot)
if haskey(io, :juno_plotsize)
- showjuno(io, m, plt)
+ showjuno(io, m, plt)
else
- prepare_output(plt)
- _show(io, m, plt)
+ prepare_output(plt)
+ _show(io, m, plt)
end
return nothing
end
end
-Base.show(io::IO, m::MIME"application/prs.juno.plotpane+html", plt::Plot) = showjuno(io, MIME("text/html"), plt)
+Base.show(io::IO, m::MIME"application/prs.juno.plotpane+html", plt::Plot) =
+ showjuno(io, MIME("text/html"), plt)
# default text/plain for all backends
_show(io::IO, ::MIME{Symbol("text/plain")}, plt::Plot) = show(io, plt)
@@ -258,25 +258,25 @@ function showjuno(io::IO, m, plt)
scale = minimum(jsize[i] / sz[i] for i in 1:2)
plt[:size] = [s * scale for s in sz]
- plt[:dpi] = jratio*Plots.DPI
+ plt[:dpi] = jratio * Plots.DPI
plt[:thickness_scaling] *= scale
prepare_output(plt)
try
- _showjuno(io, m, plt)
+ _showjuno(io, m, plt)
finally
- plt[:size] = sz
- plt[:dpi] = dpi
- plt[:thickness_scaling] = thickness_scaling
+ plt[:size] = sz
+ plt[:dpi] = dpi
+ plt[:thickness_scaling] = thickness_scaling
end
end
function _showjuno(io::IO, m::MIME"image/svg+xml", plt)
- if Symbol(plt.attr[:html_output_format]) ≠ :svg
- throw(MethodError(show, (typeof(m), typeof(plt))))
- else
- _show(io, m, plt)
- end
+ if Symbol(plt.attr[:html_output_format]) ≠ :svg
+ throw(MethodError(show, (typeof(m), typeof(plt))))
+ else
+ _show(io, m, plt)
+ end
end
Base.showable(::MIME"application/prs.juno.plotpane+html", plt::Plot) = false