1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
// Convert dash-separated-string to camelCase
function camelCase(s) {
return s.toLowerCase().replace(/-(.)/g, function(m, g) {
return g.toUpperCase()
})
}
// Ensure to six-based hex
function fullHex(hex) {
return hex.length == 4 ?
[ '#',
hex.substring(1, 2), hex.substring(1, 2)
, hex.substring(2, 3), hex.substring(2, 3)
, hex.substring(3, 4), hex.substring(3, 4)
].join('') : hex
}
// Component to hex value
function compToHex(comp) {
var hex = comp.toString(16)
return hex.length == 1 ? '0' + hex : hex
}
// Calculate proportional width and height values when necessary
function proportionalSize(box, width, height) {
if (width == null || height == null) {
if (height == null)
height = box.height / box.width * width
else if (width == null)
width = box.width / box.height * height
}
return {
width: width
, height: height
}
}
// Calculate position according to from and to
function at(o, pos) {
/* number recalculation (don't bother converting to SVG.Number for performance reasons) */
return typeof o.from == 'number' ?
o.from + (o.to - o.from) * pos :
/* instance recalculation */
o instanceof SVG.Color || o instanceof SVG.Number ? o.at(pos) :
/* for all other values wait until pos has reached 1 to return the final value */
pos < 1 ? o.from : o.to
}
// PathArray Helpers
function arrayToString(a) {
for (var i = 0, il = a.length, s = ''; i < il; i++) {
s += a[i][0]
if (a[i][1] != null) {
s += a[i][1]
if (a[i][2] != null) {
s += ' '
s += a[i][2]
if (a[i][3] != null) {
s += ' '
s += a[i][3]
s += ' '
s += a[i][4]
if (a[i][5] != null) {
s += ' '
s += a[i][5]
s += ' '
s += a[i][6]
if (a[i][7] != null) {
s += ' '
s += a[i][7]
}
}
}
}
}
}
return s + ' '
}
// Add more bounding box properties
function boxProperties(b) {
b.x2 = b.x + b.width
b.y2 = b.y + b.height
b.cx = b.x + b.width / 2
b.cy = b.y + b.height / 2
}
// Parse a matrix string
function parseMatrix(o) {
if (o.matrix) {
/* split matrix string */
var m = o.matrix.replace(/\s/g, '').split(',')
/* pasrse values */
if (m.length == 6) {
o.a = parseFloat(m[0])
o.b = parseFloat(m[1])
o.c = parseFloat(m[2])
o.d = parseFloat(m[3])
o.e = parseFloat(m[4])
o.f = parseFloat(m[5])
}
}
return o
}
// Get id from reference string
function idFromReference(url) {
var m = url.toString().match(SVG.regex.reference)
if (m) return m[1]
}
|