book-source 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,7 +52,7 @@ StructuredDocument.prototype.render = function( renderer ) {
52
52
  title: this.title
53
53
  } ;
54
54
 
55
- var output = this.renderParts( renderer , this.parts , [] ) ;
55
+ var output = this.renderParts( renderer , this.parts , [] , [ {} ] ) ;
56
56
 
57
57
  if ( renderer.document ) {
58
58
  output = renderer.document( meta , output ) ;
@@ -98,14 +98,20 @@ FRAGMENT.structure = {
98
98
  }
99
99
  } ;
100
100
 
101
- StructuredDocument.prototype.renderParts = function( renderer , parts , partStack ) {
101
+ StructuredDocument.prototype.renderParts = function( renderer , parts , partStack , userlandStack ) {
102
102
  var fragment = FRAGMENT[ renderer.type || 'string' ] ,
103
103
  output = fragment.new() ,
104
104
  index = 0 ;
105
105
 
106
106
  for ( let part of parts ) {
107
+ let preFn = 'pre_' + part.type ;
108
+ let postFn = part.type ;
107
109
  let partsOutput = fragment.new() ;
108
110
 
111
+ if ( renderer[ preFn ] ) {
112
+ renderer[ preFn ]( part , partStack , userlandStack , index , parts.length ) ;
113
+ }
114
+
109
115
  if ( part.parts ) {
110
116
  if ( renderer.group?.[ part.type ] ) {
111
117
  // Some renderer have to group child parts an apply things to each group,
@@ -116,29 +122,38 @@ StructuredDocument.prototype.renderParts = function( renderer , parts , partStac
116
122
  for ( let group of groupList ) {
117
123
  if ( renderer.group[ part.type ][ group.type ] ) {
118
124
  partStack.push( part ) ;
119
- let groupOutput = this.renderParts( renderer , group.parts , partStack ) ;
125
+ userlandStack.push( {} ) ;
126
+
127
+ let groupOutput = this.renderParts( renderer , group.parts , partStack , userlandStack ) ;
128
+
120
129
  partStack.pop() ;
130
+ userlandStack.pop() ;
131
+
121
132
  partsOutput = fragment.concat(
122
133
  partsOutput ,
123
- renderer.group[ part.type ][ group.type ]( part , groupOutput , partStack )
134
+ renderer.group[ part.type ][ group.type ]( part , groupOutput , partStack , userlandStack )
124
135
  ) ;
125
136
  }
126
137
  }
127
138
  }
128
139
  else {
129
140
  partStack.push( part ) ;
141
+ userlandStack.push( {} ) ;
142
+
130
143
  partsOutput = fragment.concat(
131
144
  partsOutput ,
132
- this.renderParts( renderer , part.parts , [ ... partStack , part ] )
145
+ this.renderParts( renderer , part.parts , partStack , userlandStack )
133
146
  ) ;
147
+
134
148
  partStack.pop() ;
149
+ userlandStack.pop() ;
135
150
  }
136
151
  }
137
152
 
138
- if ( renderer[ part.type ] ) {
153
+ if ( renderer[ postFn ] ) {
139
154
  output = fragment.append(
140
155
  output ,
141
- renderer[ part.type ]( part , partsOutput , partStack , index )
156
+ renderer[ postFn ]( part , partsOutput , partStack , userlandStack , index , parts.length )
142
157
  ) ;
143
158
  }
144
159
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "book-source",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "A lightweight markup language, inspired by Markdown.",
5
5
  "main": "lib/book-source.js",
6
6
  "directories": {