4. package main
import (
"pkg"
)
func foo(x, y int) int {
...
}
// start here
func main() {
z := foo(10, 20)
pkg.Stuff(z)
}
Go Fundamentals: program structure
5. var (
number,i,j int
big float64 = 12345678.90
things = []string{"one", "two"}
)
foo := 10
bar := 20.0
baz := `SVG is "really" cool`
Go Fundamentals: variables and declaraEons
6. if SVGisCool {
...
} else {
...
}
for t:= 0.0; t <= 360.0; t += 60.0 {
...
}
Go Fundamentals: if and loop
11. New(w io.Writer) Specify the desEnaEon for the generated code
Start(w, h int, opEons ...string) Begin the SVG document, with opEons
Startview(w, h, minx, miny, vw, vh int) Begin the document with a viewport
Group(s ...string)/Gend() Begin a group with arbitrary a=ributes
Gid(id string)/Gend() Begin/end a group with an id
Gstyle(s string)/Gend() Begin/end a group style
ClipPath(s ...string)/ClipEnd() Begin/end ClipPath
Def(s string)/DefEnd() Begin/end definiEon block
Title(s string) Specify the document Etle
Desc(s string) Specify the document descripEon
Link(href, Etle string)/LinkEnd() Link to content between Link and LinkEnd
Use(x, y int, link string, style ...string) Use previously defined content
End() End the SVG document
Structure, Metadata, Links
12. Rect(x, y, w, h int, s ...string) CenterRect(x, y, w, h int, s ...string)
Roundrect(x, y, w, h, rx, ry int, s ...string) Ellipse(x, y, rx, ry int, s ...string)
Circle(x, y, r int, s ...string) Square(x, y, w int, s ...string) Polygon(x, y []int, s ...string)
Shapes
13. Line(x1, y1, x2, y2 int, s ...string) Polyline(x, y []int, s ...string)
Qbez(sx, sy, cx, cy, ex, ey int, s ...string) Bezier(sx, sy, cx, cy, px, py, ex, ey int, s ...string)
Arc(sx sy, ax, ay, r int, large, sweep bool, ex ey int, s ...string) Path(d string, s ...string)
Lines, Curves, and Path
14. Scale(n float64) ScaleXY(dx, dy float64)
SkewX(a float64)
SkewY(a float64) SkewXY(ax, ay float64)
Gtransform(s string)
TranslateRotate(x, y int, r float64)
RotateTranslate(x, y int, r float64)
Translate(x, y int)
Rotate(r float64)
Transforms
15. Text(x, y int, t string, s ...string) Image(x, y, w, h int, link string, s ...string)
Textlines(x, y int, s []string, size, spacing int, fill, align string) Textpath(t, pathid string, s ...string)
Text and Image
17. ⟶ ⟶
44 77 232 44 77 232 .33
RGB(r, g, b int) RGBA(r, g, b int, alpha float64)
Grid(x, y, w, h, n int, s ...string)
Colors, Grid
18. 1 canvas.Start(500, 500, `onload="Startup()"`)
2 canvas.Script("application/javascript", "http://example.com/myscript.js")
3 canvas.Rect(10, 10, 100, 200)
4 canvas.End()
example.com/myscript.js
function StartUp()
1 Begin the document, load your funcEon
{
... 2 specify the script, by reference
}
3 specify SVG elements, operate on these
function doStuff(element)
{ 4 end the SVG document
...
}
ScripEng
64. // FlickrAPI calls the API given a method with single name/value pair
func flickrAPI(method, name, value string) string {
return fmt.Sprintf(apifmt, method, apiKey, name, value)
}
// makeURI converts the elements of a photo into a Flickr photo URI
func makeURI(p Photo, imsize string) string {
im := p.Id + "_" + p.Secret
if len(imsize) > 0 {
im += "_" + imsize
}
return fmt.Sprintf(urifmt, p.Farm, p.Server, im)
}
// imageGrid reads the response from Flickr, and creates a grid of images
func imageGrid(f FlickrResp, x, y, cols, gutter int, imgsize string) {
if f.Stat != "ok" {
fmt.Fprintf(os.Stderr, "%vn", f)
return
}
xpos := x
for i, p := range f.Photos.Photo {
if i%cols == 0 && i > 0 {
xpos = x
y += (imageHeight + gutter)
}
canvas.Link(makeURI(p, ""), p.Title)
canvas.Image(xpos, y, imageWidth, imageHeight, makeURI(p, "s"))
canvas.LinkEnd()
xpos += (imageWidth + gutter)
}
}
make the image grid from the XML response
65. // fs calls the Flickr API to perform a photo search
func fs(s string) {
var f FlickrResp
r, weberr := http.Get(flickrAPI("flickr.photos.search", "text", s))
if weberr != nil {
fmt.Fprintf(os.Stderr, "%vn", weberr)
return
}
defer r.Body.Close()
xmlerr := xml.Unmarshal(r.Body, &f)
if xmlerr != nil || r.StatusCode != http.StatusOK {
fmt.Fprintf(os.Stderr, "%v (status=%d)n", xmlerr, r.StatusCode)
return
}
canvas.Title(s)
imageGrid(f, 5, 5, 10, 5, "s")
canvas.Text(20, height-30, s, textStyle)
}
// for each search term on the commandline, create a photo grid
func main() {
for i := 1; i < len(os.Args); i++ {
canvas.Start(width, height)
canvas.Rect(0, 0, width, height, "fill:black")
fs(url.QueryEscape(os.Args[i]))
canvas.End()
}
}
Call the API from the main funcEon
66. have fun programming pictures
Contact ajstarks@gmail.com
Repository h=ps://github.com/ajstarks/svgo
Examples h=p://flic.kr/s/aHsjpMnssp
Go Programming Language h=p://golang.org