From 11614f64b354373839a0728e8ede42ca62d991ae Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Wed, 5 Oct 2016 17:26:46 +0200 Subject: [PATCH] Issue with unescaping \\n sequences fixed --- IDT.js | 60 +++++++++++++++++++++++++++---------------------- PO.js | 70 +++++++++++++++++++++++++++++++--------------------------- 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/IDT.js b/IDT.js index 179e72c..c0eabd8 100644 --- a/IDT.js +++ b/IDT.js @@ -49,9 +49,15 @@ function unescapeIDT(str) { if (!unescapeIDT_stat) { unescapeIDT_stat = { - "re_lf": new RegExp("\\\\n", "g"), - "re_cr": new RegExp("\\\\r", "g"), - "re_tab": new RegExp("\\\\t", "g") + "re_esc": new RegExp("\\\\(.)", "g"), + "fn_esc": function($0, $1) { + switch ($1) { + case "n" : return "\n"; + case "r" : return "\r"; + case "t" : return "\t"; + default : return $0; + } + } }; } @@ -62,7 +68,7 @@ function unescapeIDT(str) default: try { str = str.toString(); } catch (err) { return null; } } - return str.replace(unescapeIDT_stat.re_lf, "\n").replace(unescapeIDT_stat.re_cr, "\r").replace(unescapeIDT_stat.re_tab, "\t"); + return str.replace(unescapeIDT_stat.re_esc, unescapeIDT_stat.fn_esc); } @@ -332,8 +338,8 @@ IDT.prototype.save = function(path) // SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB -// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFIdWyvVouCkn -// SIG // 8OSpEB2Ivyk08KW8oIISyDCCA+4wggNXoAMCAQICEH6T +// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFLsa75t64gpu +// SIG // 2OdK6hpOex2ar2DqoIISyDCCA+4wggNXoAMCAQICEH6T // SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx // SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh // SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK @@ -487,30 +493,30 @@ IDT.prototype.save = function(path) // SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA // SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG // SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3 -// SIG // DQEJBDEWBBSrAbSARqkSnjnrmydyaZzWb2Ll+DANBgkq -// SIG // hkiG9w0BAQEFAASCAQAidT5VwnqHxnVculxHL2umGxV0 -// SIG // vWCdnNHA/EUNS+HkeCYrVw1LDEf0iI5MCNMvpocsAVDI -// SIG // gVUpHZGq24YW1nRxg2udtwoed1Ul160/RjeuPNkyAQi3 -// SIG // 6gZbDSmdPbNuDtPpge3hIvUt7m643G8UhiRgTRFWOvWg -// SIG // lzWqNIoMunzSi79jVXo8rwdJlUNAa9KkO44buMz/Z7wK -// SIG // 5hsvMbM4YF9yO8exGTf6lJr0D0zyAiaUvOITAMFM82k0 -// SIG // Ufo/eqxMDQYBQzNXAkG7pqirMHN+h2ElZbjwytYFxoTa -// SIG // Ux6Kz/dxKO58axl+mDiD2tVFy7DXGL8mIRGrNKsimS5G -// SIG // QMgUgNJ9oYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 +// SIG // DQEJBDEWBBRu5xBAe5kcb77O84IZ9XWRuoWXWTANBgkq +// SIG // hkiG9w0BAQEFAASCAQByCKevP+rGuM9qUDq+tuDe4oGb +// SIG // qKim3ZgdbJxhX+RO36TWayaPBCTODcZmtIIXMYvBvymr +// SIG // MafcGt9+IKbF1ul+6nu+Ae309fS+EQIPeIsdKn6Ahxy7 +// SIG // pV8Myi6Mssf08fTPNpu1cqHiJboHrGGN1aBV2TqNTLj8 +// SIG // D+6MLHgHl4xfnB1b3yA6CwU4BQzLDAcv1LPsyM+nCeLx +// SIG // E/BRIaS7VqORznUst4XSwHQhDzhd+D4giulZQHUbIbQr +// SIG // /WYQDFIH2P0gDrHrC7VU1FNDD3i49GUHabIVB1MtO7uf +// SIG // dqnH7FIGKD985BtuxLF8aKwnwWN14fLap1ah0zZePCxv +// SIG // 4dfx7nqgoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 // SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 // SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h // SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g // SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd // SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI -// SIG // hvcNAQkFMQ8XDTE2MTAwNDEzNDU0OFowIwYJKoZIhvcN -// SIG // AQkEMRYEFFm5vVWAupoE5hrqky+mray9PbyCMA0GCSqG -// SIG // SIb3DQEBAQUABIIBACC0a6jzlQb83HUYIdBo6TmwdYeT -// SIG // D0mO+mF0sssDOq/s74xdpMGQcVQ6DXVF4c1URoFuTTVT -// SIG // u9YLtbXepvxgCCrr2RYbDEGNsz7Bbwbhe4BweAis3fWx -// SIG // cJjMqr+5QWDN6A8+UHzApoSr9jVHr7/4K0vTIhnqI9jQ -// SIG // GRhFz4ygCMgZYVeiVAVgIsVesSXgdinWxVlGexzkCAeD -// SIG // UdCEIIA7X3f+DWkRgNyEFXRZ4Fn3ZNxYq/bISBNFAlcw -// SIG // cBmCfSzjjnndkfSY8nNCPNAcnNlpsD6um00QfXKjM+Lc -// SIG // PO6I7qBJt6mg/G0hcSUuohUyfC1z77aZdhquN5aCRayJ -// SIG // Fg8Y+sE= +// SIG // hvcNAQkFMQ8XDTE2MTAwNTE1MjU0MlowIwYJKoZIhvcN +// SIG // AQkEMRYEFJEBTdR3yRRNSVqbpCrpNXyO8/1UMA0GCSqG +// SIG // SIb3DQEBAQUABIIBAFIuLB0zeuMize7hXz7DXDrKdex9 +// SIG // /PuFKsKaQU1FFL9Vw68Wn2HAq+KmqQNo5LGmWXKZiO5x +// SIG // sGyfd17mCessQKjzuCXe0cnKwHWYcQ8KFlWQmV1dbBZI +// SIG // d1OfIDkjgD72/+Q2tLyjjKAjfZCDILnZHCOwediOS/Qs +// SIG // RPTLC0KS1ChA5BttKE3D3BYgujt2+cFU7ox9bW+VlkFj +// SIG // CwuzttwJmVgMMfX2T8bU9u3DNzL5/L6fCSKS53L/uZhL +// SIG // 35ySvpyOYa1VER014WeXmBJaDXEOifdj5+/gTAVSortp +// SIG // lVIJWb0DmIrYyTJhhLsBpIp6gwUsZelktIYh/qYkGe06 +// SIG // nWpHOM8= // SIG // End signature block diff --git a/PO.js b/PO.js index 6c34f75..403c240 100644 --- a/PO.js +++ b/PO.js @@ -54,14 +54,20 @@ function unescapePO(str) { if (!unescapePO_stat) { unescapePO_stat = { - "re_bslash": new RegExp("\\\\\\\\", "g"), - "re_bs": new RegExp("\\\\b", "g"), - "re_ff": new RegExp("\\\\f", "g"), - "re_lf": new RegExp("\\\\n", "g"), - "re_cr": new RegExp("\\\\r", "g"), - "re_tab": new RegExp("\\\\t", "g"), - "re_apost": new RegExp("\\\\\\\'", "g"), - "re_quot": new RegExp("\\\\\\\"", "g") + "re_esc": new RegExp("\\\\(.)", "g"), + "fn_esc": function($0, $1) { + switch ($1) { + case "\\": return "\\"; + case "b" : return "\b"; + case "f" : return "\f"; + case "n" : return "\n"; + case "r" : return "\r"; + case "t" : return "\t"; + case "\'": return "\'"; + case "\"": return "\""; + default : return $0; + } + } }; } @@ -72,7 +78,7 @@ function unescapePO(str) default: try { str = str.toString(); } catch (err) { return null; } } - return str.replace(unescapePO_stat.re_bslash, "\\").replace(unescapePO_stat.re_bs, "\b").replace(unescapePO_stat.re_ff, "\f").replace(unescapePO_stat.re_lf, "\n").replace(unescapePO_stat.re_cr, "\r").replace(unescapePO_stat.re_tab, "\t").replace(unescapePO_stat.re_apost, "\'").replace(unescapePO_stat.re_quot, "\""); + return str.replace(unescapePO_stat.re_esc, unescapePO_stat.fn_esc); } @@ -279,8 +285,8 @@ POCatalog.prototype.save = function(path) // SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB -// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFC7NxHFCd9bB -// SIG // rmh9aao27/VkB387oIISyDCCA+4wggNXoAMCAQICEH6T +// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFPxSrcU7ii+N +// SIG // mmI20NF64BTvjTJyoIISyDCCA+4wggNXoAMCAQICEH6T // SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx // SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh // SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK @@ -434,30 +440,30 @@ POCatalog.prototype.save = function(path) // SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA // SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG // SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3 -// SIG // DQEJBDEWBBTCEEkbHEYF8BuDJFvZB4tVmRMXQjANBgkq -// SIG // hkiG9w0BAQEFAASCAQCSfqG1JdavPFBQt60dhTf2MTzJ -// SIG // MjKnVmur3bOTsKd3f+cNcwlprzbKSoCSA7HcYwSzQbR6 -// SIG // PGx7ifbE6HeICivLYEpOgdcYXUJ3zc2baRN0BjP0TVMN -// SIG // vY0j4mK42K7z7Fv1UhDb1fzJ/ayUQxeF4/sVhhfUKv3N -// SIG // t9Q4fdFPPH3lam9h/16sUL42DqTQGto+94tp7/XDLp+I -// SIG // bwlf25Rf+wJBpldAksXEXodbK3jHhio4YU1gTDMDIlh+ -// SIG // OkHr4gAeNKCZ34qoId1WpuEK0noJRcj6GKnsPiX7yiwv -// SIG // nQhunLXoW633DYIoAltUiNf5KYtPsbrpAF1hAnT2aCgG -// SIG // 0aiKR3UdoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 +// SIG // DQEJBDEWBBRidHD90RSeHfCmlO7nvQQOx8/DyjANBgkq +// SIG // hkiG9w0BAQEFAASCAQB5sWYYj32ZWgN5nCKwCrS2/TL/ +// SIG // 8yZsO7N2Ej4EAnnLHK8+WxnQVMnfvVpxzHPTbEmuu9S9 +// SIG // TybpoSjPleSPe36VMAsF/+6HHl2NUz2gIjx6f/Wi0abu +// SIG // wO6pubYZwhv/xXF050AN5+sI+FPzmOw2IyXbKMZ6y/ZU +// SIG // q6xwp849ia1UsGs1RqO8jMlh4Cp6M9E84jUSDnnJTcRo +// SIG // EgqKanmpcydZmiiyS2NPYwNST7LqUOvMhhcwo8T/4sEP +// SIG // 4F5JGQa7kPkbHPpz/yFVC0HIkLs3hg+cqWVry4I/bOjw +// SIG // fZlDo5R5XIiYWaSAfhzK1RKVZKOlKNfXkiT90m40Ommx +// SIG // nx2lGOzsoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0 // SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 // SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h // SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g // SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd // SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI -// SIG // hvcNAQkFMQ8XDTE2MTAwNTE1MTI0OVowIwYJKoZIhvcN -// SIG // AQkEMRYEFMiK7VIQt1sVeidPMdCkfReV6BHrMA0GCSqG -// SIG // SIb3DQEBAQUABIIBABQg3juU7zy7ol9TcyCHascUl3rm -// SIG // eEHttRyb4jUHBCJgtsXt1Tuqls6NNAe3DV+Me3/0gu+W -// SIG // YAzAvjwgGDNT7gKUx5UUH3b5pjsOlpvE1ARQkFUF9nEx -// SIG // NPaKJ4Olpq1i/QrE0GsvkGjWYXhFJGxSNAV9VcIZdQjl -// SIG // MPfB/bYjxbQ1A3tpsIqoO9jhE2NXz8jsyIwQOqq1qi6b -// SIG // HJRnfAi/Hm/LYb3UN/2EpHlocgiE+oegFzkItv0IN0xx -// SIG // T23jnbVsrK9kzV9rlucYUJumvEARNY7HDzifdcqYunwi -// SIG // DwRGN449hdY5BZwsSwH/pllBn44ViCuv0rPLLzOi4Zkf -// SIG // 8o4Ovgs= +// SIG // hvcNAQkFMQ8XDTE2MTAwNTE1MjU0NVowIwYJKoZIhvcN +// SIG // AQkEMRYEFIE6uQtHp8DPF6h/N7mHvZLeSJ6ZMA0GCSqG +// SIG // SIb3DQEBAQUABIIBADCfC5Rp/px7hzFv+6/taoEieYbH +// SIG // VI1To/FE6s9oq8xXgnQ8a9zQqwCuEPFgW9t19t5RIJu1 +// SIG // bUBPTsGlri1/1rWRFtqpmRlUnPLbFqd+h1qRaC+NTgkQ +// SIG // vwH6t7GAb7C11jb4Ud4Z4/vDvxTkKl+O9bcySYSTf17c +// SIG // o3F25+TO05xQiPnmOoN8elz9ujTja/4+trXVOSkYfVmC +// SIG // 95quyzg2hTedg9c6u8l+DEwNRONTpY3EAoiq1rWsV3kp +// SIG // q/bUNsIzePX7FipcekLhaJZCpVRzBSNGVRAIePZzicZo +// SIG // e6KoJt2XZbS+sCp7XdSaD+7Fd9Qq6HDj84A8m8NtfbMN +// SIG // Aocyx6k= // SIG // End signature block