- From: SVG Working Group repository <cam+svgwgrepo@mcc.id.au>
- Date: Fri, 05 Apr 2013 19:16:05 -0700
- To: public-svg-wg@w3.org
details: https://svgwg.org/hg/svg2-tools/rev/59efecca3a36 branches: changeset: 72:59efecca3a36 user: Cameron McCormack <cam@mcc.id.au> date: Sat Apr 06 12:26:03 2013 +1100 description: Don't add page header/footer one single page specs. details: https://svgwg.org/hg/svg2-tools/rev/5e950c7b185a branches: changeset: 73:5e950c7b185a user: Cameron McCormack <cam@mcc.id.au> date: Sat Apr 06 12:27:17 2013 +1100 description: Fix bug in detecting JS errors; only build single page spec if there is more than one page. details: https://svgwg.org/hg/svg2-tools/rev/f14102592e40 branches: changeset: 74:f14102592e40 user: Cameron McCormack <cam@mcc.id.au> date: Sat Apr 06 13:15:48 2013 +1100 description: Add support for building other specs. diffstat: build.py | 51 ++++++++++++++++++++++++++++----------------------- publish/config.js | 12 +++++++++--- publish/processing.js | 26 +++++++++++++++++--------- spec.mk | 16 ++++++++++++++++ 4 files changed, 70 insertions(+), 35 deletions(-) diffs (258 lines): diff --git a/build.py b/build.py --- a/build.py +++ b/build.py @@ -32,35 +32,39 @@ def native_path(s): # http://stackoverflow.com/questions/1193583/what-is-the-multiplatform-alternative-to-subprocess-getstatusoutput-older-comma def getstatusoutput(cmd): """Return (status, output) of executing cmd in a shell.""" """This new implementation should work on all platforms.""" import subprocess pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, universal_newlines=True) output = "".join(pipe.stdout.readlines()) - sts = pipe.returncode + sts = pipe.wait() if sts is None: sts = 0 return sts, output # could allow this to be passed in: repo_dir = os.getcwd() master_dir = join(repo_dir, 'master') build_dir = join(repo_dir, 'build') publish_dir = join(build_dir, 'publish') tools_dir = normpath(join(repo_dir, '..', 'svg2-tools')) -publishjs_dir = join(tools_dir, 'publish') if not exists(master_dir): - exit(1, 'FAIL: build.py must be run from the root of the \'svg2\' repository') + exit(1, 'FAIL: build.py must be run from the root of the \'svg2\' repository ' + 'or from one of the directories under \'specs/\'.') if not exists(tools_dir): - exit(1, 'FAIL: the \'svg2-tools\' repository must be checked out alongside ' - ' the \'svg2\' repository') + tools_dir = normpath(join(repo_dir, '..', '..', '..', 'svg2-tools')) + if not exists(tools_dir): + exit(1, 'FAIL: the \'svg2-tools\' repository must be checked out alongside ' + 'the \'svg2\' repository') + +publishjs_dir = join(tools_dir, 'publish') if not exists(publish_dir): assert os.pardir not in publish_dir os.makedirs(publish_dir) # Add clean-up handler for SIGINT: def handle_SIGINT(signal, frame): @@ -160,34 +164,35 @@ if tobuild: "\" --build " + " ".join(tobuild_names) + (" --local-style" if os.environ.get("SVG_BUILD_LOCAL_STYLE_SHEETS") else "")) toremove = [] os.chdir(repo_dir) # chdir back # Build single page spec as required: -buildSinglePage = False -single_page = join(publish_dir, "single-page.html") - -if not isfile(single_page): - buildSinglePage = True -else: - singlePageTime = getmtime(single_page) - for name in all: - if getmtime(join(publish_dir, name + ".html")) > singlePageTime: - buildSinglePage = True - break - -if buildSinglePage: - os.chdir(master_dir) - run("node \"" + - native_path(join(tools_dir, join("publish","publish.js"))) + - "\" --build-single-page") - os.chdir(repo_dir) # chdir back +if len(all) > 1: + buildSinglePage = False + single_page = join(publish_dir, "single-page.html") + + if not isfile(single_page): + buildSinglePage = True + else: + singlePageTime = getmtime(single_page) + for name in all: + if getmtime(join(publish_dir, name + ".html")) > singlePageTime: + buildSinglePage = True + break + + if buildSinglePage: + os.chdir(master_dir) + run("node \"" + + native_path(join(tools_dir, join("publish","publish.js"))) + + "\" --build-single-page") + os.chdir(repo_dir) # chdir back # Copy over anything else that needs to be copied to 'publish': for f in resources: tocopypath = join(master_dir, f) if os.path.exists(tocopypath): copyto = os.path.join(publish_dir,os.path.basename(tocopypath)) shutil.rmtree(copyto, ignore_errors=True) shutil.copytree(tocopypath, copyto) diff --git a/publish/config.js b/publish/config.js --- a/publish/config.js +++ b/publish/config.js @@ -60,18 +60,24 @@ function gatherSections(conf, page) { while (count > 0) { sectionHierarchy.pop(); count--; } } function gather(n) { if (n.nodeType == 1) { - if (/^h[2-6]$/.test(n.nodeName) && n.getAttributeNS(namespaces.edit, 'toc') != 'no') { - var id = n.getAttribute("id"); + var id = n.getAttribute("id"); + if (/^h[2-6]$/.test(n.nodeName) && + n.getAttributeNS(namespaces.edit, 'toc') != 'no' && + id != 'pagetitle' && + id != 'pagesubtitle' && + id != 'abstract' && + id != 'status' && + id != 'toc') { var level = n.nodeName.substring(1) - 1; if (section.length >= level - 1) { if (section.length == level - 1) { section.push(0); pushHierarchy(); } else { popHierarchy(section.length - level); } @@ -234,17 +240,17 @@ Config.prototype = { } if (this.publishDirectory) { return '../' + this.publishDirectory + '/'; } return '../publish/'; }, get isSingleChapter() { - return this.pages.length == 1; + return this.pageOrder.length == 1; }, getPageDocument: function(page) { if (!this.pages[page].document) { var doc = utils.parseXHTML(page + '.html'); Object.defineProperty(doc, 'head', { get: function() { return this.getElementsByTagName('head').item(0); } }); Object.defineProperty(doc, 'body', { get: function() { return this.getElementsByTagName('body').item(0); } }); this.pages[page].document = doc; diff --git a/publish/processing.js b/publish/processing.js --- a/publish/processing.js +++ b/publish/processing.js @@ -39,25 +39,28 @@ exports.insertStyleSheets = function(con for (var next, n = doc.head.firstChild; n; n = next) { next = n.nextSibling; if (n.nodeName == 'link' && n.getAttribute('media') != 'print') { n.parentNode.removeChild(n); } } + var isSVG2 = conf.shortTitle == 'SVG 2'; // Add a link to the default style sheet. doc.head.appendChild(utils.parse('<link rel="stylesheet" title="Default" href="{{href}}" type="text/css" media="screen"/>', - { href: conf.maturity == 'ED' ? 'style/default_svg.css' : 'style/default_no_maturity.css' })); + { href: conf.maturity == 'ED' && !isSVG2 ? 'style/default_svg.css' : 'style/default_no_maturity.css' })); - // Add a link to alternate style sheet to hide background colors - // if this is an Editor's Draft, or to show them otherwise. - doc.head.appendChild(utils.parse('<link rel="alternate stylesheet" title="{{title}}" href="{{href}}" type="text/css" media="screen"/>', - { href: conf.maturity == 'ED' ? 'style/default_no_maturity.css' : 'style/default_svg.css', - title: conf.maturity == 'ED' ? 'Only annotations for publication' : 'All annotations' })); + if (isSVG2) { + // Add a link to alternate style sheet to hide background colors + // if this is an Editor's Draft, or to show them otherwise. + doc.head.appendChild(utils.parse('<link rel="alternate stylesheet" title="{{title}}" href="{{href}}" type="text/css" media="screen"/>', + { href: conf.maturity == 'ED' ? 'style/default_no_maturity.css' : 'style/default_svg.css', + title: conf.maturity == 'ED' ? 'Only annotations for publication' : 'All annotations' })); + } // Add a link to the "no issues/annotations" style sheet. doc.head.appendChild(utils.parse('<link rel="alternate stylesheet" title="No issues/annotations" href="style/default_no_issues.css" type="text/css" media="screen"/>')); // Add a link to a local or remote W3C TR style sheet for this document's maturity. var href = 'W3C-' + conf.shortMaturity; if (conf.localStyleSheets) { href = 'style/' + href + '.css'; @@ -111,16 +114,20 @@ exports.addBodyClass = function(conf, pa doc.body.setAttribute('class', 'chapter-' + page); } } // -- Add header and footer links to next/previous chapter, etc. -------------- exports.addHeaderFooter = function(conf, page, doc) { + if (conf.isSingleChapter) { + return; + } + var index = conf.pageOrder.indexOf(page); var previous = conf.pageOrder[index - 1]; var next = conf.pageOrder[index + 1]; var markup = '<div class="header {{side}}"><span class="namedate">{{shortTitle}} – {{publicationDate}}</span> <a href="{{index}}.html">Top</a>'; if (conf.toc) markup += ' ⋅ <a href="{{toc}}">Contents</a>'; if (previous) markup += ' ⋅ <a href="{{previous}}.html">Previous</a>'; @@ -185,22 +192,23 @@ exports.addExpanderScript = function(con function generateTOC(conf, page, className) { function newTOCUL() { return utils.parse('<ul class="{{class}}"></ul>', { class: className }); } function generate(ul, children) { for (var i = 0; i < children.length; i++) { var item = children[i]; - var li = utils.parse('<li><a href="{{page}}.html#{{id}}"></a></li>', - { page: page, + var li = utils.parse('<li><a href="{{url}}#{{id}}"></a></li>', + { url: conf.isSingleChapter ? '' : page + '.html', id: item.section.id }); var a = li.firstChild; if (conf.pages[page].type == 'chapter' || - conf.pages[page].type == 'appendix') { + conf.pages[page].type == 'appendix' || + conf.isSingleChapter) { a.appendChild(utils.parse('<span class="secno">{{number}}{{section}}.</span> ', { number: conf.isSingleChapter ? '' : conf.pages[page].formattedNumber + '.', section: item.section.number })); } a.appendChild(item.section.title.cloneNode(true)); if (item.children) { var childUL = newTOCUL(); generate(childUL, item.children); diff --git a/spec.mk b/spec.mk new file mode 100644 --- /dev/null +++ b/spec.mk @@ -0,0 +1,16 @@ +# Makefile for specs under http://svgwg.org/hg/svg2/specs/. + +TOOLS=../../../svg2-tools + +all-with-tools-check : tools-check all + +tools-check : + @bash -c "REMOTE_REV=$$(hg id -i http://svgwg.org/hg/svg2-tools); [ \$$? = 0 -o \"\$$REMOTE_REV\" != \"\" ] || exit 0; LOCAL_REV=$$(hg id -i $(TOOLS)); [ \"\$$LOCAL_REV\" = \"\$$REMOTE_REV\" -o \"\$$LOCAL_REV\" = \"\$$REMOTE_REV\"+ ] || (echo \"You must update your svg2-tools repository! (Remote repository has revision \$$REMOTE_REV, but you are at \$$LOCAL_REV.)\"; exit 1)" + +all : + @$(TOOLS)/build.py + +clean : + @$(TOOLS)/build.py -c + +.PHONY : all-with-tools-check tools-check all clean
Received on Saturday, 6 April 2013 02:16:26 UTC