book-source 0.3.15 → 0.3.16

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.
@@ -28,7 +28,6 @@
28
28
 
29
29
 
30
30
 
31
- const documentParts = require( './documentParts.js' ) ;
32
31
  const Style = require( './Style.js' ) ;
33
32
  const textPostFilters = require( './textPostFilters.js' ) ;
34
33
 
@@ -41,7 +40,7 @@ function StructuredDocument() {
41
40
  this.title = 'Document' ;
42
41
  this.metadata = null ;
43
42
  this.theme = null ;
44
- this.summary = null ;
43
+ this.toc = null ;
45
44
  this.parts = [] ;
46
45
  //this.idList = new Set() ;
47
46
  }
@@ -49,6 +48,7 @@ function StructuredDocument() {
49
48
  module.exports = StructuredDocument ;
50
49
 
51
50
  // Circular require, should come after exporting
51
+ const documentParts = require( './documentParts.js' ) ;
52
52
  const postProcesses = require( './postProcesses.js' ) ;
53
53
 
54
54
 
@@ -57,8 +57,8 @@ StructuredDocument.prototype.render = function( renderer , special = null ) {
57
57
  let toRender ;
58
58
 
59
59
  switch ( special ) {
60
- case 'summary' :
61
- toRender = this.summary ? [ this.summary ] : [] ;
60
+ case 'toc' :
61
+ toRender = this.toc ? [ this.toc ] : [] ;
62
62
  break ;
63
63
  default :
64
64
  toRender = this.parts ;
@@ -813,8 +813,20 @@ function parseListItem( str , ctx , indent ) {
813
813
 
814
814
  var lastPart = ctx.parts[ ctx.parts.length - 1 ] ;
815
815
 
816
- if ( ! lastPart || lastPart.type !== 'list' ) {
817
- ctx.parts.push( new documentParts.List( indent ) ) ;
816
+ switch ( lastPart?.type ) {
817
+ case 'listItem' :
818
+ case 'orderedListItem' :
819
+ // Create the new list as a child of this list-item
820
+ stack( ctx ) ;
821
+ ctx.parts.push( new documentParts.List( indent ) ) ;
822
+ break ;
823
+ case 'list' :
824
+ case 'orderedList' : // It's mixing list and ordered list, but what can we do?
825
+ // Nothing to do here...
826
+ break ;
827
+ default :
828
+ ctx.parts.push( new documentParts.List( indent ) ) ;
829
+ break ;
818
830
  }
819
831
 
820
832
  stack( ctx ) ;
@@ -836,9 +848,22 @@ function parseOrderedListItem( str , ctx , indent ) {
836
848
 
837
849
  var lastPart = ctx.parts[ ctx.parts.length - 1 ] ;
838
850
 
839
- if ( ! lastPart || lastPart.type !== 'orderedList' ) {
840
- lastPart = new documentParts.OrderedList( indent ) ;
841
- ctx.parts.push( lastPart ) ;
851
+ switch ( lastPart?.type ) {
852
+ case 'orderedListItem' :
853
+ case 'listItem' :
854
+ // Create the new ordered list as a child of this list-item
855
+ stack( ctx ) ;
856
+ lastPart = new documentParts.OrderedList( indent ) ;
857
+ ctx.parts.push( lastPart ) ;
858
+ break ;
859
+ case 'orderedList' :
860
+ case 'list' : // It's mixing list and ordered list, but what can we do?
861
+ // Nothing to do here...
862
+ break ;
863
+ default :
864
+ lastPart = new documentParts.OrderedList( indent ) ;
865
+ ctx.parts.push( lastPart ) ;
866
+ break ;
842
867
  }
843
868
 
844
869
  stack( ctx ) ;
@@ -31,6 +31,9 @@
31
31
  const documentParts = {} ;
32
32
  module.exports = documentParts ;
33
33
 
34
+ // Circular require, should come after exporting
35
+ const StructuredDocument = require( './StructuredDocument.js' ) ;
36
+
34
37
 
35
38
 
36
39
  function Part() {
@@ -39,6 +42,10 @@ function Part() {
39
42
 
40
43
  documentParts.Part = Part ;
41
44
 
45
+ Part.prototype.getText = function() {
46
+ return StructuredDocument.getText( this ) ;
47
+ } ;
48
+
42
49
 
43
50
 
44
51
  function InlinePart() {
@@ -372,7 +379,7 @@ documentParts.Anchor = Anchor ;
372
379
 
373
380
 
374
381
  // All special types that could be rendered (have graphical representation)
375
- const RENDERED_SPECIAL_TYPES = new Set( [ 'summary' ] ) ;
382
+ const RENDERED_SPECIAL_TYPES = new Set( [ 'toc' ] ) ;
376
383
 
377
384
  function Special( special ) {
378
385
  this.type = 'special' ;
@@ -72,24 +72,25 @@ exports.autoId.init = ( structuredDocument , params , data ) => {
72
72
 
73
73
 
74
74
 
75
- exports.summary = ( structuredDocument , object , params , data ) => {
75
+ // TOC: Table of Contents
76
+ exports.toc = ( structuredDocument , object , params , data ) => {
76
77
  if ( object.type === 'special' ) {
77
78
  switch ( object.special ) {
78
- case 'summary' :
79
- data.summaryObjects.push( object ) ;
79
+ case 'toc' :
80
+ data.tocObjects.push( object ) ;
80
81
  break ;
81
- case 'summary-start' :
82
- resetSummary( data ) ;
82
+ case 'toc-start' :
83
+ resetToc( data ) ;
83
84
  break ;
84
- case 'summary-end' :
85
- data.summaryEnded = true ;
85
+ case 'toc-end' :
86
+ data.tocEnded = true ;
86
87
  break ;
87
88
  }
88
89
 
89
90
  return ;
90
91
  }
91
92
 
92
- if ( data.summaryEnded || object.type !== 'header' || object.level > params.maxLevel ) { return ; }
93
+ if ( data.tocEnded || object.type !== 'header' || object.level > params.maxLevel ) { return ; }
93
94
 
94
95
  let item = new documentParts.ListItem( object.level - 1 ) ;
95
96
  let link = new documentParts.Link( '#' + object.id ) ;
@@ -97,54 +98,55 @@ exports.summary = ( structuredDocument , object , params , data ) => {
97
98
  let text = new documentParts.Text( StructuredDocument.getText( object ) ) ;
98
99
  link.parts.push( text ) ;
99
100
 
100
- if ( ! data.summaryHeaderLevelStack.length ) {
101
- data.summaryHeaderLevelStack.push( object.level ) ;
101
+ if ( ! data.tocHeaderLevelStack.length ) {
102
+ data.tocHeaderLevelStack.push( object.level ) ;
102
103
  }
103
104
 
104
- let lastListLevel = data.summaryHeaderLevelStack.length - 1 ;
105
- let lastHeaderLevel = data.summaryHeaderLevelStack[ lastListLevel ] ;
105
+ let lastListLevel = data.tocHeaderLevelStack.length - 1 ;
106
+ let lastHeaderLevel = data.tocHeaderLevelStack[ lastListLevel ] ;
106
107
 
107
108
  while ( object.level < lastHeaderLevel && lastListLevel > 0 ) {
108
109
  lastListLevel -- ;
109
- lastHeaderLevel = data.summaryHeaderLevelStack[ lastListLevel ] ;
110
- data.summaryHeaderLevelStack.length = data.summaryListStack.length = lastListLevel + 1 ;
110
+ lastHeaderLevel = data.tocHeaderLevelStack[ lastListLevel ] ;
111
+ data.tocHeaderLevelStack.length = data.tocListStack.length = lastListLevel + 1 ;
111
112
  }
112
113
 
113
114
  if ( object.level > lastHeaderLevel ) {
114
- let parentList = data.summaryListStack[ lastListLevel ] ;
115
+ let parentList = data.tocListStack[ lastListLevel ] ;
116
+ let parentListItem = parentList.parts[ parentList.parts.length - 1 ] ;
115
117
  let currentList = new documentParts.List( object.level - 1 ) ;
116
- data.summaryListStack.push( currentList ) ;
117
- data.summaryHeaderLevelStack.push( object.level ) ;
118
+ data.tocListStack.push( currentList ) ;
119
+ data.tocHeaderLevelStack.push( object.level ) ;
118
120
  currentList.parts.push( item ) ;
119
- parentList.parts.push( currentList ) ;
121
+ parentListItem.parts.push( currentList ) ;
120
122
  }
121
123
  else {
122
124
  // It's equal OR the doc is not well-formed and it's less, nevertheless, we just act as if it's equal
123
- let currentList = data.summaryListStack[ lastListLevel ] ;
125
+ let currentList = data.tocListStack[ lastListLevel ] ;
124
126
  currentList.parts.push( item ) ;
125
127
  }
126
128
  } ;
127
129
 
128
- exports.summary.init = ( structuredDocument , params , data ) => {
130
+ exports.toc.init = ( structuredDocument , params , data ) => {
129
131
  params.maxLevel = params.maxLevel || Infinity ;
130
- data.summaryObjects = [] ;
131
- resetSummary( data ) ;
132
+ data.tocObjects = [] ;
133
+ resetToc( data ) ;
132
134
  } ;
133
135
 
134
- function resetSummary( data ) {
135
- data.summaryList = new documentParts.List( 0 ) ;
136
- data.summaryListStack = [ data.summaryList ] ;
137
- data.summaryHeaderLevelStack = [] ;
138
- data.summaryEnded = false ;
136
+ function resetToc( data ) {
137
+ data.tocList = new documentParts.List( 0 ) ;
138
+ data.tocListStack = [ data.tocList ] ;
139
+ data.tocHeaderLevelStack = [] ;
140
+ data.tocEnded = false ;
139
141
  }
140
142
 
141
- exports.summary.finalize = ( structuredDocument , params , data ) => {
142
- structuredDocument.summary = data.summaryList ;
143
+ exports.toc.finalize = ( structuredDocument , params , data ) => {
144
+ structuredDocument.toc = data.tocList ;
143
145
 
144
- for ( let summaryObject of data.summaryObjects ) {
145
- summaryObject.parts.push( data.summaryList ) ;
146
+ for ( let tocObject of data.tocObjects ) {
147
+ tocObject.parts.push( data.tocList ) ;
146
148
  }
147
149
  } ;
148
150
 
149
- exports.summary.require = [ 'autoId' ] ;
151
+ exports.toc.require = [ 'autoId' ] ;
150
152
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "book-source",
3
- "version": "0.3.15",
3
+ "version": "0.3.16",
4
4
  "description": "A lightweight markup language, inspired by Markdown.",
5
5
  "main": "lib/book-source.js",
6
6
  "directories": {