11#!/usr/bin/env node
22'use strict' ;
33
4- const glob = require ( " glob" ) ;
4+ const glob = require ( ' glob' ) ;
55const path = require ( 'path' ) ;
66const yaml = require ( 'js-yaml' ) ;
77const fs = require ( 'fs' ) ;
8- const xml = require ( 'xml2js ' ) ;
8+ const cheerio = require ( 'cheerio ' ) ;
99const translate = require ( 'xlf-translate' ) ;
1010const Task = require ( 'data.task' ) ;
1111const R = require ( 'ramda' ) ;
@@ -33,6 +33,11 @@ const args = (() => {
3333 action : 'storeTrue'
3434 } ) ;
3535
36+ parser . addArgument ( [ '-e' , '--encoding' ] , {
37+ help : 'Specifies the message files encoding. Default is "utf-8".' ,
38+ defaultValue : 'utf-8'
39+ } ) ;
40+
3641 return parser . parseArgs ( ) ;
3742} ) ( ) ;
3843
@@ -53,7 +58,7 @@ const findFiles = wildcard => new Task((reject, resolve) => {
5358
5459// readFile :: FilePath -> Task FileContent
5560const readFile = filename => new Task ( ( reject , resolve ) => {
56- fs . readFile ( filename , 'utf8' , complete ( reject , resolve ) ) ;
61+ fs . readFile ( filename , args . encoding , complete ( reject , resolve ) ) ;
5762} ) ;
5863
5964// parseYaml :: FileContent -> Task YML
@@ -72,9 +77,8 @@ const verifyFile = files => new Task((reject, resolve) => {
7277
7378// parseXml :: FileContent -> Task XML
7479const parseXml = data => new Task ( ( reject , resolve ) => {
75- const parser = new xml . Parser ( ) ;
76-
77- parser . parseString ( data , complete ( reject , resolve ) ) ;
80+ const doc = cheerio . load ( data , { xmlMode : true , decodeEntities : false } )
81+ resolve ( doc ) ;
7882} ) ;
7983
8084// parseYamlFile :: FilePath -> Task YML
@@ -95,8 +99,7 @@ const safeTranslate = R.curry((data, translations) => new Task((reject, resolve)
9599
96100// writeFile :: (XML, Stats) -> Task Stats
97101const writeFile = obj => new Task ( ( reject , resolve ) => {
98- const builder = new xml . Builder ( ) ;
99- const out = builder . buildObject ( obj . data ) ;
102+ const out = obj . data . html ( ) ;
100103
101104 try {
102105 fs . writeFileSync ( args . file , out ) ;
0 commit comments