book-source 0.3.0 → 0.3.1
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.
- package/lib/StructuredDocument.js +22 -7
- package/package.json +1 -1
|
@@ -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 ) ;
|
|
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
|
-
|
|
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 ,
|
|
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[
|
|
153
|
+
if ( renderer[ postFn ] ) {
|
|
139
154
|
output = fragment.append(
|
|
140
155
|
output ,
|
|
141
|
-
renderer[
|
|
156
|
+
renderer[ postFn ]( part , partsOutput , partStack , userlandStack , index )
|
|
142
157
|
) ;
|
|
143
158
|
}
|
|
144
159
|
|