.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / gonzales-pe / bin / gonzales.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/gonzales-pe/bin/gonzales.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/gonzales-pe/bin/gonzales.js
new file mode 100755 (executable)
index 0000000..22968a2
--- /dev/null
@@ -0,0 +1,116 @@
+#!/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'));
+}