123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/usr/bin/env node
-
- 'use strict';
-
- var parseArgs = require('minimist');
- var gonzales = require('..');
- var fs = require('fs');
- var path = require('path');
-
- var options = getOptions();
-
- if (options.help) {
- displayHelp();
- process.exit(0);
- }
-
- if (isSTDIN()) {
- processSTDIN();
- } else {
- processFile(options._[0]);
- }
-
- function getOptions() {
- var parserOptions = {
- boolean: ['silent', 'simple'],
- alias: {
- help: 'h',
- syntax: 's',
- context: 'c'
- }
- };
- return parseArgs(process.argv.slice(2), parserOptions);
- }
-
- function isSTDIN() {
- return options._.indexOf('-') !== -1;
- }
-
- function processSTDIN() {
- var input = '';
- process.stdin.resume();
- process.stdin.setEncoding('utf8');
- process.stdin.on('data', data => {
- input += data;
- });
- process.stdin.on('end', () => {
- processInputData(input);
- });
- }
-
- function processFile(file) {
- if (!file) process.exit(0);
- if (!options.syntax) options.syntax = path.extname(file).substring(1);
- var css = fs.readFileSync(file, 'utf-8').trim();
- processInputData(css);
- }
-
- function processInputData(input) {
- try {
- var ast = gonzales.parse(input, {
- syntax: options.syntax,
- context: options.context
- });
- printTree(ast);
- process.exit(0);
- } catch (e) {
- if (!options.silent) process.stderr.write(e.toString());
- process.exit(1);
- }
- }
-
- function printTree(ast) {
- if (!options.simple) {
- var tree = ast.toJson();
- process.stdout.write(tree);
- } else {
- var lastLevel;
-
- ast.traverse(function(node, i, parent, lastLevel) {
- var type = node.type;
- var spaces = new Array(lastLevel).join(' |');
- if (typeof node.content === 'string') {
- var content = JSON.stringify(node.content);
- console.log(spaces, '->', type);
- console.log(spaces, ' ', content);
- } else {
- console.log(spaces, '->', type);
- }
- });
-
- var spaces = new Array(lastLevel).join(' -');
- console.log(spaces);
- }
- }
-
- function displayHelp() {
- var help = [
- 'NAME',
- ' gonzlaes-pe — Parse a css file and print its parse tree in JSON',
- '',
- 'SYNOPSIS',
- ' gonzales-pe [options] file.js',
- ' cat file.js | gonzales-pe [options] -',
- '',
- 'OPTIONS',
- ' -s, --syntax',
- ' Syntax name: css, less, sass or scss.',
- ' -c, --context',
- ' Context of code part. See docs on node types for more info.',
- ' --simple',
- ' Print a simplified parse tree structure instead of JSON.',
- ' --silent',
- ' Don\'t print any error messages.'
- ];
- console.log(help.join('\n'));
- }
|