/** * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ /** * @module engine/dataprocessor/dataprocessor */ import { type ViewDocumentFragment } from "../view/documentfragment.js"; import type { MatcherPattern } from "../view/matcher.js"; /** * The data processor interface. It should be implemented by actual data processors. * * Each data processor implements a certain format of the data. For example, {@glink features/markdown Markdown data processor} * will convert the data (a Markdown string) to a {@link module:engine/view/documentfragment~ViewDocumentFragment document fragment} * and back. * * **Note:** While the CKEditor 5 architecture supports changing the data format, in most scenarios we do recommend sticking to * the default format which is HTML (supported by the {@link module:engine/dataprocessor/htmldataprocessor~HtmlDataProcessor}). * HTML remains [the best standard for rich-text data](https://medium.com/content-uneditable/a-standard-for-rich-text-data-4b3a507af552). * * And please do remember – using Markdown [does not automatically make your * application/website secure](https://github.com/ckeditor/ckeditor5-markdown-gfm/issues/16#issuecomment-375752994). */ export interface DataProcessor { /** * Converts a {@link module:engine/view/documentfragment~ViewDocumentFragment document fragment} to data. * * @param viewFragment The document fragment to be processed. */ toData(viewFragment: ViewDocumentFragment): string; /** * Converts the data to a {@link module:engine/view/documentfragment~ViewDocumentFragment document fragment}. * * @param data The data to be processed. */ toView(data: string): ViewDocumentFragment; /** * Registers a {@link module:engine/view/matcher~MatcherPattern} for view elements whose content should be treated as raw data * and its content should be converted to a * {@link module:engine/view/element~ViewElement#getCustomProperty custom property of a view element} called `"$rawContent"` while * converting {@link #toView to view}. * * @param pattern Pattern matching all view elements whose content should be treated as plain text. */ registerRawContentMatcher(pattern: MatcherPattern): void; /** * If the processor is set to use marked fillers, it will insert ` ` fillers wrapped in `` elements * (` `) instead of regular ` ` characters. * * This mode allows for more precise handling of block fillers (so they do not leak into the editor content) but bloats the * editor data with additional markup. * * This mode may be required by some features and will be turned on by them automatically. * * @param type Whether to use the default or marked ` ` block fillers. */ useFillerType(type: "default" | "marked"): void; /** * If `false`, comment nodes will be converted to `$comment`. Otherwise comment nodes are ignored. */ skipComments?: boolean; }