From 713b8b935e3c20c6f68db30c17b15d53e9c9e80f Mon Sep 17 00:00:00 2001
From: Leif Andersson <leif.andersson@control.lth.se>
Date: Sat, 22 Aug 2020 14:50:13 +0200
Subject: [PATCH] Adjusting module name

---
 Project.toml     |   8 ++++
 src/JuliaTikz.jl | 105 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 113 insertions(+)
 create mode 100644 Project.toml
 create mode 100644 src/JuliaTikz.jl

diff --git a/Project.toml b/Project.toml
new file mode 100644
index 0000000..90acdb4
--- /dev/null
+++ b/Project.toml
@@ -0,0 +1,8 @@
+name = "JuliaTikz"
+uuid = "9c98e656-dfbc-11ea-2f36-4b421b45bbac"
+authors = ["Leif Andersson <leif.andersson@control.lth.se>"]
+version = "0.1.0"
+
+[deps]
+Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
diff --git a/src/JuliaTikz.jl b/src/JuliaTikz.jl
new file mode 100644
index 0000000..e86cbd6
--- /dev/null
+++ b/src/JuliaTikz.jl
@@ -0,0 +1,105 @@
+module JuliaTikzModule
+
+export printcsv, JuliaTikz;
+
+using ControlSystems  # ControlSystems v0.5.4
+using Plots
+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
+
+#@deprecate printcsv(csv::String, data::Array{Any})  printcsv(data::Array{Any}, csv="")
+
+"""
+    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;
+        
+        name = res.captures[2];
+        filespec = join([dir, name * ".jl"],"/");
+        out = open(filespec,"w");
+        if !delete
+            println("Writing " * filespec);
+        end;        
+        firstline = "name = \"" * name * "\"";
+        println(out,firstline);
+        while !eof(file)
+             println(out,readline(file));
+        end;
+        close(out);
+    end;
+    include(filespec);
+    
+    if delete
+        rm(dir,recursive=true);
+    else
+        return filespec;
+    end;
+end;
+
+end; # end module
-- 
GitLab