@@ -18,7 +18,8 @@ var defaultJSON = {
18
18
url : '' ,
19
19
speaker : '' ,
20
20
content : '' ,
21
- transition : 'zoomout'
21
+ transition : 'zoomout' ,
22
+ files : ''
22
23
} ;
23
24
24
25
marked . setOptions ( {
@@ -35,13 +36,16 @@ marked.setOptions({
35
36
} ) ;
36
37
37
38
var emptyFn = function ( str ) {
38
- console . log ( str ) ;
39
+ // console.log(str);
39
40
} ;
40
41
var parser = function ( string , callback ) {
41
42
if ( typeof callback !== 'function' ) {
42
43
callback = emptyFn ;
43
44
}
44
- var contents = string . split ( '[slide]' ) ;
45
+ var splitReg = / \[ s l i d e \s * ( .* ) \] / ig;
46
+ var slidesSetting = string . match ( splitReg ) ;
47
+ var contents = string . split ( / \[ s l i d e .* \] / i) ;
48
+ // console.log(contents.length, slidesSetting);
45
49
//第一个是封面
46
50
var cover = contents . shift ( ) ;
47
51
@@ -50,16 +54,34 @@ var parser = function(string, callback) {
50
54
json . nodeppt_version = config . version
51
55
json . nodeppt_site = config . site ;
52
56
json = mix ( defaultJSON , json ) ;
53
-
57
+ if ( json . files ) {
58
+ var files = json . files . split ( / \s ? , \s ? / ) ;
59
+ json . files = files . map ( function ( v ) {
60
+ if ( / .j s $ / i. test ( v ) ) {
61
+ //js文件
62
+ return '<script src="' + v + '"></script>'
63
+ } else if ( / .c s s $ / i. test ( v ) ) {
64
+ //css文件
65
+ return '<link rel="stylesheet" href="' + v + '">'
66
+ }
67
+ return v ;
68
+ } ) . join ( EOL ) ;
69
+ }
54
70
var slides = [ ] ;
55
71
var reg = / \[ n o t e \] ( [ \s \S ] + ) \[ \/ n o t e \] / im;
56
- contents . forEach ( function ( v ) {
72
+ contents . forEach ( function ( v , i ) {
73
+ var cfg = slidesSetting [ i ] ;
74
+ cfg = cfg . match ( / \[ s l i d e \s + ( .+ ) \s ? \] / ) ;
75
+ var attrs = '' ;
76
+ if ( cfg ) {
77
+ attrs = cfg [ 1 ] ;
78
+ }
57
79
var note = reg . exec ( v ) ;
58
80
if ( note ) {
59
81
v = v . replace ( reg , '' ) ;
60
82
note = marked ( note [ 1 ] ) ;
61
83
}
62
- slides . push ( parse ( marked ( v ) , note ) ) ;
84
+ slides . push ( parse ( marked ( v ) , note , attrs ) ) ;
63
85
} ) ;
64
86
//合并
65
87
json . content = slides . join ( EOL ) ;
@@ -85,11 +107,11 @@ module.exports = parser;
85
107
function mix ( obj ) {
86
108
var i = 1 ,
87
109
target , key ;
88
-
110
+ var hasOwnProperty = Object . prototype . hasOwnProperty ;
89
111
for ( ; i < arguments . length ; i ++ ) {
90
112
target = arguments [ i ] ;
91
113
for ( key in target ) {
92
- if ( Object . prototype . hasOwnProperty . call ( target , key ) ) {
114
+ if ( hasOwnProperty . call ( target , key ) ) {
93
115
obj [ key ] = target [ key ] ;
94
116
}
95
117
}
@@ -117,16 +139,18 @@ function parseCover(str) {
117
139
118
140
/**
119
141
* 解析 slide内容
120
- * @param {[type] } str [description]
121
- * @return {[type] } [description]
142
+ * @param {[type] } str [description]
143
+ * @param {[type] } note [description]
144
+ * @param {[type] } sAttrs [description]
145
+ * @return {[type] } [description]
122
146
*/
123
147
124
- function parse ( str , note ) {
148
+ function parse ( str , note , sAttrs ) {
125
149
var arr = str . split ( '<hr>' ) ;
126
150
var head = '' ,
127
151
article = '' ;
128
152
if ( note && note . length > 3 ) {
129
- note = '<aside class="note">\n <section>' + note + '</section>\n </aside>' ;
153
+ note = [ '<aside class="note">' , ' <section>', note , '</section>' , ' </aside>'] . join ( EOL ) ;
130
154
} else {
131
155
note = '' ;
132
156
}
@@ -138,14 +162,14 @@ function parse(str, note) {
138
162
}
139
163
if ( head !== '' ) {
140
164
head = do_attr ( head ) ;
141
- head = '<hgroup>\n' + head + '</hgroup>\n' ;
165
+ head = [ '<hgroup>' , head , '</hgroup>' ] . join ( EOL ) ;
142
166
}
143
167
144
168
var noHead = ! head ;
145
169
var articleAttr ;
146
170
article = do_attr ( article , true , noHead ) ;
147
171
148
- article = '<article>\n' + article + '</article>\n' ;
172
+ article = [ '<article>' , article , '</article>' ] . join ( EOL ) ;
149
173
//处理文章只用h1的情况,作为标题页面
150
174
if ( noHead && / < h 1 > .* < \/ h 1 > / g. test ( article ) ) {
151
175
@@ -168,18 +192,21 @@ function parse(str, note) {
168
192
}
169
193
}
170
194
var content = head + article ;
171
- var bgimage ;
172
- //背景图片
173
- if ( / [ b g i m a g e ] .* [ \/ b g i m a g e ] / g. test ( content ) ) {
174
- content = content . replace ( / < ( \w + ) > \[ b g i m a g e \] ( .* ) \[ \/ b g i m a g e (?: \] | < \/ a > ] ) + < \/ \1> / gm, function ( input , tag , image ) {
175
- bgimage = image . replace ( / < ( .* ?) > / g, '' ) ;
176
- return '' ;
177
- } )
178
- }
179
195
180
196
var tagStart = '<slide class="slide">' ;
181
- if ( bgimage ) {
182
- tagStart = '<slide class="slide fill" style="background-image:url(' + bgimage + ')">'
197
+ if ( sAttrs ) {
198
+ var cls = sAttrs . match ( / c l a s s = [ ' " ] ? ( [ ^ ' " ] + ) [ ' " ] ? / ) ;
199
+ if ( cls ) {
200
+ cls = cls [ 1 ] + ' slide' ;
201
+ sAttrs = sAttrs . replace ( cls [ 0 ] , '' ) ;
202
+ } else {
203
+ cls = 'slide' ;
204
+ }
205
+ if ( / b a c k g r o u n d / . test ( sAttrs ) ) {
206
+ cls += ' fill' ;
207
+ }
208
+ tagStart = '<slide class="' + cls + '" ' + sAttrs + '>' ;
209
+ // console.log(tagStart);
183
210
}
184
211
return tagStart + note + content + '</slide>' ;
185
212
}
@@ -241,6 +268,6 @@ function parseAttr(idinput, attrs) {
241
268
return attr ;
242
269
}
243
270
///test
244
- // var str = fs.readFileSync('../test/basic .md').toString();
271
+ // var str = fs.readFileSync('ppts/demo .md').toString();
245
272
246
273
// parser(str);
0 commit comments