- From: SVG Working Group repository <cam+svgwgrepo@mcc.id.au>
- Date: Mon, 08 Apr 2013 16:36:19 -0700
- To: public-svg-wg@w3.org
details: https://svgwg.org/hg/svg2-tools/rev/acecf885de3c branches: changeset: 79:acecf885de3c user: Cameron McCormack <cam@mcc.id.au> date: Tue Apr 09 09:36:03 2013 +1000 description: Functionality required for SVG Integration table generation. diffstat: publish/config.js | 42 ++++++++++++++++++++++++++++++++++++++++++ publish/definitions.js | 3 +++ publish/processing.js | 24 ++++++++++++++---------- publish/utils.js | 22 ++++++++++++++++++---- 4 files changed, 77 insertions(+), 14 deletions(-) diffs (241 lines): diff --git a/publish/config.js b/publish/config.js --- a/publish/config.js +++ b/publish/config.js @@ -268,13 +268,55 @@ Config.prototype = { getSectionHierarchy: function(page) { if (this.pages[page].sectionHierarchy === void 0) { gatherSections(this, page); } return this.pages[page].sectionHierarchy; }, + + lookupElementBySpec: function(specid, elementName) { + var element = this.definitionsBySpec[specid].elements[elementName]; + if (!element) { + for (var id in this.definitionMainSpecs) { + if (this.definitionMainSpecs[id] == specid) { + element = this.definitionsBySpec[id].elements[elementName]; + if (element) { + break; + } + } + } + } + return element; + }, + + lookupElementAttributeBySpec: function(specid, elementName, attributeName) { + var element = this.definitionsBySpec[specid].elements[elementName]; + if (!element || !element.attributes[attributeName]) { + for (var id in this.definitionMainSpecs) { + if (this.definitionMainSpecs[id] == specid) { + element = this.definitionsBySpec[id].elements[elementName]; + if (element && element.attributes[attributeName]) { + break; + } + } + } + } + return element && element.attributes[attributeName]; + }, + + lookupElementAttributeCategoryBySpec: function(specid, elementName, attributeCategoryName) { + var element = this.definitionsBySpec[specid].elements[elementName]; + if (element) { + for (var i = 0; i < element.attributeCategories.length; i++) { + var catName = element.attributeCategories[i]; + if (catName == attributeCategoryName) { + return this.definitionsBySpec[specid].attributeCategories[catName]; + } + } + } + }, }; exports.load = function(filename) { return new Config(filename); }; diff --git a/publish/definitions.js b/publish/definitions.js --- a/publish/definitions.js +++ b/publish/definitions.js @@ -319,16 +319,17 @@ function loadInto(filename, base, specid specid: specid }); forEachChild(e, 'attribute', function(c) { element.specificAttributes.push(new Attribute({ name: c.getAttribute('name'), href: utils.resolveURL(base, c.getAttribute('href')), animatable: c.getAttribute('animatable') == 'yes', + specific: true, specid: specid })); }); forEachChild(e, 'contentmodel', function(c) { element.contentModelDescription = utils.cloneChildren(c); }); @@ -346,16 +347,17 @@ function loadInto(filename, base, specid defs.elementCategories[category.name] = category; }); forEachChild(doc.documentElement, 'attribute', function(a) { var attribute = new Attribute({ name: a.getAttribute('name'), href: utils.resolveURL(base, a.getAttribute('href')), animatable: a.getAttribute('animatable') == 'yes', + common: true, specid: specid }); if (a.hasAttribute('elements')) { attribute.elements = utils.set(utils.splitList(a.getAttribute('elements'))); defs.commonAttributesForElements.push(attribute); } else { defs.commonAttributes[attribute.name] = attribute; } @@ -371,16 +373,17 @@ function loadInto(filename, base, specid specid: specid }); forEachChild(ac, 'attribute', function(a) { category.attributes.push(new Attribute({ name: a.getAttribute('name'), href: utils.resolveURL(base, a.getAttribute('href')), animatable: a.getAttribute('animatable') == 'yes', + category: category, specid: specid })); }); defs.attributeCategories[category.name] = category; }); forEachChild(doc.documentElement, 'property', function(p) { diff --git a/publish/processing.js b/publish/processing.js --- a/publish/processing.js +++ b/publish/processing.js @@ -800,56 +800,60 @@ exports.processLinks = function(conf, pa while (n.localName != 'table') { n = n.parentNode; } return n.getAttribute("class") == 'proptable'; } - utils.forEachNode(doc, function(n) { + utils.forEachNode(doc, function(n, speclinks) { if (n.nodeType != n.ELEMENT_NODE || n.localName != 'a' || n.hasAttribute('href') || !n.firstChild) { return; } var text = n.textContent; + var definitions = speclinks ? conf.definitionsBySpec[speclinks] : conf.definitions; + if (/^'(\S+)\s+element'$/.test(text)) { - utils.replace(n, conf.definitions.formatElementLink(RegExp.$1, n)); + utils.replace(n, definitions.formatElementLink(RegExp.$1, n)); } else if (/^'(\S+)\s+attribute'$/.test(text)) { - utils.replace(n, conf.definitions.formatAttributeLink(RegExp.$1, n)); + utils.replace(n, definitions.formatAttributeLink(RegExp.$1, n)); } else if (/^'(\S+)\s+property'$/.test(text)) { - utils.replace(n, conf.definitions.formatPropertyLink(RegExp.$1, n, shouldOmitQuotes(n))); + utils.replace(n, definitions.formatPropertyLink(RegExp.$1, n, shouldOmitQuotes(n))); } else if (/^'(\S+)\s+presentationattribute'$/.test(text)) { - utils.replace(n, conf.definitions.formatPresentationAttributeLink(RegExp.$1, n)); + utils.replace(n, definitions.formatPresentationAttributeLink(RegExp.$1, n)); } else if (/^'([^\/]+)\/([^\/]+)'$/.test(text)) { - utils.replace(n, conf.definitions.formatElementAttributeLink(RegExp.$1, RegExp.$2, n)); + utils.replace(n, definitions.formatElementAttributeLink(RegExp.$1, RegExp.$2, n)); } else if (/^'(\S+)'$/.test(text)) { - utils.replace(n, conf.definitions.formatNameLink(RegExp.$1, n, shouldOmitQuotes(n))); + utils.replace(n, definitions.formatNameLink(RegExp.$1, n, shouldOmitQuotes(n))); } else if (/^([^:]+)::([^:]+)$/.test(text)) { var interfaceName = RegExp.$1; var memberName = RegExp.$2; - if (/^(.*)#/.test(conf.definitions.interfaces[interfaceName].href)) { + if (/^(.*)#/.test(definitions.interfaces[interfaceName].href)) { var beforeHash = RegExp.$1; utils.replace(n, utils.parse('<a href="{{base}}#__svg__{{interface}}__{{member}}">{{prefix}}{{member}}</a>', { base: beforeHash, interface: interfaceName, prefix: n.getAttributeNS(namespaces.edit, 'format') == "expanded" ? interfaceName + '::' : '', member: memberName })); } else { utils.warn('unknown interface name "' + interfaceName + '"', n); } } else if (/^<(.*)>$/.test(text)) { - utils.replace(n, conf.definitions.formatSymbolLink(RegExp.$1, n)); + utils.replace(n, definitions.formatSymbolLink(RegExp.$1, n)); } else { - utils.replace(n, conf.definitions.formatTermLink(text, n)); + utils.replace(n, definitions.formatTermLink(text, n)); } + }, function(n) { + return n.nodeType == 1 && n.getAttributeNS(namespaces.edit, 'speclinks'); }); }; // -- Use rounded quotes around element, attribute and property names. -------- exports.formatQuotes = function(conf, page, doc) { utils.forEachNode(doc, function(n) { diff --git a/publish/utils.js b/publish/utils.js --- a/publish/utils.js +++ b/publish/utils.js @@ -255,29 +255,43 @@ exports.firstIndexOfAny = function(withi return false; }; exports.compare = function(s1, s2) { if (s1 == s2) return 0; return s1 < s2 ? -1 : 1; }; -exports.forEachNode = function(n, fn) { - var a = fn(n); +exports.forEachNode = function(n, fn, stackfn, stackval) { + stackval = stackfn && stackfn(n) || stackval; + var a = fn(n, stackval); if (Array.isArray(a)) { - a.forEach(function(n) { exports.forEachNode(n, fn) }); + a.forEach(function(n) { exports.forEachNode(n, fn, stackfn, stackval) }); } else { n = n.firstChild; while (n) { var next = n.nextSibling; - exports.forEachNode(n, fn); + exports.forEachNode(n, fn, stackfn, stackval); n = next; } } }; exports.warn = function(message, node) { if (node) { console.warn([node.ownerDocument.documentURI, node.lineNumber, node.columnNumber, ' warning: ' + message].join(':')); } else { console.warn('warning: ' + message); } }; + +exports.allEqual = function(a) { + if (a.length == 0) { + return true; + } + var x = a[0]; + for (var i = 1; i < a.length; i++) { + if (a[i] != x) { + return false; + } + } + return true; +};
Received on Monday, 8 April 2013 23:36:48 UTC