12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // Proceess '\n'
- 'use strict';
- var isSpace = require('../common/utils').isSpace;
- module.exports = function newline(state, silent) {
- var pmax, max, ws, pos = state.pos;
- if (state.src.charCodeAt(pos) !== 0x0A/* \n */) { return false; }
- pmax = state.pending.length - 1;
- max = state.posMax;
- // ' \n' -> hardbreak
- // Lookup in pending chars is bad practice! Don't copy to other rules!
- // Pending string is stored in concat mode, indexed lookups will cause
- // convertion to flat mode.
- if (!silent) {
- if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {
- if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {
- // Find whitespaces tail of pending chars.
- ws = pmax - 1;
- while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;
- state.pending = state.pending.slice(0, ws);
- state.push('hardbreak', 'br', 0);
- } else {
- state.pending = state.pending.slice(0, -1);
- state.push('softbreak', 'br', 0);
- }
- } else {
- state.push('softbreak', 'br', 0);
- }
- }
- pos++;
- // skip heading spaces for next line
- while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }
- state.pos = pos;
- return true;
- };
|