Compare commits
	
		
			5 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | fbe773c636 | ||
|  | 7ceda82794 | ||
|  | d1be0f51b0 | ||
|  | 869f763d80 | ||
|  | b9394176b1 | 
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "pofile", | ||||
|   "version": "0.3.0", | ||||
|   "version": "1.0.1", | ||||
|   "authors": [ | ||||
|     "Ruben Vermeersch <ruben@rocketeer.be>" | ||||
|   ], | ||||
|   | ||||
							
								
								
									
										20
									
								
								dist/pofile.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								dist/pofile.js
									
									
									
									
										vendored
									
									
								
							| @@ -8,6 +8,7 @@ function trim(string) { | ||||
|  | ||||
| var PO = function () { | ||||
|     this.comments = []; | ||||
|     this.extractedComments = []; | ||||
|     this.headers = {}; | ||||
|     this.items = []; | ||||
| }; | ||||
| @@ -24,6 +25,11 @@ PO.prototype.toString = function () { | ||||
|             lines.push('# ' + comment); | ||||
|         }); | ||||
|     } | ||||
|     if (this.extractedComments) { | ||||
|         this.extractedComments.forEach(function (comment) { | ||||
|             lines.push('#. ' + comment); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     lines.push('msgid ""'); | ||||
|     lines.push('msgstr ""'); | ||||
| @@ -59,7 +65,12 @@ PO.parse = function (data) { | ||||
|     data = data.replace(/\r\n/g, '\n'); | ||||
|     var po = new PO(); | ||||
|     var sections = data.split(/\n\n/); | ||||
|     var headers = sections.shift(); | ||||
|     var headers = [sections.shift()]; | ||||
|     //everything until the first 'msgid ""' is considered header | ||||
|     while (headers[headers.length - 1].indexOf('msgid ""') < 0) { | ||||
|         headers.push(sections.shift()); | ||||
|     } | ||||
|     headers = headers.join('\n'); | ||||
|     var lines = sections.join('\n').split(/\n/); | ||||
|  | ||||
|     po.headers = { | ||||
| @@ -87,10 +98,11 @@ PO.parse = function (data) { | ||||
|         acc.push(line); | ||||
|         return acc; | ||||
|     }, []).forEach(function (header) { | ||||
|         if (header.match(/^#/)) { | ||||
|         if (header.match(/^#\./)) { | ||||
|             po.extractedComments.push(header.replace(/^#\.\s*/, '')); | ||||
|         } else if (header.match(/^#/)) { | ||||
|             po.comments.push(header.replace(/^#\s*/, '')); | ||||
|         } | ||||
|         if (header.match(/^"/)) { | ||||
|         } else if (header.match(/^"/)) { | ||||
|             header = header.trim().replace(/^"/, '').replace(/\\n"$/, ''); | ||||
|             var p = header.split(/:/); | ||||
|             var name = p.shift().trim(); | ||||
|   | ||||
							
								
								
									
										2
									
								
								dist/pofile.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/pofile.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										20
									
								
								lib/po.js
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								lib/po.js
									
									
									
									
									
								
							| @@ -7,6 +7,7 @@ function trim(string) { | ||||
|  | ||||
| var PO = function () { | ||||
|     this.comments = []; | ||||
|     this.extractedComments = []; | ||||
|     this.headers = {}; | ||||
|     this.items = []; | ||||
| }; | ||||
| @@ -23,6 +24,11 @@ PO.prototype.toString = function () { | ||||
|             lines.push('# ' + comment); | ||||
|         }); | ||||
|     } | ||||
|     if (this.extractedComments) { | ||||
|         this.extractedComments.forEach(function (comment) { | ||||
|             lines.push('#. ' + comment); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     lines.push('msgid ""'); | ||||
|     lines.push('msgstr ""'); | ||||
| @@ -58,7 +64,12 @@ PO.parse = function (data) { | ||||
|     data = data.replace(/\r\n/g, '\n'); | ||||
|     var po = new PO(); | ||||
|     var sections = data.split(/\n\n/); | ||||
|     var headers = sections.shift(); | ||||
|     var headers = [sections.shift()]; | ||||
|     //everything until the first 'msgid ""' is considered header | ||||
|     while (headers[headers.length - 1].indexOf('msgid ""') < 0) { | ||||
|         headers.push(sections.shift()); | ||||
|     } | ||||
|     headers = headers.join('\n'); | ||||
|     var lines = sections.join('\n').split(/\n/); | ||||
|  | ||||
|     po.headers = { | ||||
| @@ -86,10 +97,11 @@ PO.parse = function (data) { | ||||
|         acc.push(line); | ||||
|         return acc; | ||||
|     }, []).forEach(function (header) { | ||||
|         if (header.match(/^#/)) { | ||||
|         if (header.match(/^#\./)) { | ||||
|             po.extractedComments.push(header.replace(/^#\.\s*/, '')); | ||||
|         } else if (header.match(/^#/)) { | ||||
|             po.comments.push(header.replace(/^#\s*/, '')); | ||||
|         } | ||||
|         if (header.match(/^"/)) { | ||||
|         } else if (header.match(/^"/)) { | ||||
|             header = header.trim().replace(/^"/, '').replace(/\\n"$/, ''); | ||||
|             var p = header.split(/:/); | ||||
|             var name = p.shift().trim(); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| { | ||||
|   "name": "pofile", | ||||
|   "description": "Parse and serialize Gettext PO files.", | ||||
|   "version": "0.3.0", | ||||
|   "version": "1.0.1", | ||||
|   "author": { | ||||
|     "name": "Ruben Vermeersch", | ||||
|     "email": "ruben@savanne.be", | ||||
|   | ||||
							
								
								
									
										1
									
								
								test/fixtures/big.po
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								test/fixtures/big.po
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| # French translation of Link (6.x-2.9) | ||||
|  | ||||
| # Copyright (c) 2011 by the French translation team | ||||
| # | ||||
| msgid "" | ||||
|   | ||||
							
								
								
									
										1
									
								
								test/fixtures/comment.po
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								test/fixtures/comment.po
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,7 @@ | ||||
| # French translation of Link (6.x-2.9) | ||||
| # Copyright (c) 2011 by the French translation team | ||||
| # | ||||
| #. extracted from test | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: Link (6.x-2.9)\n" | ||||
|   | ||||
| @@ -61,6 +61,9 @@ describe('Parse', function () { | ||||
|         assert.notEqual(po, null); | ||||
|         assert.equal(po.items.length, 2); | ||||
|  | ||||
|         assert.equal(po.extractedComments.length, 1); | ||||
|         assert.equal(po.extractedComments[0], 'extracted from test'); | ||||
|  | ||||
|         var item = po.items[0]; | ||||
|         assert.equal(item.msgid, 'Title, as plain text'); | ||||
|         assert.equal(item.msgstr, 'Attribut title, en tant que texte brut'); | ||||
|   | ||||
| @@ -74,6 +74,7 @@ describe('Write', function () { | ||||
|         var input = fs.readFileSync(__dirname + '/fixtures/comment.po', 'utf8'); | ||||
|         var po = PO.parse(input); | ||||
|         var str = po.toString(); | ||||
|         assertHasLine(str, '#. extracted from test'); | ||||
|         assertHasLine(str, '#. Extracted comment'); | ||||
|     }); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user