super Template
var name: String
- init(name: String) do self.name = name
var attributes = new Array[String]
var load_exprs = new Array[String]
end
end
-redef class String
- fun to_i_strip_e: Int
- do
- if has_substring("e-", 0) then return 0
- return to_i
- end
-end
-
redef class Int
fun adapt(d: Int, scale: Float): Int
do
exit 1
end
+if not "inkscape".program_is_in_path then
+ print "This tool needs the external program `inkscape`, make sure it is installed and in your PATH."
+ exit 1
+end
+
var drawings = rest
for drawing in drawings do
if not drawing.file_exists then
# Inkscape doesn't give us this information
var page_width = -1
var page_height = -1
- var svg_file = new IFStream.open(drawing)
+ var svg_file = new FileReader.open(drawing)
while not svg_file.eof do
var line = svg_file.read_line
var words = line.split("=")
var n = words[1]
n = n.substring(1, n.length-2) # remove ""
- page_width = n.to_i_strip_e
+ page_width = n.to_f.ceil.to_i
else if page_height == -1 and line.search("height") != null then
var words = line.split("=")
var n = words[1]
n = n.substring(1, n.length-2) # remove ""
- page_height = n.to_i_strip_e
+ page_height = n.to_f.ceil.to_i
end
end
svg_file.close
# Query Inkscape
var prog = "inkscape"
- var proc = new IProcess.from_a(prog, ["--without-gui", "--query-all", drawing])
+ var proc = new ProcessReader.from_a(prog, ["--without-gui", "--query-all", drawing])
var min_x = 1000000
var min_y = 1000000
while not proc.eof do
var line = proc.read_line
var words = line.split(",")
-
+
if words.length == 5 then
var id = words[0]
var x = words[1].to_f.floor.to_i
var y = words[2].to_f.floor.to_i
- var w = words[3].to_f.ceil.to_i
- var h = words[4].to_f.ceil.to_i
+ var w = words[3].to_f.ceil.to_i+1
+ var h = words[4].to_f.ceil.to_i+1
if id.has_prefix("0") then
var nit_name = id.substring_from(1)
# Nit class
var nit_class_name = drawing_name.chars.first.to_s.to_upper + drawing_name.substring_from(1) + "Images"
var nit_src = new ImageSetSrc(nit_class_name)
- nit_src.attributes.add "\tprivate var main_image: Image\n"
+ nit_src.attributes.add "\tprivate var main_image: Image is noinit\n"
nit_src.load_exprs.add "\t\tmain_image = app.load_image(\"images/{drawing_name}.png\")\n"
# Sort images by name, it prevents Array errors and looks better
nit_src.load_exprs.add "\t\t{nit_name}.add(main_image.subimage({x}, {y}, {w}, {h}))\n"
else
# Single image
- nit_src.attributes.add "\tvar {nit_name}: Image\n"
+ nit_src.attributes.add "\tvar {nit_name}: Image is noinit\n"
nit_src.load_exprs.add "\t\t{nit_name} = main_image.subimage({x}, {y}, {w}, {h})\n"
end
end
# Output source file
- var src_file = new OFStream.open("{src_path}/{drawing_name}.nit")
+ var src_file = new FileWriter.open("{src_path}/{drawing_name}.nit")
nit_src.write_to(src_file)
src_file.close