var EscapeStore = require('./escape-store');
var QuoteScanner = require('../utils/quote-scanner');
-var FreeTextProcessor = function FreeTextProcessor() {
+var lineBreak = require('os').EOL;
+
+var FreeTextProcessor = function FreeTextProcessor(saveWaypoints) {
this.matches = new EscapeStore('FREE_TEXT');
+ this.saveWaypoints = saveWaypoints;
};
// Strip content tags by replacing them by the a special
// instead of regexps to speed up the process.
FreeTextProcessor.prototype.escape = function(data) {
var self = this;
+ var breaksCount;
+ var lastBreakAt;
+ var indent;
+ var metadata;
+ var saveWaypoints = this.saveWaypoints;
return new QuoteScanner(data).each(function(match, store) {
- var placeholder = self.matches.store(match);
+ if (saveWaypoints) {
+ breaksCount = match.split(lineBreak).length - 1;
+ lastBreakAt = match.lastIndexOf(lineBreak);
+ indent = lastBreakAt > 0 ?
+ match.substring(lastBreakAt + lineBreak.length).length :
+ match.length;
+ metadata = [breaksCount, indent];
+ }
+
+ var placeholder = self.matches.store(match, metadata);
store.push(placeholder);
});
};
var assert = require('assert');
var FreeTextProcessor = require('../../lib/text/free-text-processor');
-function processorContext(context) {
+var lineBreak = require('os').EOL;
+
+function processorContext(name, context, saveWaypoints) {
var vowContext = {};
function escaped (targetCSS) {
return function (sourceCSS) {
- var result = new FreeTextProcessor().escape(sourceCSS);
+ var result = new FreeTextProcessor(saveWaypoints).escape(sourceCSS);
assert.equal(result, targetCSS);
};
}
function restored (targetCSS) {
return function (sourceCSS) {
- var processor = new FreeTextProcessor();
+ var processor = new FreeTextProcessor(saveWaypoints);
var result = processor.restore(processor.escape(sourceCSS));
assert.equal(result, targetCSS);
};
}
for (var key in context) {
- vowContext[key] = {
+ vowContext[name + ' - ' + key] = {
topic: context[key][0],
escaped: escaped(context[key][1]),
restored: restored(context[key][2])
vows.describe(FreeTextProcessor)
.addBatch(
- processorContext({
+ processorContext('basic', {
'no quotes': [
'a{color:red;display:block}',
'a{color:red;display:block}',
]
})
)
+ .addBatch(
+ processorContext('waypoints', {
+ 'no quotes': [
+ 'a{color:red;display:block}',
+ 'a{color:red;display:block}',
+ 'a{color:red;display:block}'
+ ],
+ 'single quoted': [
+ 'a{color:red;content:\'1234\';display:block}',
+ 'a{color:red;content:__ESCAPED_FREE_TEXT_CLEAN_CSS0(0,6)__;display:block}',
+ 'a{color:red;content:\'1234\';display:block}'
+ ],
+ 'double quoted': [
+ 'a{color:red;content:"1234";display:block}',
+ 'a{color:red;content:__ESCAPED_FREE_TEXT_CLEAN_CSS0(0,6)__;display:block}',
+ 'a{color:red;content:"1234";display:block}'
+ ],
+ 'with breaks': [
+ 'a{color:red;content:"1234' + lineBreak + '56";display:block}',
+ 'a{color:red;content:__ESCAPED_FREE_TEXT_CLEAN_CSS0(1,3)__;display:block}',
+ 'a{color:red;content:"1234' + lineBreak + '56";display:block}'
+ ]
+ }, true)
+ )
.export(module);