Merge pull request #9 from Open-Xchange-Frontend/fix_commented_obsolete_strings
Fix commented obsolete strings
This commit is contained in:
		
							
								
								
									
										38
									
								
								lib/po.js
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								lib/po.js
									
									
									
									
									
								
							| @@ -101,14 +101,18 @@ PO.parse = function (data) { | |||||||
|     var item = new PO.Item(), |     var item = new PO.Item(), | ||||||
|         context = null, |         context = null, | ||||||
|         plural = 0, |         plural = 0, | ||||||
|         obsolete = false; |         obsoleteCount = 0, | ||||||
|  |         noCommentLineCount = 0; | ||||||
|  |  | ||||||
|     function finish() { |     function finish() { | ||||||
|         if (item.msgid.length > 0) { |         if (item.msgid.length > 0) { | ||||||
|  |             if (obsoleteCount >= noCommentLineCount) { | ||||||
|  |                 item.obsolete = true; | ||||||
|  |             } | ||||||
|  |             obsoleteCount = 0; | ||||||
|  |             noCommentLineCount = 0; | ||||||
|             po.items.push(item); |             po.items.push(item); | ||||||
|             item = new PO.Item(); |             item = new PO.Item(); | ||||||
|             item.obsolete = obsolete; |  | ||||||
|             obsolete = false; |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -122,13 +126,15 @@ PO.parse = function (data) { | |||||||
|  |  | ||||||
|     while (lines.length > 0) { |     while (lines.length > 0) { | ||||||
|         var line = trim(lines.shift()), |         var line = trim(lines.shift()), | ||||||
|  |             lineObsolete = false, | ||||||
|             add = false; |             add = false; | ||||||
|  |  | ||||||
|         if (line.match(/^#\~/)) { // Obsolete item |         if (line.match(/^#\~/)) { // Obsolete item | ||||||
|             obsolete = true; |             //only remove the obsolte comment mark, here | ||||||
|  |             //might be, this is a new item, so | ||||||
|  |             //only remember, this line is marked obsolete, count after line is parsed | ||||||
|             line = trim(line.substring(2)); |             line = trim(line.substring(2)); | ||||||
|         } else { |             lineObsolete = true; | ||||||
|             obsolete = false; |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (line.match(/^#:/)) { // Reference |         if (line.match(/^#:/)) { // Reference | ||||||
| @@ -153,24 +159,29 @@ PO.parse = function (data) { | |||||||
|         else if (line.match(/^msgid_plural/)) { // Plural form |         else if (line.match(/^msgid_plural/)) { // Plural form | ||||||
|             item.msgid_plural = extract(line); |             item.msgid_plural = extract(line); | ||||||
|             context = 'msgid_plural'; |             context = 'msgid_plural'; | ||||||
|  |             noCommentLineCount++; | ||||||
|         } |         } | ||||||
|         else if (line.match(/^msgid/)) { // Original |         else if (line.match(/^msgid/)) { // Original | ||||||
|             finish(); |             finish(); | ||||||
|             item.msgid = extract(line); |             item.msgid = extract(line); | ||||||
|             context = 'msgid'; |             context = 'msgid'; | ||||||
|  |             noCommentLineCount++; | ||||||
|         } |         } | ||||||
|         else if (line.match(/^msgstr/)) { // Translation |         else if (line.match(/^msgstr/)) { // Translation | ||||||
|             var m = line.match(/^msgstr\[(\d+)\]/); |             var m = line.match(/^msgstr\[(\d+)\]/); | ||||||
|             plural = m && m[1] ? parseInt(m[1]) : 0; |             plural = m && m[1] ? parseInt(m[1]) : 0; | ||||||
|             item.msgstr[plural] = extract(line); |             item.msgstr[plural] = extract(line); | ||||||
|             context = 'msgstr'; |             context = 'msgstr'; | ||||||
|  |             noCommentLineCount++; | ||||||
|         } |         } | ||||||
|         else if (line.match(/^msgctxt/)) { // Context |         else if (line.match(/^msgctxt/)) { // Context | ||||||
|             finish(); |             finish(); | ||||||
|             item.msgctxt = extract(line); |             item.msgctxt = extract(line); | ||||||
|  |             noCommentLineCount++; | ||||||
|         } |         } | ||||||
|         else { // Probably multiline string or blank |         else { // Probably multiline string or blank | ||||||
|             if (line.length > 0) { |             if (line.length > 0) { | ||||||
|  |                 noCommentLineCount++; | ||||||
|                 if (context === 'msgstr') { |                 if (context === 'msgstr') { | ||||||
|                     item.msgstr[plural] += extract(line); |                     item.msgstr[plural] += extract(line); | ||||||
|                 } |                 } | ||||||
| @@ -182,6 +193,10 @@ PO.parse = function (data) { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         if (lineObsolete) { | ||||||
|  |             //count obsolete lines for this item | ||||||
|  |             obsoleteCount++; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     finish(); |     finish(); | ||||||
|  |  | ||||||
| @@ -245,27 +260,24 @@ PO.Item.prototype.toString = function () { | |||||||
|     if (flags.length > 0) { |     if (flags.length > 0) { | ||||||
|         lines.push('#, ' + flags.join(",")); |         lines.push('#, ' + flags.join(",")); | ||||||
|     } |     } | ||||||
|  |     var mkObsolete = this.obsolete ? '#~ ' : ''; | ||||||
|  |  | ||||||
|     ['msgctxt', 'msgid', 'msgid_plural', 'msgstr'].forEach(function (keyword) { |     ['msgctxt', 'msgid', 'msgid_plural', 'msgstr'].forEach(function (keyword) { | ||||||
|         var text = that[keyword]; |         var text = that[keyword]; | ||||||
|         if (text != null) { |         if (text != null) { | ||||||
|             if (isArray(text) && text.length > 1) { |             if (isArray(text) && text.length > 1) { | ||||||
|                 text.forEach(function (t, i) { |                 text.forEach(function (t, i) { | ||||||
|                     lines = lines.concat(_process(keyword, t, i)); |                     lines = lines.concat(mkObsolete + _process(keyword, t, i)); | ||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 text = isArray(text) ? text.join() : text; |                 text = isArray(text) ? text.join() : text; | ||||||
|                 lines = lines.concat(_process(keyword, text)); |                 lines = lines.concat(mkObsolete + _process(keyword, text)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     if (this.obsolete) { |     return lines.join("\n"); | ||||||
|         return "#~ " + lines.join("\n#~ "); |  | ||||||
|     } else { |  | ||||||
|         return lines.join("\n"); |  | ||||||
|     } |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| module.exports = PO; | module.exports = PO; | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								test/fixtures/commented.po
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								test/fixtures/commented.po
									
									
									
									
										vendored
									
									
								
							| @@ -21,3 +21,13 @@ msgstr "{{dataLoader.data.length}} resultaten" | |||||||
|  |  | ||||||
| #~ msgid "Add order" | #~ msgid "Add order" | ||||||
| #~ msgstr "Order toevoegen" | #~ msgstr "Order toevoegen" | ||||||
|  |  | ||||||
|  | #~ # commented obsolete item | ||||||
|  | #~ #, fuzzy | ||||||
|  | #~ msgid "Commented item" | ||||||
|  | #~ msgstr "not sure" | ||||||
|  |  | ||||||
|  | # commented obsolete item | ||||||
|  | #, fuzzy | ||||||
|  | #~ msgid "Second commented item" | ||||||
|  | #~ msgstr "also not sure" | ||||||
|   | |||||||
| @@ -96,16 +96,26 @@ describe('Parse', function () { | |||||||
|     it('Handles obsolete items', function () { |     it('Handles obsolete items', function () { | ||||||
|         var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/commented.po', 'utf8')); |         var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/commented.po', 'utf8')); | ||||||
|  |  | ||||||
|         assert.equal(po.items.length, 2); |         assert.equal(po.items.length, 4); | ||||||
|         var item = po.items[0]; |         var item = po.items[0]; | ||||||
|         assert.equal(item.obsolete, false); |         assert.equal(item.obsolete, false); | ||||||
|         assert.equal(item.msgid, "{{dataLoader.data.length}} results"); |         assert.equal(item.msgid, '{{dataLoader.data.length}} results'); | ||||||
|         assert.equal(item.msgstr, "{{dataLoader.data.length}} resultaten"); |         assert.equal(item.msgstr, '{{dataLoader.data.length}} resultaten'); | ||||||
|  |  | ||||||
|         item = po.items[1]; |         item = po.items[1]; | ||||||
|         assert.equal(item.obsolete, true); |         assert.equal(item.obsolete, true); | ||||||
|         assert.equal(item.msgid, "Add order"); |         assert.equal(item.msgid, 'Add order'); | ||||||
|         assert.equal(item.msgstr, "Order toevoegen"); |         assert.equal(item.msgstr, 'Order toevoegen'); | ||||||
|  |  | ||||||
|  |         item = po.items[2]; | ||||||
|  |         assert.equal(item.obsolete, true); | ||||||
|  |         assert.equal(item.msgid, 'Commented item'); | ||||||
|  |         assert.equal(item.msgstr, 'not sure'); | ||||||
|  |  | ||||||
|  |         item = po.items[3]; | ||||||
|  |         assert.equal(item.obsolete, true); | ||||||
|  |         assert.equal(item.msgid, 'Second commented item'); | ||||||
|  |         assert.equal(item.msgstr, 'also not sure'); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     describe('C-Strings', function () { |     describe('C-Strings', function () { | ||||||
|   | |||||||
| @@ -61,6 +61,22 @@ describe('Write', function () { | |||||||
|         assertHasLine(str, '#~ msgstr "Order toevoegen"'); |         assertHasLine(str, '#~ msgstr "Order toevoegen"'); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |     it('write obsolete items with comment', function () { | ||||||
|  |         var input = fs.readFileSync(__dirname + '/fixtures/commented.po', 'utf8'); | ||||||
|  |         var po = PO.parse(input); | ||||||
|  |         var str = po.toString(); | ||||||
|  |  | ||||||
|  |         //this is what msgcat tool of gettext does: don't print #~ for comments | ||||||
|  |         assertHasLine(str, '# commented obsolete item'); | ||||||
|  |         assertHasLine(str, '#, fuzzy'); | ||||||
|  |  | ||||||
|  |         //items made obsolete by commenting every keyword with #~ | ||||||
|  |         assertHasLine(str, '#~ msgid "Commented item"'); | ||||||
|  |         assertHasLine(str, '#~ msgstr "not sure"'); | ||||||
|  |         assertHasLine(str, '#~ msgid "Second commented item"'); | ||||||
|  |         assertHasLine(str, '#~ msgstr "also not sure"'); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     describe('C-Strings', function () { |     describe('C-Strings', function () { | ||||||
|         it('should escape "', function () { |         it('should escape "', function () { | ||||||
|             var item = new PO.Item(); |             var item = new PO.Item(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user