Compare commits
	
		
			14 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9060221403 | ||
| 
						 | 
					63c4209cd5 | ||
| 
						 | 
					104d114d5d | ||
| 
						 | 
					db5e540824 | ||
| 
						 | 
					cfc9b2ae82 | ||
| 
						 | 
					2e1640d847 | ||
| 
						 | 
					b499b7f449 | ||
| 
						 | 
					e42dc28fd2 | ||
| 
						 | 
					e1742e66a6 | ||
| 
						 | 
					4cfebdee80 | ||
| 
						 | 
					d8fc514359 | ||
| 
						 | 
					d202e39a60 | ||
| 
						 | 
					f5056bc57f | ||
| 
						 | 
					af94d8ff5e | 
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "pofile",
 | 
					  "name": "pofile",
 | 
				
			||||||
  "version": "0.2.10",
 | 
					  "version": "0.3.0",
 | 
				
			||||||
  "authors": [
 | 
					  "authors": [
 | 
				
			||||||
    "Ruben Vermeersch <ruben@rocketeer.be>"
 | 
					    "Ruben Vermeersch <ruben@rocketeer.be>"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										62
									
								
								dist/pofile.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								dist/pofile.js
									
									
									
									
										vendored
									
									
								
							@@ -120,8 +120,32 @@ PO.parse = function (data) {
 | 
				
			|||||||
    function extract(string) {
 | 
					    function extract(string) {
 | 
				
			||||||
        string = trim(string);
 | 
					        string = trim(string);
 | 
				
			||||||
        string = string.replace(/^[^"]*"|"$/g, '');
 | 
					        string = string.replace(/^[^"]*"|"$/g, '');
 | 
				
			||||||
        string = string.replace(/\\"/g, '"');
 | 
					        string = string.replace(/\\([abtnvfr'"\\?]|([0-7]{3})|x([0-9a-fA-F]{2}))/g, function (match, esc, oct, hex) {
 | 
				
			||||||
        string = string.replace(/\\\\/g, '\\');
 | 
					            if (oct) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(parseInt(oct, 8));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (hex) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(parseInt(hex, 16));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            switch (esc) {
 | 
				
			||||||
 | 
					                case 'a':
 | 
				
			||||||
 | 
					                    return '\x07';
 | 
				
			||||||
 | 
					                case 'b':
 | 
				
			||||||
 | 
					                    return '\b';
 | 
				
			||||||
 | 
					                case 't':
 | 
				
			||||||
 | 
					                    return '\t';
 | 
				
			||||||
 | 
					                case 'n':
 | 
				
			||||||
 | 
					                    return '\n';
 | 
				
			||||||
 | 
					                case 'v':
 | 
				
			||||||
 | 
					                    return '\v';
 | 
				
			||||||
 | 
					                case 'f':
 | 
				
			||||||
 | 
					                    return '\f';
 | 
				
			||||||
 | 
					                case 'r':
 | 
				
			||||||
 | 
					                    return '\r';
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return esc;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
        return string;
 | 
					        return string;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -213,8 +237,27 @@ PO.Item.prototype.toString = function () {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // reverse what extract(string) method during PO.parse does
 | 
					    // reverse what extract(string) method during PO.parse does
 | 
				
			||||||
    var _escape = function (string) {
 | 
					    var _escape = function (string) {
 | 
				
			||||||
        string = string.replace(/\\/g, '\\\\');
 | 
					        // don't unescape \n, since string can never contain it
 | 
				
			||||||
        return string.replace(/"/g, '\\"');
 | 
					        // since split('\n') is called on it
 | 
				
			||||||
 | 
					        string = string.replace(/[\x07\b\t\v\f\r"\\]/g, function (match) {
 | 
				
			||||||
 | 
					            switch (match) {
 | 
				
			||||||
 | 
					                case '\x07':
 | 
				
			||||||
 | 
					                    return '\\a';
 | 
				
			||||||
 | 
					                case '\b':
 | 
				
			||||||
 | 
					                    return '\\b';
 | 
				
			||||||
 | 
					                case '\t':
 | 
				
			||||||
 | 
					                    return '\\t';
 | 
				
			||||||
 | 
					                case '\v':
 | 
				
			||||||
 | 
					                    return '\\v';
 | 
				
			||||||
 | 
					                case '\f':
 | 
				
			||||||
 | 
					                    return '\\f';
 | 
				
			||||||
 | 
					                case '\r':
 | 
				
			||||||
 | 
					                    return '\\r';
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return '\\' + match;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return string;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var _process = function (keyword, text, i) {
 | 
					    var _process = function (keyword, text, i) {
 | 
				
			||||||
@@ -247,7 +290,9 @@ PO.Item.prototype.toString = function () {
 | 
				
			|||||||
        lines.push('#: ' + ref);
 | 
					        lines.push('#: ' + ref);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var flags = Object.keys(this.flags);
 | 
					    var flags = Object.keys(this.flags).filter(function (flag) {
 | 
				
			||||||
 | 
					        return !!this.flags[flag];
 | 
				
			||||||
 | 
					    }, this);
 | 
				
			||||||
    if (flags.length > 0) {
 | 
					    if (flags.length > 0) {
 | 
				
			||||||
        lines.push('#, ' + flags.join(','));
 | 
					        lines.push('#, ' + flags.join(','));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -262,7 +307,12 @@ PO.Item.prototype.toString = function () {
 | 
				
			|||||||
                });
 | 
					                });
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                text = isArray(text) ? text.join() : text;
 | 
					                text = isArray(text) ? text.join() : text;
 | 
				
			||||||
                lines = lines.concat(mkObsolete + _process(keyword, text));
 | 
					                var processed = _process(keyword, text);
 | 
				
			||||||
 | 
					                //handle \n in single-line texts (can not be handled in _escape)
 | 
				
			||||||
 | 
					                for (var i = 1; i < processed.length - 1; i++) {
 | 
				
			||||||
 | 
					                    processed[i] = processed[i].slice(0, -1) + '\\n"';
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                lines = lines.concat(mkObsolete + processed.join('\n' + mkObsolete));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								dist/pofile.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/pofile.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										62
									
								
								lib/po.js
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								lib/po.js
									
									
									
									
									
								
							@@ -119,8 +119,32 @@ PO.parse = function (data) {
 | 
				
			|||||||
    function extract(string) {
 | 
					    function extract(string) {
 | 
				
			||||||
        string = trim(string);
 | 
					        string = trim(string);
 | 
				
			||||||
        string = string.replace(/^[^"]*"|"$/g, '');
 | 
					        string = string.replace(/^[^"]*"|"$/g, '');
 | 
				
			||||||
        string = string.replace(/\\"/g, '"');
 | 
					        string = string.replace(/\\([abtnvfr'"\\?]|([0-7]{3})|x([0-9a-fA-F]{2}))/g, function (match, esc, oct, hex) {
 | 
				
			||||||
        string = string.replace(/\\\\/g, '\\');
 | 
					            if (oct) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(parseInt(oct, 8));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (hex) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(parseInt(hex, 16));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            switch (esc) {
 | 
				
			||||||
 | 
					                case 'a':
 | 
				
			||||||
 | 
					                    return '\x07';
 | 
				
			||||||
 | 
					                case 'b':
 | 
				
			||||||
 | 
					                    return '\b';
 | 
				
			||||||
 | 
					                case 't':
 | 
				
			||||||
 | 
					                    return '\t';
 | 
				
			||||||
 | 
					                case 'n':
 | 
				
			||||||
 | 
					                    return '\n';
 | 
				
			||||||
 | 
					                case 'v':
 | 
				
			||||||
 | 
					                    return '\v';
 | 
				
			||||||
 | 
					                case 'f':
 | 
				
			||||||
 | 
					                    return '\f';
 | 
				
			||||||
 | 
					                case 'r':
 | 
				
			||||||
 | 
					                    return '\r';
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return esc;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
        return string;
 | 
					        return string;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -212,8 +236,27 @@ PO.Item.prototype.toString = function () {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // reverse what extract(string) method during PO.parse does
 | 
					    // reverse what extract(string) method during PO.parse does
 | 
				
			||||||
    var _escape = function (string) {
 | 
					    var _escape = function (string) {
 | 
				
			||||||
        string = string.replace(/\\/g, '\\\\');
 | 
					        // don't unescape \n, since string can never contain it
 | 
				
			||||||
        return string.replace(/"/g, '\\"');
 | 
					        // since split('\n') is called on it
 | 
				
			||||||
 | 
					        string = string.replace(/[\x07\b\t\v\f\r"\\]/g, function (match) {
 | 
				
			||||||
 | 
					            switch (match) {
 | 
				
			||||||
 | 
					                case '\x07':
 | 
				
			||||||
 | 
					                    return '\\a';
 | 
				
			||||||
 | 
					                case '\b':
 | 
				
			||||||
 | 
					                    return '\\b';
 | 
				
			||||||
 | 
					                case '\t':
 | 
				
			||||||
 | 
					                    return '\\t';
 | 
				
			||||||
 | 
					                case '\v':
 | 
				
			||||||
 | 
					                    return '\\v';
 | 
				
			||||||
 | 
					                case '\f':
 | 
				
			||||||
 | 
					                    return '\\f';
 | 
				
			||||||
 | 
					                case '\r':
 | 
				
			||||||
 | 
					                    return '\\r';
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return '\\' + match;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return string;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var _process = function (keyword, text, i) {
 | 
					    var _process = function (keyword, text, i) {
 | 
				
			||||||
@@ -246,7 +289,9 @@ PO.Item.prototype.toString = function () {
 | 
				
			|||||||
        lines.push('#: ' + ref);
 | 
					        lines.push('#: ' + ref);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var flags = Object.keys(this.flags);
 | 
					    var flags = Object.keys(this.flags).filter(function (flag) {
 | 
				
			||||||
 | 
					        return !!this.flags[flag];
 | 
				
			||||||
 | 
					    }, this);
 | 
				
			||||||
    if (flags.length > 0) {
 | 
					    if (flags.length > 0) {
 | 
				
			||||||
        lines.push('#, ' + flags.join(','));
 | 
					        lines.push('#, ' + flags.join(','));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -261,7 +306,12 @@ PO.Item.prototype.toString = function () {
 | 
				
			|||||||
                });
 | 
					                });
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                text = isArray(text) ? text.join() : text;
 | 
					                text = isArray(text) ? text.join() : text;
 | 
				
			||||||
                lines = lines.concat(mkObsolete + _process(keyword, text));
 | 
					                var processed = _process(keyword, text);
 | 
				
			||||||
 | 
					                //handle \n in single-line texts (can not be handled in _escape)
 | 
				
			||||||
 | 
					                for (var i = 1; i < processed.length - 1; i++) {
 | 
				
			||||||
 | 
					                    processed[i] = processed[i].slice(0, -1) + '\\n"';
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                lines = lines.concat(mkObsolete + processed.join('\n' + mkObsolete));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "pofile",
 | 
					  "name": "pofile",
 | 
				
			||||||
  "description": "Parse and serialize Gettext PO files.",
 | 
					  "description": "Parse and serialize Gettext PO files.",
 | 
				
			||||||
  "version": "0.2.10",
 | 
					  "version": "0.3.0",
 | 
				
			||||||
  "author": {
 | 
					  "author": {
 | 
				
			||||||
    "name": "Ruben Vermeersch",
 | 
					    "name": "Ruben Vermeersch",
 | 
				
			||||||
    "email": "ruben@savanne.be",
 | 
					    "email": "ruben@savanne.be",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								test/fixtures/c-strings.po
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								test/fixtures/c-strings.po
									
									
									
									
										vendored
									
									
								
							@@ -17,3 +17,43 @@ msgstr ""
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
msgid "The name field must not contain characters like \" or \\"
 | 
					msgid "The name field must not contain characters like \" or \\"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# possibility to reorder items depending on locale
 | 
				
			||||||
 | 
					#. Format of addresses
 | 
				
			||||||
 | 
					#. %1$s is the street
 | 
				
			||||||
 | 
					#. %2$s is the postal code
 | 
				
			||||||
 | 
					#. %3$s is the city
 | 
				
			||||||
 | 
					#. %4$s is the state
 | 
				
			||||||
 | 
					#. %5$s is the country
 | 
				
			||||||
 | 
					msgid ""
 | 
				
			||||||
 | 
					"%1$s\n"
 | 
				
			||||||
 | 
					"%2$s %3$s\n"
 | 
				
			||||||
 | 
					"%4$s\n"
 | 
				
			||||||
 | 
					"%5$s"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# "i18"ned code
 | 
				
			||||||
 | 
					#. used in <pre> environment, so don't remove any control sequences
 | 
				
			||||||
 | 
					msgid ""
 | 
				
			||||||
 | 
					"define('some/test/module', function () {\n"
 | 
				
			||||||
 | 
					"\t'use strict';\n"
 | 
				
			||||||
 | 
					"\treturn {};\n"
 | 
				
			||||||
 | 
					"});\n"
 | 
				
			||||||
 | 
					""
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					"define('random/test/file', function () {\n"
 | 
				
			||||||
 | 
					"\t'use strict';\n"
 | 
				
			||||||
 | 
					"\treturn {};\n"
 | 
				
			||||||
 | 
					"});\n"
 | 
				
			||||||
 | 
					""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# all one-letter escape characters
 | 
				
			||||||
 | 
					# be aware, that \a, \b, \v, \f and \r should not be used
 | 
				
			||||||
 | 
					# in i18ned messages (according to gettext tools)
 | 
				
			||||||
 | 
					# however, they should be properly parsed, anyway
 | 
				
			||||||
 | 
					msgid ""
 | 
				
			||||||
 | 
					"\a\b\t\n"
 | 
				
			||||||
 | 
					"\v\f\r"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					"\a\b\t\n"
 | 
				
			||||||
 | 
					"\v\f\r"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								test/fixtures/reference.po
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								test/fixtures/reference.po
									
									
									
									
										vendored
									
									
								
							@@ -24,3 +24,7 @@ msgstr "Attribut title, en tant que texte brut"
 | 
				
			|||||||
#: b
 | 
					#: b
 | 
				
			||||||
msgid "X"
 | 
					msgid "X"
 | 
				
			||||||
msgstr "Y"
 | 
					msgstr "Y"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: standard input:12 standard input:17
 | 
				
			||||||
 | 
					msgid "Z"
 | 
				
			||||||
 | 
					msgstr "ZZ"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,21 +67,32 @@ describe('Parse', function () {
 | 
				
			|||||||
        assert.deepEqual(item.extractedComments, ['Extracted comment']);
 | 
					        assert.deepEqual(item.extractedComments, ['Extracted comment']);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('Handles string references', function () {
 | 
					    describe('Handles string references', function () {
 | 
				
			||||||
        var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/reference.po', 'utf8'));
 | 
					        var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/reference.po', 'utf8'));
 | 
				
			||||||
        assert.notEqual(po, null);
 | 
					        assert.notEqual(po, null);
 | 
				
			||||||
        assert.equal(po.items.length, 2);
 | 
					        assert.equal(po.items.length, 3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var item = po.items[0];
 | 
					        it('in simple cases', function () {
 | 
				
			||||||
        assert.equal(item.msgid, 'Title, as plain text');
 | 
					            var item = po.items[0];
 | 
				
			||||||
        assert.equal(item.msgstr, 'Attribut title, en tant que texte brut');
 | 
					            assert.equal(item.msgid, 'Title, as plain text');
 | 
				
			||||||
        assert.deepEqual(item.comments, ['Comment']);
 | 
					            assert.equal(item.msgstr, 'Attribut title, en tant que texte brut');
 | 
				
			||||||
        assert.deepEqual(item.references, ['.tmp/crm/controllers/map.js']);
 | 
					            assert.deepEqual(item.comments, ['Comment']);
 | 
				
			||||||
 | 
					            assert.deepEqual(item.references, ['.tmp/crm/controllers/map.js']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        item = po.items[1];
 | 
					        it('with two different references', function () {
 | 
				
			||||||
        assert.equal(item.msgid, 'X');
 | 
					            var item = po.items[1];
 | 
				
			||||||
        assert.equal(item.msgstr, 'Y');
 | 
					            assert.equal(item.msgid, 'X');
 | 
				
			||||||
        assert.deepEqual(item.references, ['a', 'b']);
 | 
					            assert.equal(item.msgstr, 'Y');
 | 
				
			||||||
 | 
					            assert.deepEqual(item.references, ['a', 'b']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it('and does not process reference items', function () {
 | 
				
			||||||
 | 
					            var item = po.items[2];
 | 
				
			||||||
 | 
					            assert.equal(item.msgid, 'Z');
 | 
				
			||||||
 | 
					            assert.equal(item.msgstr, 'ZZ');
 | 
				
			||||||
 | 
					            assert.deepEqual(item.references, ['standard input:12 standard input:17']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('Parses flags', function () {
 | 
					    it('Parses flags', function () {
 | 
				
			||||||
@@ -133,19 +144,29 @@ describe('Parse', function () {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    describe('C-Strings', function () {
 | 
					    describe('C-Strings', function () {
 | 
				
			||||||
 | 
					        var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/c-strings.po', 'utf8'));
 | 
				
			||||||
        it('should parse the c-strings.po file', function () {
 | 
					        it('should parse the c-strings.po file', function () {
 | 
				
			||||||
            var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/c-strings.po', 'utf8'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            assert.notEqual(po, null);
 | 
					            assert.notEqual(po, null);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        it('should extract strings containing " and \\ characters', function () {
 | 
					        it('should extract strings containing " and \\ characters', function () {
 | 
				
			||||||
            var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/c-strings.po', 'utf8'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var items = po.items.filter(function (item) {
 | 
					            var items = po.items.filter(function (item) {
 | 
				
			||||||
                return (/^The name field must not contain/).test(item.msgid);
 | 
					                return (/^The name field must not contain/).test(item.msgid);
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            assert.equal(items[0].msgid, 'The name field must not contain characters like " or \\');
 | 
					            assert.equal(items[0].msgid, 'The name field must not contain characters like " or \\');
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it('should handle \\n characters', function () {
 | 
				
			||||||
 | 
					            var item = po.items[1];
 | 
				
			||||||
 | 
					            assert.equal(item.msgid, '%1$s\n%2$s %3$s\n%4$s\n%5$s');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it('should handle \\t characters', function () {
 | 
				
			||||||
 | 
					            var item = po.items[2];
 | 
				
			||||||
 | 
					            assert.equal(item.msgid, 'define(\'some/test/module\', function () {\n' +
 | 
				
			||||||
 | 
					                '\t\'use strict\';\n' +
 | 
				
			||||||
 | 
					                '\treturn {};\n' +
 | 
				
			||||||
 | 
					                '});\n');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,20 @@ function assertHasLine(str, line) {
 | 
				
			|||||||
    assert(found, 'Could not find line: ' + line);
 | 
					    assert(found, 'Could not find line: ' + line);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function assertDoesntHaveLine(str, line) {
 | 
				
			||||||
 | 
					    var lines = str.split('\n');
 | 
				
			||||||
 | 
					    var found = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (var i = 0; i < lines.length; i++) {
 | 
				
			||||||
 | 
					        if (lines[i].trim() === line) {
 | 
				
			||||||
 | 
					            found = true;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert(!found, 'Shouldn\'t have line: ' + line);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('Write', function () {
 | 
					describe('Write', function () {
 | 
				
			||||||
    it('write flags', function () {
 | 
					    it('write flags', function () {
 | 
				
			||||||
        var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8');
 | 
					        var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8');
 | 
				
			||||||
@@ -24,6 +38,17 @@ describe('Write', function () {
 | 
				
			|||||||
        assertHasLine(str, '#, fuzzy');
 | 
					        assertHasLine(str, '#, fuzzy');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('write flags only when true', function () {
 | 
				
			||||||
 | 
					        var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8');
 | 
				
			||||||
 | 
					        var po = PO.parse(input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Flip flag
 | 
				
			||||||
 | 
					        po.items[0].flags.fuzzy = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var str = po.toString();
 | 
				
			||||||
 | 
					        assertDoesntHaveLine(str, '#, fuzzy');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('write msgid', function () {
 | 
					    it('write msgid', function () {
 | 
				
			||||||
        var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8');
 | 
					        var input = fs.readFileSync(__dirname + '/fixtures/fuzzy.po', 'utf8');
 | 
				
			||||||
        var po = PO.parse(input);
 | 
					        var po = PO.parse(input);
 | 
				
			||||||
@@ -92,6 +117,15 @@ describe('Write', function () {
 | 
				
			|||||||
            assertHasLine(item.toString(), 'msgid "\\\\ should be written escaped"');
 | 
					            assertHasLine(item.toString(), 'msgid "\\\\ should be written escaped"');
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it('should escape \\n', function () {
 | 
				
			||||||
 | 
					            var item = new PO.Item();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            item.msgid = '\n should be written escaped';
 | 
				
			||||||
 | 
					            assertHasLine(item.toString(), 'msgid ""');
 | 
				
			||||||
 | 
					            assertHasLine(item.toString(), '"\\n"');
 | 
				
			||||||
 | 
					            assertHasLine(item.toString(), '" should be written escaped"');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        it('should write identical file after parsing a file', function () {
 | 
					        it('should write identical file after parsing a file', function () {
 | 
				
			||||||
            var input = fs.readFileSync(__dirname + '/fixtures/c-strings.po', 'utf8');
 | 
					            var input = fs.readFileSync(__dirname + '/fixtures/c-strings.po', 'utf8');
 | 
				
			||||||
            var po = PO.parse(input);
 | 
					            var po = PO.parse(input);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user