@@ -4,6 +4,7 @@ var process = require('process');
44var chalk = require ( 'chalk' ) ;
55var Match = require ( './matchers' ) ;
66var validators_1 = require ( './validators' ) ;
7+ var actions_1 = require ( './actions' ) ;
78var cleanup_1 = require ( './cleanup' ) ;
89function build ( lines ) {
910 var result = {
@@ -41,19 +42,23 @@ function chapter(result, lines, index) {
4142 index . page = - 1 ;
4243 index . chapter += 1 ;
4344 result . chapters . push ( {
44- title : Match . chapter ( lines [ 0 ] ) . trim ( ) ,
45- description : '' ,
46- pages : [ ]
45+ title : Match . chapter ( lines [ 0 ] ) . trim ( )
4746 } ) ;
4847 for ( var i = 0 ; i < lines . length ; i ++ ) {
4948 var line = lines [ i ] ;
5049 if ( Match . page ( line ) ) {
50+ if ( result . chapters [ index . chapter ] . pages === undefined ) {
51+ result . chapters [ index . chapter ] . pages = [ ] ;
52+ }
5153 return page ( result , lines . slice ( i ) , index ) ;
5254 }
5355 else if ( Match . chapter ( line ) && i > 0 ) {
5456 return chapter ( result , lines . slice ( i ) , index ) ;
5557 }
5658 else {
59+ if ( result . chapters [ index . chapter ] . description === undefined ) {
60+ result . chapters [ index . chapter ] . description = '' ;
61+ }
5762 result . chapters [ index . chapter ] . description += line + '\n' ;
5863 }
5964 }
@@ -64,10 +69,7 @@ function page(result, lines, index) {
6469 index . page += 1 ;
6570 index . task = - 1 ;
6671 result . chapters [ index . chapter ] . pages . push ( {
67- title : Match . page ( lines [ 0 ] ) . trim ( ) ,
68- description : '' ,
69- explanation : '' ,
70- tasks : [ ]
72+ title : Match . page ( lines [ 0 ] ) . trim ( )
7173 } ) ;
7274 var inCodeBlock = false ;
7375 for ( var i = 1 ; i < lines . length ; i ++ ) {
@@ -86,13 +88,22 @@ function page(result, lines, index) {
8688 return page ( result , lines . slice ( i ) , index ) ;
8789 }
8890 else if ( ! ! Match . task ( line ) ) {
91+ if ( result . chapters [ index . chapter ] . pages [ index . page ] . tasks === undefined ) {
92+ result . chapters [ index . chapter ] . pages [ index . page ] . tasks = [ ] ;
93+ }
8994 return task ( result , lines . slice ( i ) , index ) ;
9095 }
9196 else {
9297 if ( ! hasBreak ) {
98+ if ( result . chapters [ index . chapter ] . pages [ index . page ] . description === undefined ) {
99+ result . chapters [ index . chapter ] . pages [ index . page ] . description = '' ;
100+ }
93101 result . chapters [ index . chapter ] . pages [ index . page ] . description += line + '\n' ;
94102 }
95103 else {
104+ if ( result . chapters [ index . chapter ] . pages [ index . page ] . explanation === undefined ) {
105+ result . chapters [ index . chapter ] . pages [ index . page ] . explanation = '' ;
106+ }
96107 result . chapters [ index . chapter ] . pages [ index . page ] . explanation += line + '\n' ;
97108 }
98109 }
@@ -102,10 +113,7 @@ function page(result, lines, index) {
102113}
103114function task ( result , lines , index ) {
104115 result . chapters [ index . chapter ] . pages [ index . page ] . tasks . push ( {
105- title : Match . task ( lines [ 0 ] ) ,
106- description : '' ,
107- tests : [ ] ,
108- actions : [ ]
116+ title : Match . task ( lines [ 0 ] )
109117 } ) ;
110118 index . task += 1 ;
111119 var inCodeBlock = false ;
@@ -115,18 +123,16 @@ function task(result, lines, index) {
115123 inCodeBlock = ! inCodeBlock ;
116124 }
117125 if ( ! inCodeBlock ) {
118- if ( ! ! Match . taskAction ( line ) ) {
119- var action = line . slice ( 1 ) . split ( '(' ) [ 0 ] ;
120- var target = cleanup_1 . trimQuotes ( / \( ( .* ?) \) $ / . exec ( line ) [ 1 ] ) ;
121- switch ( action ) {
122- case 'test' :
123- result . chapters [ index . chapter ] . pages [ index . page ] . tasks [ index . task ] . tests . push ( target ) ;
124- break ;
125- case 'action' :
126- result . chapters [ index . chapter ] . pages [ index . page ] . tasks [ index . task ] . actions . push ( target ) ;
127- break ;
128- default :
129- console . log ( 'Invalid task action' ) ;
126+ if ( ! ! Match . isAction ( line ) ) {
127+ var isActionArray = Match . isArray ( cleanup_1 . trimQuotes ( line ) ) ;
128+ if ( ! ! isActionArray ) {
129+ arrayOfActions = JSON . parse ( isActionArray ) ;
130+ arrayOfActions . forEach ( function ( line ) {
131+ result = actions_1 . default ( result , line , index ) ;
132+ } ) ;
133+ }
134+ else {
135+ result = actions_1 . default ( result , line , index ) ;
130136 }
131137 }
132138 else if ( ! ! Match . task ( line ) ) {
@@ -139,6 +145,9 @@ function task(result, lines, index) {
139145 return chapter ( result , lines . slice ( i ) , index ) ;
140146 }
141147 else {
148+ if ( result . chapters [ index . chapter ] . pages [ index . page ] . tasks [ index . task ] . description === undefined ) {
149+ result . chapters [ index . chapter ] . pages [ index . page ] . tasks [ index . task ] . description = '' ;
150+ }
142151 result . chapters [ index . chapter ] . pages [ index . page ] . tasks [ index . task ] . description += line + '\n' ;
143152 }
144153 }
0 commit comments