UNPKG

android-sex-size

Version:

a nodejs cli tool for android screen adaptation

77 lines (71 loc) 2.2 kB
_ = require 'lodash' fs = require 'fs' uid = require 'uid' colors = require 'colors/safe' glob = require 'glob' mkdirs = require './mkdirs' convert = require 'xml-js' Promise = require 'bluebird' read = Promise.promisify fs.readFile write = Promise.promisify fs.writeFile SEED = 10 duplicate = false # reserved names = {} expect = (v) -> /^-?\d+((\.?\d+(dp|sp))|(dp|sp))$/.test v DECLARATION = '<?xml version="1.0" encoding="utf-8"?>' dispatcher = (file, elements) -> read file, 'utf-8' .then (xmlstr) -> document = convert.xml2js xmlstr parser document, elements xmloutstr = convert.js2xml document, indentAttributes: true ignoreDeclaration: true spaces: 4 write file, "#{DECLARATION}#{xmloutstr}" .then -> console.log "#{colors.yellow '+'} [#{file}] #{colors.green 'extracted.'}" parser = (document, elements) -> for key, value of document if _.isArray value for v in value parser v, elements else if _.isObject value parser value, elements else if expect value name = "ithot#{uid(SEED)}" elements.push type: 'element' name: 'dimen' attributes: name: name elements: [ type: 'text' text: value ] document[key] = "@dimen/#{name}" handler = ({extract, output}) -> files = unless fs.lstatSync(extract).isDirectory() then [extract] else glob.sync("#{extract}/**/!(dimens).xml") dimens = declaration: attributes: version: '1.0' encoding: 'utf-8' elements: [ type: 'element' name: 'resources' elements: [] ] promises = for file in files dispatcher file, dimens.elements[0].elements Promise .all promises .then -> mkdirs output .then -> write "#{output}/dimens.xml", convert.js2xml(dimens, spaces: 4) .then -> console.log "> #{colors.cyan('all done.')}" module.exports = (option) -> handler option