index.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. var sys = require('sys')
  2. , fs = require('fs')
  3. , path = require('path')
  4. , ometa = require('ometa')
  5. , rule = 'scssFile'
  6. , createdParser
  7. ;
  8. var fixReadFile = function(rawFile) {
  9. return rawFile.slice(1).replace(/\\n/g, '\n');
  10. };
  11. var getParser = function(callback) {
  12. if(!createdParser) {
  13. fs.readFile(path.join(__dirname, '/CssSelector.ometa'), 'utf8', function(err, cssSelectorContents) {
  14. var selectorFile = fixReadFile(cssSelectorContents);
  15. ometa.createParser(selectorFile, function(err, cssSelectorParser) {
  16. fs.readFile(path.join(__dirname, '/scss.ometa'), 'utf8', function(err, contents) {
  17. var contentFile = fixReadFile(contents);
  18. if(err) {
  19. callback(err);
  20. } else {
  21. ometa.createParser(contentFile, function(err, parser) {
  22. if(err) {
  23. callback(err);
  24. } else {
  25. createdParser = parser;
  26. callback(null, createdParser);
  27. }
  28. });
  29. }
  30. });
  31. });
  32. });
  33. } else {
  34. callback(null, createdParser);
  35. }
  36. };
  37. var parse = function(scssFile, callback) {
  38. getParser(function(err, parser) {
  39. if(err) {
  40. callback(err);
  41. } else {
  42. parser.parse(scssFile, rule, function(err, css) {
  43. require(__dirname + '/prettyPrint').render(css, function(inner, printed) {
  44. callback(err, printed);
  45. });
  46. });
  47. }
  48. });
  49. };
  50. module.exports.parse = parse;