1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 'use strict'
- var directiveParser = require('./directive-parser.js')
- module.exports = {
- stack: [],
- pop: function (current) {
- var index = this.stack.indexOf(current)
- if (index !== -1) {
- this.stack.splice(index, 1)
- }
- if (!current.preserve) {
- current.source.remove()
- }
- },
- parse: function (node, lazyResult, callback) {
- var current
- var metadata = directiveParser(node)
- if (metadata) {
- if (!metadata.begin && metadata.end) {
- this.walk(function (item) {
- if (metadata.name === item.metadata.name) {
- this.pop(item)
- current = {'metadata': metadata, 'directive': item.directive, 'source': node, 'preserve': item.preserve}
- return false
- }
- }.bind(this))
- } else {
- current = {'metadata': metadata, 'directive': null, 'source': node, 'preserve': null}
- }
- if (current === undefined) {
- lazyResult.warn('found end "' + metadata.name + '" without a matching begin.', {node: node})
- } else if (callback(current)) {
- this.stack.push(current)
- } else if (!current.preserve) {
- current.source.remove()
- }
- }
- },
- walk: function (callback) {
- var len = this.stack.length
- while (--len > -1) {
- if (!callback(this.stack[len])) {
- break
- }
- }
- }
- }
|