gfmdataprocessor.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. import marked from './lib/marked/marked.js';
  6. import toMarkdown from './lib/to-markdown/to-markdown.js';
  7. import HtmlDataProcessor from '../engine/dataprocessor/htmldataprocessor.js';
  8. import GFMRenderer from './lib/marked/renderer.js';
  9. import converters from './lib/to-markdown/converters.js';
  10. /**
  11. * GFMDataProcessor class.
  12. * This data processor implementation uses GitHub flavored markdown as input/output data.
  13. *
  14. * @memberOf markdown-gfm
  15. * @implements engine.dataProcessor.DataProcessor
  16. */
  17. export default class GFMDataProcessor {
  18. constructor() {
  19. this._htmlDP = new HtmlDataProcessor();
  20. }
  21. /**
  22. * Converts provided markdown string to view tree.
  23. *
  24. * @param {String} data Markdown string.
  25. * @returns {engine.view.DocumentFragment} Converted view element.
  26. */
  27. toView( data ) {
  28. const html = marked.parse( data, {
  29. gfm: true,
  30. breaks: true,
  31. tables: true,
  32. xhtml: true,
  33. renderer: new GFMRenderer()
  34. } );
  35. return this._htmlDP.toView( html );
  36. }
  37. /**
  38. * Converts provided {@link engine.view.DocumentFragment DocumentFragment} to data format - in this case markdown string.
  39. *
  40. * @param {engine.view.DocumentFragment} viewFragment
  41. * @returns {String} Markdown string.
  42. */
  43. toData( viewFragment ) {
  44. const html = this._htmlDP.toData( viewFragment );
  45. return toMarkdown( html, { gfm: true, converters } );
  46. }
  47. }