A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/remarkjs/remark/commit/9892ec below:

Refactor to externalise core API · remarkjs/remark@9892ec4 · GitHub

12 12

* Dependencies.

13 13

*/

14 14 15 -

var Ware = require('ware');

16 -

var VFile = require('vfile');

17 -

var extend = require('extend.js');

18 -

var parser = require('./lib/parse.js');

19 -

var stringifier = require('./lib/stringify.js');

20 -

var utilities = require('./lib/utilities.js');

15 +

var unified = require('unified');

16 +

var Parser = require('./lib/parse.js');

17 +

var Compiler = require('./lib/stringify.js');

21 18 22 19

/*

23 -

* Methods.

20 +

* Exports.

24 21

*/

25 22 26 -

var Parser = parser.Parser;

27 -

var parseProto = Parser.prototype;

28 -

var Compiler = stringifier.Compiler;

29 -

var compileProto = Compiler.prototype;

30 - 31 -

/**

32 -

* Throws if passed an exception.

33 -

*

34 -

* Here until the following PR is merged into

35 -

* segmentio/ware:

36 -

*

37 -

* https://github.com/segmentio/ware/pull/21

38 -

*

39 -

* @param {Error?} exception

40 -

*/

41 -

function fail(exception) {

42 -

if (exception) {

43 -

throw exception;

44 -

}

45 -

}

46 - 47 -

/**

48 -

* Create a custom, cloned, Parser.

49 -

*

50 -

* @return {Function}

51 -

*/

52 -

function constructParser() {

53 -

var customProto;

54 -

var expressions;

55 -

var key;

56 - 57 -

/**

58 -

* Extensible prototype.

59 -

*/

60 -

function CustomProto() {}

61 - 62 -

CustomProto.prototype = parseProto;

63 - 64 -

customProto = new CustomProto();

65 - 66 -

/**

67 -

* Extensible constructor.

68 -

*/

69 -

function CustomParser() {

70 -

Parser.apply(this, arguments);

71 -

}

72 - 73 -

CustomParser.prototype = customProto;

74 - 75 -

/*

76 -

* Construct new objects for things that plugin's

77 -

* might modify.

78 -

*/

79 - 80 -

customProto.blockTokenizers = extend({}, parseProto.blockTokenizers);

81 -

customProto.blockMethods = extend([], parseProto.blockMethods);

82 -

customProto.inlineTokenizers = extend({}, parseProto.inlineTokenizers);

83 -

customProto.inlineMethods = extend([], parseProto.inlineMethods);

84 - 85 -

expressions = parseProto.expressions;

86 -

customProto.expressions = {};

87 - 88 -

for (key in expressions) {

89 -

customProto.expressions[key] = extend({}, expressions[key]);

90 -

}

91 - 92 -

return CustomParser;

93 -

}

94 - 95 -

/**

96 -

* Create a custom, cloned, Compiler.

97 -

*

98 -

* @return {Function}

99 -

*/

100 -

function constructCompiler() {

101 -

var customProto;

102 - 103 -

/**

104 -

* Extensible prototype.

105 -

*/

106 -

function CustomProto() {}

107 - 108 -

CustomProto.prototype = compileProto;

109 - 110 -

customProto = new CustomProto();

111 - 112 -

/**

113 -

* Extensible constructor.

114 -

*/

115 -

function CustomCompiler() {

116 -

Compiler.apply(this, arguments);

117 -

}

118 - 119 -

CustomCompiler.prototype = customProto;

120 - 121 -

return CustomCompiler;

122 -

}

123 - 124 -

/**

125 -

* Construct an MDAST instance.

126 -

*

127 -

* @constructor {MDAST}

128 -

*/

129 -

function MDAST() {

130 -

var self = this;

131 - 132 -

if (!(self instanceof MDAST)) {

133 -

return new MDAST();

134 -

}

135 - 136 -

self.ware = new Ware();

137 -

self.attachers = [];

138 - 139 -

self.Parser = constructParser();

140 -

self.Compiler = constructCompiler();

141 -

}

142 - 143 -

/**

144 -

* Attach a plugin.

145 -

*

146 -

* @param {Function|Array.<Function>} attach

147 -

* @param {Object?} [options]

148 -

* @param {FileSet?} [fileSet] - Optional file-set,

149 -

* passed by the CLI.

150 -

* @return {MDAST}

151 -

*/

152 -

