diff --git a/README.md b/README.md index 3a7cfb4..becb6f6 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,18 @@ can be tested [here](https://www.lua.org/cgi-bin/demo) *(use the minified versio **svg:draw()** *return the svg formated string* ### Elements for svg:add(element) +**svg:Text(text, x, y, style, transform)** *add text* + + - text: string => the text to write + - x: number => Horizontal position, default to 10 + - y: number => Vertical position, default to 50 + - style: string => style of the text (css with svg params), default to: + * `font-family: Verdana` + * `font-size: 10` + * `stroke: self.stroke` svg:create() parameter ("#000000" by default) + * `fill: self.fill` svg:create() parameter ("transparent" by default) + - tranform: string => transformation options (eg: rotation) + **svg:Rect(x, y, width, height, stroke, strokeWidth, fill, rx, ry)** *add a rectangle* - x: number => Horizontal position from top left corner, default to 10 diff --git a/index.html b/index.html index 1ca5360..8807a8e 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - \ No newline at end of file +this is a test diff --git a/svg.lua b/svg.lua index 6d895cc..feecd1d 100644 --- a/svg.lua +++ b/svg.lua @@ -24,7 +24,7 @@ function svg:create(width, heigth, stroke, fill) -- function to create svg.Element -- name: string => name of the element (standard svg element name) -- options: table => a table containing all the parameters of the element - function s.Element:create(name, options) + function s.Element:create(name, options, content) local e = {} setmetatable(e,s.Element) e.name = name @@ -33,7 +33,11 @@ function svg:create(width, heigth, stroke, fill) e[key] = value e.strElement = e.strElement .. key .. "=\"" .. value .. "\" " end - e.strElement = e.strElement .. "/>" + if content ~= nil then + e.strElement = e.strElement .. ">" .. content .. "" + else + e.strElement = e.strElement .. "/>" + end return e; end @@ -56,6 +60,21 @@ function svg:draw() return svgStr end +-- function to add text +-- text: string => the text to write +-- x: number => Horizontal position +-- y: number => Vertical position +-- style: string => style of the text (css with svg params) +-- tranform: string => transformation options (eg: rotation) +function svg:Text(text, x, y, style, transform) + return self.Element:create("text", { + x = x or 10, + y = y or 50, + style = style or ("font-family: Verdana; font-size: 10; stroke: " .. self.stroke .. "; fill: " .. self.fill .. ";"), + transform = transform or "" + }, text) +end + -- function to create a rectangle -- x: number => Position du rectangle sur l'axe horizontal par rapport au coin supérieur gauche -- y: number => Position du rectangle sur l'axe vertical par rapport au coin supérieur gauche diff --git a/svg.min.lua b/svg.min.lua index b923968..079e215 100644 --- a/svg.min.lua +++ b/svg.min.lua @@ -1 +1 @@ -svg={}svg.__index=svg;function svg:create(a,b,c,d)local e={}setmetatable(e,svg)e.width=a or 100;e.height=height or 100;e.stroke=c or"#000000"e.fill=d or"transparent"e.elements={}e.Element={}e.Element.__index=svg.Element;function e.Element:create(f,g)local h={}setmetatable(h,e.Element)h.name=f;h.strElement="<"..f.." "for i,j in pairs(g)do h[i]=j;h.strElement=h.strElement..i.."=\""..j.."\" "end;h.strElement=h.strElement.."/>"return h end;return e end;function svg:add(k)table.insert(self.elements,k)end;function svg:draw()local l=""for m,n in pairs(self.elements)do l=l..n.strElement end;l=l..""return l end;function svg:Rect(o,p,a,height,c,q,d,s,t)return self.Element:create("rect",{x=o or 10,y=p or 10,width=a or 10,height=height or 10,stroke=c or self.stroke,fill=d or self.fill,["stroke-width"]=q or 1,rx=s or 0,ry=t or 0})end;function svg:Circle(r,u,v,c,q,d)return self.Element:create("circle",{r=r or 25,cx=u or 30,cy=v or 30,stroke=c or self.stroke,["stroke-width"]=q or 1,fill=d or self.fill})end;function svg:Ellipse(u,v,s,t,c,q,d)return self.Element:create("ellipse",{rx=r or 25,ry=r or 15,cx=u or 30,cy=v or 30,stroke=c or self.stroke,["stroke-width"]=q or 1,fill=d or self.fill})end \ No newline at end of file +svg={}svg.__index=svg;function svg:create(a,b,c,d)local e={}setmetatable(e,svg)e.width=a or 100;e.height=height or 100;e.stroke=c or"#000000"e.fill=d or"transparent"e.elements={}e.Element={}e.Element.__index=svg.Element;function e.Element:create(f,g,h)local i={}setmetatable(i,e.Element)i.name=f;i.strElement="<"..f.." "for j,k in pairs(g)do i[j]=k;i.strElement=i.strElement..j.."=\""..k.."\" "end;if h~=nil then i.strElement=i.strElement..">"..h..""else i.strElement=i.strElement.."/>"end;return i end;return e end;function svg:add(l)table.insert(self.elements,l)end;function svg:draw()local m=""for n,o in pairs(self.elements)do m=m..o.strElement end;m=m..""return m end;function svg:Text(p,q,s,t,u)return self.Element:create("text",{x=q or 10,y=s or 50,style=t or"font-family: Verdana; font-size: 10; stroke: "..self.stroke.."; fill: "..self.fill..";",transform=u or""},p)end;function svg:Rect(q,s,a,height,c,v,d,w,x)return self.Element:create("rect",{x=q or 10,y=s or 10,width=a or 10,height=height or 10,stroke=c or self.stroke,fill=d or self.fill,["stroke-width"]=v or 1,rx=w or 0,ry=x or 0})end;function svg:Circle(r,y,z,c,v,d)return self.Element:create("circle",{r=r or 25,cx=y or 30,cy=z or 30,stroke=c or self.stroke,["stroke-width"]=v or 1,fill=d or self.fill})end;function svg:Ellipse(y,z,w,x,c,v,d)return self.Element:create("ellipse",{rx=r or 25,ry=r or 15,cx=y or 30,cy=z or 30,stroke=c or self.stroke,["stroke-width"]=v or 1,fill=d or self.fill})end \ No newline at end of file diff --git a/test.lua b/test.lua index f6dbce3..eb5b1bc 100644 --- a/test.lua +++ b/test.lua @@ -1,4 +1,4 @@ -svg={}svg.__index=svg;function svg:create(a,b,c,d)local e={}setmetatable(e,svg)e.width=a or 100;e.height=height or 100;e.stroke=c or"#000000"e.fill=d or"transparent"e.elements={}e.Element={}e.Element.__index=svg.Element;function e.Element:create(f,g)local h={}setmetatable(h,e.Element)h.name=f;h.strElement="<"..f.." "for i,j in pairs(g)do h[i]=j;h.strElement=h.strElement..i.."=\""..j.."\" "end;h.strElement=h.strElement.."/>"return h end;return e end;function svg:add(k)table.insert(self.elements,k)end;function svg:draw()local l=""for m,n in pairs(self.elements)do l=l..n.strElement end;l=l..""return l end;function svg:Rect(o,p,a,height,c,q,d,s,t)return self.Element:create("rect",{x=o or 10,y=p or 10,width=a or 10,height=height or 10,stroke=c or self.stroke,fill=d or self.fill,["stroke-width"]=q or 1,rx=s or 0,ry=t or 0})end;function svg:Circle(r,u,v,c,q,d)return self.Element:create("circle",{r=r or 25,cx=u or 30,cy=v or 30,stroke=c or self.stroke,["stroke-width"]=q or 1,fill=d or self.fill})end;function svg:Ellipse(u,v,s,t,c,q,d)return self.Element:create("ellipse",{rx=r or 25,ry=r or 15,cx=u or 30,cy=v or 30,stroke=c or self.stroke,["stroke-width"]=q or 1,fill=d or self.fill})end +svg={}svg.__index=svg;function svg:create(a,b,c,d)local e={}setmetatable(e,svg)e.width=a or 100;e.height=height or 100;e.stroke=c or"#000000"e.fill=d or"transparent"e.elements={}e.Element={}e.Element.__index=svg.Element;function e.Element:create(f,g,h)local i={}setmetatable(i,e.Element)i.name=f;i.strElement="<"..f.." "for j,k in pairs(g)do i[j]=k;i.strElement=i.strElement..j.."=\""..k.."\" "end;if h~=nil then i.strElement=i.strElement..">"..h..""else i.strElement=i.strElement.."/>"end;return i end;return e end;function svg:add(l)table.insert(self.elements,l)end;function svg:draw()local m=""for n,o in pairs(self.elements)do m=m..o.strElement end;m=m..""return m end;function svg:Text(p,q,s,t,u)return self.Element:create("text",{x=q or 10,y=s or 50,style=t or"font-family: Verdana; font-size: 10; stroke: "..self.stroke.."; fill: "..self.fill..";",transform=u or""},p)end;function svg:Rect(q,s,a,height,c,v,d,w,x)return self.Element:create("rect",{x=q or 10,y=s or 10,width=a or 10,height=height or 10,stroke=c or self.stroke,fill=d or self.fill,["stroke-width"]=v or 1,rx=w or 0,ry=x or 0})end;function svg:Circle(r,y,z,c,v,d)return self.Element:create("circle",{r=r or 25,cx=y or 30,cy=z or 30,stroke=c or self.stroke,["stroke-width"]=v or 1,fill=d or self.fill})end;function svg:Ellipse(y,z,w,x,c,v,d)return self.Element:create("ellipse",{rx=r or 25,ry=r or 15,cx=y or 30,cy=z or 30,stroke=c or self.stroke,["stroke-width"]=v or 1,fill=d or self.fill})end mon_dessin = svg:create() mon_dessin:add(mon_dessin:Rect())