@@ -148,47 +148,11 @@ function getSpecificationVersion() {
148148 * }
149149 */
150150function parse ( options ) {
151- options = _ . defaults ( { } , options , defaults ) ;
152-
153- // extend with custom functions
154- app . filters = _ . defaults ( { } , options . filters , app . filters ) ;
155- app . languages = _ . defaults ( { } , options . languages , app . languages ) ;
156- app . parsers = _ . defaults ( { } , options . parsers , app . parsers ) ;
157- app . workers = _ . defaults ( { } , options . workers , app . workers ) ;
158- app . hooks = _ . defaults ( { } , options . hooks , app . hooks ) ;
159-
160- // options
161- app . options = options ;
162-
163- // generator
164- app . generator = _ . defaults ( { } , app . generator , defaultGenerator ) ;
165-
166- // packageInfos
167- app . packageInfos = _ . defaults ( { } , app . packageInfos , defaultPackageInfos ) ;
168-
169- var parsedFiles = [ ] ;
170- var parsedFilenames = [ ] ;
171-
172151 try {
173- // Log version information
174- var filename = path . join ( __dirname , '../' , './package.json' ) ;
175- var packageJson = JSON . parse ( fs . readFileSync ( filename , 'utf8' ) ) ;
176- app . log . verbose ( 'apidoc-generator name: ' + app . generator . name ) ;
177- app . log . verbose ( 'apidoc-generator version: ' + app . generator . version ) ;
178- app . log . verbose ( 'apidoc-core version: ' + packageJson . version ) ;
179- app . log . verbose ( 'apidoc-spec version: ' + getSpecificationVersion ( ) ) ;
180-
181- new PluginLoader ( app ) ;
182-
183- var parser = new Parser ( app ) ;
184- var worker = new Worker ( app ) ;
185- var filter = new Filter ( app ) ;
186-
187- // Make them available for plugins
188- app . parser = parser ;
189- app . worker = worker ;
190- app . filter = filter ;
191-
152+ initApp ( options ) ;
153+ options = app . options ;
154+ var parsedFiles = [ ] ;
155+ var parsedFilenames = [ ] ;
192156 // if input option for source is an array of folders,
193157 // parse each folder in the order provided.
194158 app . log . verbose ( 'run parser' ) ;
@@ -198,23 +162,23 @@ function parse(options) {
198162 // is the folder currently being processed.
199163 var folderOptions = options ;
200164 folderOptions . src = path . join ( folder , './' ) ;
201- parser . parseFiles ( folderOptions , parsedFiles , parsedFilenames ) ;
165+ app . parser . parseFiles ( folderOptions , parsedFiles , parsedFilenames ) ;
202166 } ) ;
203167 }
204168 else {
205169 // if the input option for source is a single folder, parse as usual.
206170 options . src = path . join ( options . src , './' ) ;
207- parser . parseFiles ( options , parsedFiles , parsedFilenames ) ;
171+ app . parser . parseFiles ( options , parsedFiles , parsedFilenames ) ;
208172 }
209173
210174 if ( parsedFiles . length > 0 ) {
211175 // process transformations and assignments
212176 app . log . verbose ( 'run worker' ) ;
213- worker . process ( parsedFiles , parsedFilenames , app . packageInfos ) ;
177+ app . worker . process ( parsedFiles , parsedFilenames , app . packageInfos ) ;
214178
215179 // cleanup
216180 app . log . verbose ( 'run filter' ) ;
217- var blocks = filter . process ( parsedFiles , parsedFilenames ) ;
181+ var blocks = app . filter . process ( parsedFiles , parsedFilenames ) ;
218182
219183 // sort by group ASC, name ASC, version DESC
220184 blocks . sort ( function ( a , b ) {
@@ -299,6 +263,65 @@ function parse(options) {
299263 }
300264}
301265
266+ /**
267+ * parseSource
268+ *
269+ * @param {string } source the source code string.
270+ * @param {Object } options Overwrite default options.
271+ */
272+ function parseSource ( source , options ) {
273+ try {
274+ initApp ( options ) ;
275+ return app . parser . parseSource ( source , app . options . encoding , app . options . filename ) ;
276+ } catch ( e ) {
277+ app . log . error ( e . message ) ;
278+ }
279+ }
280+
281+ /**
282+ * initApp
283+ *
284+ * @param {Object } options Overwrite default options.
285+ */
286+ function initApp ( options ) {
287+
288+ options = _ . defaults ( { } , options , defaults ) ;
289+ // extend with custom functions
290+ app . filters = _ . defaults ( { } , options . filters , app . filters ) ;
291+ app . languages = _ . defaults ( { } , options . languages , app . languages ) ;
292+ app . parsers = _ . defaults ( { } , options . parsers , app . parsers ) ;
293+ app . workers = _ . defaults ( { } , options . workers , app . workers ) ;
294+ app . hooks = _ . defaults ( { } , options . hooks , app . hooks ) ;
295+
296+ // options
297+ app . options = options ;
298+
299+ // generator
300+ app . generator = _ . defaults ( { } , app . generator , defaultGenerator ) ;
301+
302+ // packageInfos
303+ app . packageInfos = _ . defaults ( { } , app . packageInfos , defaultPackageInfos ) ;
304+
305+ // Log version information
306+ var filename = path . join ( __dirname , '../' , './package.json' ) ;
307+ var packageJson = JSON . parse ( fs . readFileSync ( filename , 'utf8' ) ) ;
308+ app . log . verbose ( 'apidoc-generator name: ' + app . generator . name ) ;
309+ app . log . verbose ( 'apidoc-generator version: ' + app . generator . version ) ;
310+ app . log . verbose ( 'apidoc-core version: ' + packageJson . version ) ;
311+ app . log . verbose ( 'apidoc-spec version: ' + getSpecificationVersion ( ) ) ;
312+
313+ new PluginLoader ( app ) ;
314+
315+ var parser = new Parser ( app ) ;
316+ var worker = new Worker ( app ) ;
317+ var filter = new Filter ( app ) ;
318+
319+ // Make them available for plugins
320+ app . parser = parser ;
321+ app . worker = worker ;
322+ app . filter = filter ;
323+ }
324+
302325/**
303326 * Set generator informations.
304327 *
@@ -401,6 +424,7 @@ function applyHook(name /* , ...args */) {
401424module . exports = {
402425 getSpecificationVersion : getSpecificationVersion ,
403426 parse : parse ,
427+ parseSource : parseSource ,
404428 setGeneratorInfos : setGeneratorInfos ,
405429 setLogger : setLogger ,
406430 setMarkdownParser : setMarkdownParser ,
0 commit comments