Merge pull request #19 from rubenv/no_headers
Add proper support for no headers in po files
This commit is contained in:
commit
1bf498ecf7
11
lib/po.js
11
lib/po.js
@ -64,10 +64,15 @@ PO.parse = function (data) {
|
|||||||
data = data.replace(/\r\n/g, '\n');
|
data = data.replace(/\r\n/g, '\n');
|
||||||
var po = new PO();
|
var po = new PO();
|
||||||
var sections = data.split(/\n\n/);
|
var sections = data.split(/\n\n/);
|
||||||
var headers = [sections.shift()];
|
var headers = [];
|
||||||
//everything until the first 'msgid ""' is considered header
|
//everything until the first 'msgid ""' is considered header
|
||||||
while (headers[headers.length - 1].indexOf('msgid ""') < 0) {
|
while (sections[0] && (headers.length === 0 || headers[headers.length - 1].indexOf('msgid ""') < 0)) {
|
||||||
headers.push(sections.shift());
|
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');
|
headers = headers.join('\n');
|
||||||
var lines = sections.join('\n').split(/\n/);
|
var lines = sections.join('\n').split(/\n/);
|
||||||
|
8
test/fixtures/no_header.po
vendored
Normal file
8
test/fixtures/no_header.po
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# some comment
|
||||||
|
|
||||||
|
msgid "First id, no header"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "A second string"
|
||||||
|
msgstr ""
|
||||||
|
|
@ -28,3 +28,46 @@ describe('Headers', function () {
|
|||||||
assert.equal(Object.keys(po.headers).length, 12);
|
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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user