grammarInvoker.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. var sys = require('sys'),
  2. fs = require('fs'),
  3. ometa = require('ometa'),
  4. creatingParser = false;
  5. var fixReadFile = function(rawFile) {
  6. return rawFile.slice(1).replace(/\\n/g, '\n');
  7. };
  8. var createParser = function(parserInitializer) {
  9. if(!creatingParser) {
  10. creatingParser = true;
  11. //fs.readFile(__dirname + '/../src/cssSelector.ometa', 'utf8', function(err, contents) {
  12. fs.readFile(__dirname + '/../../ometa-js/newLineGrammar.ometa', 'utf8', function(err, contents) {
  13. if(err) {
  14. parserInitializer.setParser(err);
  15. } else {
  16. ometa.createParser(fixReadFile(contents), parserInitializer.setParser);
  17. }
  18. creatingParser = false;
  19. });
  20. }
  21. };
  22. var parserInitializer = (function() {
  23. var createdParser,
  24. parserErr,
  25. queuedCallbacks = [],
  26. that = {};
  27. that.setParser = function(err, parser) {
  28. parserErr = err;
  29. createdParser = parser;
  30. queuedCallbacks.forEach(function(callback) {
  31. callback(parserErr, createdParser);
  32. });
  33. queuedCallbacks = [];
  34. };
  35. that.addCallback = function(callback) {
  36. if(parserErr || createdParser) {
  37. callback(parserErr, createdParser);
  38. } else {
  39. queuedCallbacks.push(callback);
  40. createParser(that);
  41. }
  42. };
  43. that.reset = function() {
  44. createdParser = null;
  45. };
  46. return that;
  47. })();
  48. var parse = function(selector, callback) {
  49. parserInitializer.addCallback(function(err, parser) {
  50. if(err) {
  51. callback(err);
  52. } else {
  53. parser.parse(selector, 'selectors_group', function(err, css) {
  54. if(err) {
  55. callback(err);
  56. } else {
  57. //callback(null, css.toString());
  58. callback(null, css.join(''));
  59. }
  60. });
  61. }
  62. });
  63. };
  64. module.exports.parse = parse;
  65. module.exports.reset = parserInitializer.reset;
  66. var ssss = 'a,\nb';
  67. console.log(ssss);
  68. parse(ssss, function(err, shiznit) {
  69. if(err) {
  70. console.log(err);
  71. }
  72. console.log(shiznit);
  73. });