1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. var all = require('./helpers').all;
  2. var lineBreak = require('os').EOL;
  3. function store(serializeContext, token) {
  4. var value = typeof token == 'string' ?
  5. token :
  6. token[1];
  7. var wrap = serializeContext.wrap;
  8. wrap(serializeContext, value);
  9. track(serializeContext, value);
  10. serializeContext.output.push(value);
  11. }
  12. function wrap(serializeContext, value) {
  13. if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
  14. track(serializeContext, lineBreak);
  15. serializeContext.output.push(lineBreak);
  16. }
  17. }
  18. function track(serializeContext, value) {
  19. var parts = value.split('\n');
  20. serializeContext.line += parts.length - 1;
  21. serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
  22. }
  23. function serializeStyles(tokens, context) {
  24. var serializeContext = {
  25. column: 0,
  26. format: context.options.format,
  27. indentBy: 0,
  28. indentWith: '',
  29. line: 1,
  30. output: [],
  31. spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
  32. store: store,
  33. wrap: context.options.format.wrapAt ?
  34. wrap :
  35. function () { /* noop */ }
  36. };
  37. all(serializeContext, tokens);
  38. return {
  39. styles: serializeContext.output.join('')
  40. };
  41. }
  42. module.exports = serializeStyles;