From 104d114d5d226dcb89434a6518b1507d1c416e12 Mon Sep 17 00:00:00 2001 From: Ruben Vermeersch Date: Fri, 17 Jul 2015 10:35:25 +0200 Subject: [PATCH] Only write flags when they evaluate to true. --- dist/pofile.js | 4 +++- dist/pofile.min.js | 2 +- lib/po.js | 4 +++- test/write.js | 25 +++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/dist/pofile.js b/dist/pofile.js index 8e29193..1b2d925 100644 --- a/dist/pofile.js +++ b/dist/pofile.js @@ -290,7 +290,9 @@ PO.Item.prototype.toString = function () { lines.push('#: ' + ref); }); - var flags = Object.keys(this.flags); + var flags = Object.keys(this.flags).filter(function (flag) { + return !!this.flags[flag]; + }, this); if (flags.length > 0) { lines.push('#, ' + flags.join(',')); } diff --git a/dist/pofile.min.js b/dist/pofile.min.js index b4de5e5..99352ea 100644 --- a/dist/pofile.min.js +++ b/dist/pofile.min.js @@ -1 +1 @@ -require=function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0&&(m>=n&&(j.obsolete=!0),m=0,n=0,e.items.push(j),j=new f.Item)}function d(a){return a=c(a),a=a.replace(/^[^"]*"|"$/g,""),a=a.replace(/\\([abtnvfr'"\\?]|([0-7]{3})|x([0-9a-fA-F]{2}))/g,function(a,b,c,d){if(c)return String.fromCharCode(parseInt(c,8));if(d)return String.fromCharCode(parseInt(d,16));switch(b){case"a":return"";case"b":return"\b";case"t":return" ";case"n":return"\n";case"v":return" ";case"f":return"\f";case"r":return"\r";default:return b}})}a=a.replace(/\r\n/g,"\n");var e=new f,g=a.split(/\n\n/),h=g.shift(),i=g.join("\n").split(/\n/);e.headers={"Project-Id-Version":"","Report-Msgid-Bugs-To":"","POT-Creation-Date":"","PO-Revision-Date":"","Last-Translator":"",Language:"","Language-Team":"","Content-Type":"","Content-Transfer-Encoding":"","Plural-Forms":""},h.split(/\n/).reduce(function(a,b){return a.merge&&(b=a.pop().slice(0,-1)+b.slice(1),delete a.merge),/^".*"$/.test(b)&&!/^".*\\n"$/.test(b)&&(a.merge=!0),a.push(b),a},[]).forEach(function(a){if(a.match(/^#/)&&e.comments.push(a.replace(/^#\s*/,"")),a.match(/^"/)){a=a.trim().replace(/^"/,"").replace(/\\n"$/,"");var b=a.split(/:/),c=b.shift().trim(),d=b.join(":").trim();e.headers[c]=d}});for(var j=new f.Item,k=null,l=0,m=0,n=0;i.length>0;){var o=c(i.shift()),p=!1;if(o.match(/^#\~/)&&(o=c(o.substring(2)),p=!0),o.match(/^#:/))b(),j.references.push(c(o.replace(/^#:/,"")));else if(o.match(/^#,/)){b();for(var q=c(o.replace(/^#,/,"")).split(","),r=0;r0&&(n++,"msgstr"===k?j.msgstr[l]+=d(o):"msgid"===k?j.msgid+=d(o):"msgid_plural"===k&&(j.msgid_plural+=d(o)));p&&m++}return b(),e},f.Item=function(){this.msgid="",this.msgctxt=null,this.references=[],this.msgid_plural=null,this.msgstr=[],this.comments=[],this.extractedComments=[],this.flags={},this.obsolete=!1},f.Item.prototype.toString=function(){var a=[],b=this,c=function(a){return a=a.replace(/[\x07\b\t\v\f\r"\\]/g,function(a){switch(a){case"":return"\\a";case"\b":return"\\b";case" ":return"\\t";case" ":return"\\v";case"\f":return"\\f";case"\r":return"\\r";default:return"\\"+a}})},d=function(a,b,d){var e=[],f=b.split(/\n/),g="undefined"!=typeof d?"["+d+"]":"";return f.length>1?(e.push(a+g+' ""'),f.forEach(function(a){e.push('"'+c(a)+'"')})):e.push(a+g+' "'+c(b)+'"'),e};this.comments.forEach(function(b){a.push("# "+b)}),this.extractedComments.forEach(function(b){a.push("#. "+b)}),this.references.forEach(function(b){a.push("#: "+b)});var f=Object.keys(this.flags);f.length>0&&a.push("#, "+f.join(","));var g=this.obsolete?"#~ ":"";return["msgctxt","msgid","msgid_plural","msgstr"].forEach(function(c){var f=b[c];if(null!=f)if(e(f)&&f.length>1)f.forEach(function(b,e){a=a.concat(g+d(c,b,e))});else{f=e(f)?f.join():f;for(var h=d(c,f),i=1;i0&&(m>=n&&(j.obsolete=!0),m=0,n=0,e.items.push(j),j=new g.Item)}function c(a){return a=d(a),a=a.replace(/^[^"]*"|"$/g,""),a=a.replace(/\\([abtnvfr'"\\?]|([0-7]{3})|x([0-9a-fA-F]{2}))/g,function(a,b,c,d){if(c)return String.fromCharCode(parseInt(c,8));if(d)return String.fromCharCode(parseInt(d,16));switch(b){case"a":return"";case"b":return"\b";case"t":return" ";case"n":return"\n";case"v":return" ";case"f":return"\f";case"r":return"\r";default:return b}})}a=a.replace(/\r\n/g,"\n");var e=new g,f=a.split(/\n\n/),h=f.shift(),i=f.join("\n").split(/\n/);e.headers={"Project-Id-Version":"","Report-Msgid-Bugs-To":"","POT-Creation-Date":"","PO-Revision-Date":"","Last-Translator":"",Language:"","Language-Team":"","Content-Type":"","Content-Transfer-Encoding":"","Plural-Forms":""},h.split(/\n/).reduce(function(a,b){return a.merge&&(b=a.pop().slice(0,-1)+b.slice(1),delete a.merge),/^".*"$/.test(b)&&!/^".*\\n"$/.test(b)&&(a.merge=!0),a.push(b),a},[]).forEach(function(a){if(a.match(/^#/)&&e.comments.push(a.replace(/^#\s*/,"")),a.match(/^"/)){a=a.trim().replace(/^"/,"").replace(/\\n"$/,"");var b=a.split(/:/),c=b.shift().trim(),d=b.join(":").trim();e.headers[c]=d}});for(var j=new g.Item,k=null,l=0,m=0,n=0;i.length>0;){var o=d(i.shift()),p=!1;if(o.match(/^#\~/)&&(o=d(o.substring(2)),p=!0),o.match(/^#:/))b(),j.references.push(d(o.replace(/^#:/,"")));else if(o.match(/^#,/)){b();for(var q=d(o.replace(/^#,/,"")).split(","),r=0;r0&&(n++,"msgstr"===k?j.msgstr[l]+=c(o):"msgid"===k?j.msgid+=c(o):"msgid_plural"===k&&(j.msgid_plural+=c(o)));p&&m++}return b(),e},g.Item=function(){this.msgid="",this.msgctxt=null,this.references=[],this.msgid_plural=null,this.msgstr=[],this.comments=[],this.extractedComments=[],this.flags={},this.obsolete=!1},g.Item.prototype.toString=function(){var a=[],b=this,c=function(a){return a=a.replace(/[\x07\b\t\v\f\r"\\]/g,function(a){switch(a){case"":return"\\a";case"\b":return"\\b";case" ":return"\\t";case" ":return"\\v";case"\f":return"\\f";case"\r":return"\\r";default:return"\\"+a}})},d=function(a,b,d){var e=[],f=b.split(/\n/),g="undefined"!=typeof d?"["+d+"]":"";return f.length>1?(e.push(a+g+' ""'),f.forEach(function(a){e.push('"'+c(a)+'"')})):e.push(a+g+' "'+c(b)+'"'),e};this.comments.forEach(function(b){a.push("# "+b)}),this.extractedComments.forEach(function(b){a.push("#. "+b)}),this.references.forEach(function(b){a.push("#: "+b)});var e=Object.keys(this.flags).filter(function(a){return!!this.flags[a]},this);e.length>0&&a.push("#, "+e.join(","));var g=this.obsolete?"#~ ":"";return["msgctxt","msgid","msgid_plural","msgstr"].forEach(function(c){var e=b[c];if(null!=e)if(f(e)&&e.length>1)e.forEach(function(b,e){a=a.concat(g+d(c,b,e))});else{e=f(e)?e.join():e;for(var h=d(c,e),i=1;i 0) { lines.push('#, ' + flags.join(',')); } diff --git a/test/write.js b/test/write.js index 06edb97..fee578c 100644 --- a/test/write.js +++ b/test/write.js @@ -16,6 +16,20 @@ function assertHasLine(str, line) { assert(found, 'Could not find line: ' + line); } +function assertDoesntHaveLine(str, line) { + var lines = str.split('\n'); + var found = false; + + for (var i = 0; i < lines.length; i++) { + if (lines[i].trim() === line) { + found = true; + break; + } + } + + assert(!found, 'Shouldn\'t have line: ' + line); +} + describe('Write', function () { it('write flags', function () { var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8'); @@ -24,6 +38,17 @@ describe('Write', function () { assertHasLine(str, '#, fuzzy'); }); + it('write flags only when true', function () { + var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8'); + var po = PO.parse(input); + + // Flip flag + po.items[0].flags.fuzzy = false; + + var str = po.toString(); + assertDoesntHaveLine(str, '#, fuzzy'); + }); + it('write msgid', function () { var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8'); var po = PO.parse(input);