8 Commits

Author SHA1 Message Date
Ruben Vermeersch
f6119a57af Release v1.0.2 2015-09-23 07:41:22 +02:00
Ruben Vermeersch
6c09df93a2 Rebuild 2015-09-23 07:41:09 +02:00
Ruben Vermeersch
1bf498ecf7 Merge pull request #19 from rubenv/no_headers
Add proper support for no headers in po files
2015-09-23 07:40:44 +02:00
Julian Bäume
71bb04f046 add support for po files without headers
basically fix all the examples.
2015-09-22 23:36:12 +02:00
Julian Bäume
ba9a2db453 add examples for po files without any headers
those should at least be fixed
2015-09-22 10:38:43 +02:00
Ruben Vermeersch
fbe773c636 Release v1.0.1 2015-09-21 09:35:02 +02:00
Ruben Vermeersch
7ceda82794 Merge pull request #17 from rubenv/fix_issue16
fix issue #16
2015-09-21 09:34:41 +02:00
Julian Bäume
d1be0f51b0 fix issue #16
add a blank line in the comments of the headers of the big.po file. This
breaks parsing the headers. msgcat of gettext tools just ignores empty
lines until a header is found and treats everything above as header
comment.

The change to the library itself fixes the tests again, after the blank
linke broke 3.
2015-09-21 09:13:43 +02:00
8 changed files with 77 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "pofile",
"version": "1.0.0",
"version": "1.0.2",
"authors": [
"Ruben Vermeersch <ruben@rocketeer.be>"
],

12
dist/pofile.js vendored
View File

@@ -67,7 +67,17 @@ 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 = [];
//everything until the first 'msgid ""' is considered header
while (sections[0] && (headers.length === 0 || headers[headers.length - 1].indexOf('msgid ""') < 0)) {
if (sections[0].match(/msgid "[^"]/)) {
//found first real string, adding a dummy header item
headers.push('msgid ""');
} else {
headers.push(sections.shift());
}
}
headers = headers.join('\n');
var lines = sections.join('\n').split(/\n/);
po.headers = {

2
dist/pofile.min.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -64,7 +64,17 @@ 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 = [];
//everything until the first 'msgid ""' is considered header
while (sections[0] && (headers.length === 0 || headers[headers.length - 1].indexOf('msgid ""') < 0)) {
if (sections[0].match(/msgid "[^"]/)) {
//found first real string, adding a dummy header item
headers.push('msgid ""');
} else {
headers.push(sections.shift());
}
}
headers = headers.join('\n');
var lines = sections.join('\n').split(/\n/);
po.headers = {

View File

@@ -1,7 +1,7 @@
{
"name": "pofile",
"description": "Parse and serialize Gettext PO files.",
"version": "1.0.0",
"version": "1.0.2",
"author": {
"name": "Ruben Vermeersch",
"email": "ruben@savanne.be",

View File

@@ -1,4 +1,5 @@
# French translation of Link (6.x-2.9)
# Copyright (c) 2011 by the French translation team
#
msgid ""

8
test/fixtures/no_header.po vendored Normal file
View File

@@ -0,0 +1,8 @@
# some comment
msgid "First id, no header"
msgstr ""
msgid "A second string"
msgstr ""

View File

@@ -28,3 +28,46 @@ describe('Headers', function () {
assert.equal(Object.keys(po.headers).length, 12);
});
});
describe('PO files with no headers', function () {
it('Parses an empty string', function () {
var po = PO.parse('');
assert.notEqual(po, null);
// all headers should be empty
for (var key in po.headers) {
assert.equal(po.headers[key], '');
}
assert.equal(po.items.length, 0);
});
it('Parses a minimal example', function () {
var po = PO.parse('msgid "minimal PO"\nmsgstr ""');
assert.notEqual(po, null);
// all headers should be empty
for (var key in po.headers) {
assert.equal(po.headers[key], '');
}
assert.equal(po.items.length, 1);
});
describe('advanced example', function () {
var po;
before(function (done) {
PO.load(__dirname + '/fixtures/no_header.po', function (err, result) {
assert.equal(err, null);
po = result;
done();
});
});
it('Parses the po file', function () {
assert.notEqual(po, null);
});
it('Finds all items', function () {
assert.equal(po.items.length, 2);
});
});
});