-
Notifications
You must be signed in to change notification settings - Fork 20
/
svgOMWriter.js
125 lines (101 loc) · 3.29 KB
/
svgOMWriter.js
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
123
124
125
// Copyright (c) 2014, 2015 Adobe Systems Incorporated. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, bitwise: true */
/*global define: true, require: true, module: true */
/* Help construct the svgOM */
(function () {
"use strict";
function SVGOMWriter() {
var _root = {
children: [],
global: {},
artboards: {},
meta: {
PS: {}
}
},
_currentNodeStack = [],
_docIDs = {};
this._root = _root;
this._dpi = function () {
return (_root && _root.global.pxToInchRatio) ? _root.global.pxToInchRatio : 72.0;
}
this.peekCurrent = function () {
if (_currentNodeStack.length > 0) {
return _currentNodeStack[_currentNodeStack.length - 1];
}
return null;
};
this.pushCurrent = function(oNode) {
_currentNodeStack.push(oNode);
};
this.popCurrent = function () {
_currentNodeStack.pop();
};
this.pushCurrent(_root);
this.setDocBounds = function (bounds) {
_root.global.bounds = bounds;
};
this.setDocViewBox = function (bounds) {
_root.global.viewBox = bounds;
};
this.setDocTitle = function (title) {
_root.title = title;
}
this.setDocPxToInchRatio = function (pxToInchRatio) {
_root.global.pxToInchRatio = pxToInchRatio;
};
this.setArtboard = function (id, title, bounds) {
_root.artboards[id] = {
title: title,
bounds: bounds
};
}
this.setDocGlobalLight = function (globalLight) {
_root.meta.PS.globalLight = globalLight;
};
this.uniqueId = function (nodeID) {
if (_docIDs[nodeID]) {
return nodeID + "-" + _docIDs[nodeID]++;
} else {
_docIDs[nodeID] = 1;
}
return nodeID;
};
this.addSVGNode = function (nodeID, nodeType, nodeVisible) {
var n = {
id: this.uniqueId(nodeID),
type: nodeType,
visible: nodeVisible,
style: {},
children: []
};
this.peekCurrent().children.push(n);
return n;
};
this.addFontRule = function() {
var r = {
"rule-type": "font",
"style": {}
};
//Undefined... comment out until this is wired in
//_appendRule(r);
return r.style;
};
this.toSVGOM = function() {
return _root;
};
}
module.exports = SVGOMWriter;
}());