function use(attach, options, fileSet) {

153 -

var self = this;

154 -

var index;

155 -

var transformer;

156 - 157 -

if (!(self instanceof MDAST)) {

158 -

self = new MDAST();

159 -

}

160 - 161 -

/*

162 -

* Multiple attachers.

163 -

*/

164 - 165 -

if ('length' in attach && typeof attach !== 'function') {

166 -

index = -1;

167 - 168 -

while (attach[++index]) {

169 -

self.use(attach[index], options, fileSet);

170 -

}

171 - 172 -

return self;

173 -

}

174 - 175 -

/*

176 -

* Single plugin.

177 -

*/

178 - 179 -

if (self.attachers.indexOf(attach) === -1) {

180 -

transformer = attach(self, options, fileSet);

181 - 182 -

self.attachers.push(attach);

183 - 184 -

if (transformer) {

185 -

self.ware.use(transformer);

186 -

}

187 -

}

188 - 189 -

return self;

190 -

}

191 - 192 -

/**

193 -

* Apply transformers to `node`.

194 -

*

195 -

* @param {Node} ast

196 -

* @param {VFile?} [file]

197 -

* @param {Function?} [done]

198 -

* @return {Node} - `ast`.

199 -

*/

200 -

function run(ast, file, done) {

201 -

var self = this;

202 - 203 -

if (typeof file === 'function') {

204 -

done = file;

205 -

file = null;

206 -

}

207 - 208 -

file = new VFile(file);

209 - 210 -

done = typeof done === 'function' ? done : fail;

211 - 212 -

if (typeof ast !== 'object' && typeof ast.type !== 'string') {

213 -

utilities.raise(ast, 'ast');

214 -

}

215 - 216 -

/*

217 -

* Only run when this is an instance of MDAST.

218 -

*/

219 - 220 -

if (self.ware) {

221 -

self.ware.run(ast, file, done);

222 -

} else {

223 -

done(null, ast, file);

224 -

}

225 - 226 -

return ast;

227 -

}

228 - 229 -

/**

230 -

* Wrapper to pass a file to `parser`.

231 -

*/

232 -

function parse(value, options) {

233 -

var file = new VFile(value);

234 -

var ast = file.namespace('mdast').ast = parser.call(this, file, options);

235 - 236 -

return ast;

237 -

}

238 - 239 -

/**

240 -

* Wrapper to pass a file to `stringifier`.

241 -

*/

242 -

function stringify(ast, file, options) {

243 -

if (options === null || options === undefined) {

244 -

options = file;

245 -

file = null;

246 -

}

247 - 248 -

if (!file && ast && !ast.type) {

249 -

file = ast;

250 -

ast = null;

251 -

}

252 - 253 -

file = new VFile(file);

254 - 255 -

if (!ast) {

256 -

ast = file.namespace('mdast').ast || ast;

257 -

}

258 - 259 -

return stringifier.call(this, ast, file, options);

260 -

}

261 - 262 -

/**

263 -

* Parse a value and apply transformers.

264 -

*

265 -

* @param {string|VFile} value

266 -

* @param {Object?} [options]

267 -

* @param {Function?} [done]

268 -

* @return {string?}

269 -

*/

270 -

function process(value, options, done) {

271 -

var file = new VFile(value);

272 -

var self = this instanceof MDAST ? this : new MDAST();

273 -

var result = null;

274 -

var ast;

275 - 276 -

if (typeof options === 'function') {

277 -

done = options;

278 -

options = null;

279 -

}

280 - 281 -

if (!options) {

282 -

options = {};

283 -

}

284 - 285 -

/**

286 -

* Invoked when `run` completes. Hoists `result` into

287 -

* the upper scope to return something for sync

288 -

* operations.

289 -

*/

290 -

function callback(exception) {

291 -

if (exception) {

292 -

(done || fail)(exception);

293 -

} else {

294 -

result = self.stringify(ast, file, options);

295 - 296 -

if (done) {

297 -

done(null, result, file);

298 -

}

299 -

}

300 -

}

301 - 302 -

ast = self.parse(file, options);

303 - 304 -

self.run(ast, file, callback);

305 - 306 -

return result;

307 -

}

308 - 309 -

/*

310 -

* Methods.

311 -

*/

312 - 313 -

var proto = MDAST.prototype;

314 - 315 -

proto.use = use;

316 -

proto.parse = parse;

317 -

proto.run = run;

318 -

proto.stringify = stringify;

319 -

proto.process = process;

320 - 321 -

/*

322 -

* Functions.

323 -

*/

324 - 325 -

MDAST.use = use;

326 -

MDAST.parse = parse;

327 -

MDAST.run = run;

328 -

MDAST.stringify = stringify;

329 -

MDAST.process = process;

330 - 331 -

/*

332 -

* Expose `mdast`.

333 -

*/

334 - 335 -

module.exports = MDAST;

23 +

module.exports = unified({

24 +

'name': 'mdast',

25 +

'type': 'ast',

26 +

'Parser': Parser,

27 +

'Compiler': Compiler

28 +

});


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4