book-source 0.2.1 → 0.2.3

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,22 +52,59 @@ StructuredDocument.prototype.render = function( renderer ) {
52
52
  title: this.title
53
53
  } ;
54
54
 
55
- var str = this.renderParts( renderer , this.parts , [] ) ;
55
+ var output = this.renderParts( renderer , this.parts , [] ) ;
56
56
 
57
57
  if ( renderer.document ) {
58
- str = renderer.document( meta , str ) ;
58
+ output = renderer.document( meta , output ) ;
59
59
  }
60
60
 
61
- return str ;
61
+ return output ;
62
+ } ;
63
+
64
+
65
+
66
+ const FRAGMENT = {} ;
67
+
68
+ FRAGMENT.string = {
69
+ new: () => '' ,
70
+ append: ( stack_ , part ) => stack_ + ( part || '' ) ,
71
+ concat: ( stack_ , parts ) => stack_ + ( parts || '' )
62
72
  } ;
63
73
 
74
+ FRAGMENT.flatStructure = {
75
+ new: () => [] ,
76
+ append: ( stack_ , part ) => {
77
+ if ( part ) {
78
+ if ( Array.isArray( part ) ) { stack_.push( ... part ) ; }
79
+ else { stack_.push( part ) ; }
80
+ }
81
+ return stack_ ;
82
+ } ,
83
+ concat: ( stack_ , parts ) => {
84
+ if ( parts && parts.length ) { stack_.push( ... parts ) ; }
85
+ return stack_ ;
86
+ }
87
+ } ;
64
88
 
89
+ FRAGMENT.structure = {
90
+ new: () => [] ,
91
+ append: ( stack_ , part ) => {
92
+ if ( part ) { stack_.push( part ) ; }
93
+ return stack_ ;
94
+ } ,
95
+ concat: ( stack_ , parts ) => {
96
+ if ( parts && parts.length ) { stack_.push( ... parts ) ; }
97
+ return stack_ ;
98
+ }
99
+ } ;
65
100
 
66
101
  StructuredDocument.prototype.renderParts = function( renderer , parts , partStack ) {
67
- var str = '' , index = 0 ;
102
+ var fragment = FRAGMENT[ renderer.type || 'string' ] ,
103
+ output = fragment.new() ,
104
+ index = 0 ;
68
105
 
69
106
  for ( let part of parts ) {
70
- let partsStr = '' ;
107
+ let partsOutput = fragment.new() ;
71
108
 
72
109
  if ( part.parts ) {
73
110
  if ( renderer.group?.[ part.type ] ) {
@@ -79,27 +116,36 @@ StructuredDocument.prototype.renderParts = function( renderer , parts , partStac
79
116
  for ( let group of groupList ) {
80
117
  if ( renderer.group[ part.type ][ group.type ] ) {
81
118
  partStack.push( part ) ;
82
- let groupStr = this.renderParts( renderer , group.parts , partStack ) ;
119
+ let groupOutput = this.renderParts( renderer , group.parts , partStack ) ;
83
120
  partStack.pop() ;
84
- partsStr += renderer.group[ part.type ][ group.type ]( part , groupStr , partStack ) ;
121
+ partsOutput = fragment.concat(
122
+ partsOutput ,
123
+ renderer.group[ part.type ][ group.type ]( part , groupOutput , partStack )
124
+ ) ;
85
125
  }
86
126
  }
87
127
  }
88
128
  else {
89
129
  partStack.push( part ) ;
90
- partsStr = this.renderParts( renderer , part.parts , [ ... partStack , part ] ) ;
130
+ partsOutput = fragment.concat(
131
+ partsOutput ,
132
+ this.renderParts( renderer , part.parts , [ ... partStack , part ] )
133
+ ) ;
91
134
  partStack.pop() ;
92
135
  }
93
136
  }
94
137
 
95
138
  if ( renderer[ part.type ] ) {
96
- str += renderer[ part.type ]( part , partsStr , partStack , index ) ;
139
+ output = fragment.append(
140
+ output ,
141
+ renderer[ part.type ]( part , partsOutput , partStack , index )
142
+ ) ;
97
143
  }
98
144
 
99
145
  index ++ ;
100
146
  }
101
147
 
102
- return str ;
148
+ return output ;
103
149
  } ;
104
150
 
105
151
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "book-source",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "A lightweight markup language, inspired by Markdown.",
5
5
  "main": "lib/book-source.js",
6
6
  "directories": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "array-kit": "^0.2.6",
11
- "palette-shade": "^0.1.1",
11
+ "palette-shade": "^0.1.3",
12
12
  "string-kit": "^0.18.0"
13
13
  },
14
14
  "scripts": {