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