this.scriptlets['insert_tag'] = function(context, params, text, move_forward, done)
{
var start_tag = '<'+params.tag;
- var move_cursor = false;
+ var cursor_inside = false;
for (var attr in params.attrs) {
start_tag += ' '+attr+'="' + params.attrs[attr] + '"';
output += end_tag;
}
output += token;
+
+ // keep cursor inside tag if some previous scriptlet has already moved it
+ cursor_inside = move_forward != 0;
}
else {
if(params.nocontent) {
}
else {
output = start_tag + end_tag;
- move_cursor = true;
+ cursor_inside = true;
}
}
- if (move_cursor) {
- move_forward += params.tag.length+2;
+ if (cursor_inside) {
+ move_forward -= params.tag.length+3;
}
done(output, move_forward);
};
});
- var partial = true;
if(!text) done(text, move_forward);
var changed = 0;
});
if(!text) done(text, move_forward);
- var original = text;$
nblck_each(exprs, function(expr, index) {
$progress.html(600 + index);
this.scriptlets['lowercase'] = function(context, params, text, move_forward, done)
{
if(!text) done(text, move_forward);
-
- var lcase = text.toLowerCase();
- var ucase = text.toUpperCase();
-
- if(lcase == text) repl = ucase; /* was lowercase */
- else if(ucase != text) repl = lcase; /* neither lower- or upper-case */
- else { /* upper case -> camel-case */
- var words = $(lcase.split(/\s/)).map(function() {
- if(this.length > 0) {
- return this[0].toUpperCase() + this.slice(1);
- } else {
- return '';
- }
- });
- text = words.join(' ');
- }
-
- done(text, move_forward);
+ done(text.toLowerCase(), move_forward);
}.bind(this);
text = text + buf + '\n</strofa>' + ebuf;
}
else {
- move_forward += params.tag.length + 2;
+ text = "<strofa></strofa>"
+ move_forward -= "</strofa>".length;
+ }
+
+ done(text, move_forward);
+ }.bind(this);
+
+
+ this.scriptlets['autotag'] = function(context, params, text, move_forward, done)
+ {
+ if(!text.match(/^\n+$/)) done(text, move_forward);
+
+ function insert_done(output, mf) {
+ text += output;
+ }
+
+ if (!params.split) params.split = 2;
+ if (!params.padding) params.padding = 3;
+
+ chunks = text.replace(/^\n+|\n+$/, '').split(new RegExp("\\n{"+params.split+",}"));
+ text = text.match(/^\n+/);
+ if (!text)
+ text = '';
+ padding = '';
+ for(; params.padding; params.padding--) {
+ padding += "\n";
+ }
+
+ if (params.tag == 'strofa')
+ tagger = this.scriptlets['insert_stanza'];
+ else
+ tagger = this.scriptlets['insert_tag'];
+
+ for (i in chunks) {
+ if (chunks[i]) {
+ if (params.tag == 'akap' && chunks[i].match(/^---/))
+ tag = 'akap_dialog';
+ else tag = params.tag;
+ tagger(context, {tag: tag}, chunks[i], 0, insert_done);
+ text += padding;
+ }
}
done(text, move_forward);