Skip to content
Snippets Groups Projects
Commit 31c20b2e authored by Leif Andersson's avatar Leif Andersson
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
name = "ModJuliaTikz"
uuid = "22ae9137-b414-4881-b080-1e44453510eb"
authors = ["Leif Andersson <leif.andersson@control.lth.se>"]
version = "0.1.0"
This diff is collapsed.
module ModJuliaTikz
export printcsv, JuliaTikz;
using Printf
function sprintdatarow(r)
join(map(n -> @sprintf("%#11.5G", n), r),';')
end
function sprintheader(r)
join(map(n -> @sprintf("%11s", n), r),';')
end
function printcsv(csv::String, data::Array{Any})
@warn """printcsv(csv::String, data::Array{Any}) is deprecated
Use printcsv(data::Array{Any}, csv="") instead""";
printcsv(data,csv);
end
"""
printcsv(data::Array{Any}, csv="")
Print the array `data` to a file suitable for inclusion in pgfplots.
The columns of `data` should have a string as first element, and Float64
as the remaining elements.
The default name of the file will be `<name>.csv`, where `<name>`
is the value of the global variable `name`, typically given
by `JuliaTikz`. Another name may be specified whith
the second argument of `printcsv`.
"""
function printcsv(data::Array{Any}, csv="")
if cmp(csv,"") == 0
global name;
csv = name *".csv";
end;
open(csv, "w") do f
hh = Array{String}(data[1,:]);
dd = convert(Array{Float64,2},data[2:end,1:end]);
println(f, sprintheader(hh));
map(r->println(f,sprintdatarow(r)),eachrow(dd));
end
end
"""
JuliaTikz(tikzfile,delete=true)
Extract and run the Julia part of a combined tikz/Julia file.
The boundary between the two is the string
\\endinput Julia <name>
where `<name>` is the name that will be given to the Julia file
(with .jl appended), and also to a variable `name` in the program,
i.e. name = "<name>".
The Julia file will be extracted to a temporary directory, which will be
deleted after the run unless the optional argument `delete` is false.
"""
function JuliaTikz(tikzfile,delete=true)
dir = mktempdir();
filespec = ""; out="";
if !delete
println("Opening " * tikzfile)
end;
open(tikzfile) do file
res = nothing;
while res === nothing
if eof(file)
error("\"\\endinput Julia \" not found");
end;
line = readline(file);
res = match(r"(\s*\\endinput\s+Julia\s+)([[:alnum:]]+)", line);
end;
global name = res.captures[2];
filespec = join([dir, name * ".jl"],"/");
out = open(filespec,"w");
if !delete
println("Writing " * filespec);
end;
line = "module " * name;
println(out, line);
line = "import ..ModJuliaTikz: printcsv";
println(out, line);
# line = "name = \"" * name * "\"";
# println(out,line);
while !eof(file)
println(out,readline(file));
end;
println(out,"end");
close(out);
end;
include(filespec);
if delete
rm(dir,recursive=true);
else
return filespec;
end;
end;
end; # end module
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment