8
0
فهرست منبع

Merge pull request #3 from ckeditor/i/1110

Internal: Simplified the code. Removed a command, added translations, and the documentation. Closes ckeditor/ckeditor5#1110. Closes ckeditor/ckeditor5#5879.
Piotrek Koszuliński 6 سال پیش
والد
کامیت
3262bacf95
27فایلهای تغییر یافته به همراه1109 افزوده شده و 1238 حذف شده
  1. 15 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-extended-category.html
  2. 65 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-extended-category.js
  3. 15 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-new-category.html
  4. 65 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-new-category.js
  5. 0 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-source.html
  6. 49 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-source.js
  7. 15 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters.html
  8. 66 0
      packages/ckeditor5-special-characters/docs/_snippets/features/special-characters.js
  9. 34 0
      packages/ckeditor5-special-characters/docs/api/special-characters.md
  10. 147 0
      packages/ckeditor5-special-characters/docs/features/special-characters.md
  11. 256 0
      packages/ckeditor5-special-characters/lang/contexts.json
  12. 0 45
      packages/ckeditor5-special-characters/src/insertspecialcharactercommand.js
  13. 16 17
      packages/ckeditor5-special-characters/src/specialcharacters.js
  14. 36 23
      packages/ckeditor5-special-characters/src/specialcharactersarrows.js
  15. 54 165
      packages/ckeditor5-special-characters/src/specialcharacterscurrency.js
  16. 0 45
      packages/ckeditor5-special-characters/src/specialcharactersediting.js
  17. 3 1
      packages/ckeditor5-special-characters/src/specialcharactersessentials.js
  18. 146 517
      packages/ckeditor5-special-characters/src/specialcharacterslatin.js
  19. 62 181
      packages/ckeditor5-special-characters/src/specialcharactersmathematical.js
  20. 45 89
      packages/ckeditor5-special-characters/src/specialcharacterstext.js
  21. 12 3
      packages/ckeditor5-special-characters/src/specialcharactersui.js
  22. 3 2
      packages/ckeditor5-special-characters/src/ui/charactergridview.js
  23. 0 109
      packages/ckeditor5-special-characters/tests/insertspecialcharactercommand.js
  24. 1 2
      packages/ckeditor5-special-characters/tests/specialcharacters.js
  25. 0 35
      packages/ckeditor5-special-characters/tests/specialcharactersediting.js
  26. 3 3
      packages/ckeditor5-special-characters/tests/specialcharactersui.js
  27. 1 1
      packages/ckeditor5-special-characters/tests/ui/charactergridview.js

+ 15 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-extended-category.html

@@ -0,0 +1,15 @@
+<div id="snippet-special-characters-extended-category">
+	<h2 style="text-align:center;">The Flavorful Tuscany Meetup</h2>
+	<h3 style="text-align:center;">Welcome letter</h3>
+	<p>Dear Guest,</p>
+	<p>We are delighted to welcome you to the annual <i>Flavorful Tuscany Meetup</i> and hope you will enjoy the programme as well as your stay at the <a href="https://ckeditor.com">Bilancino Hotel</a>.</p>
+	<p>Please arrive at the <a href="https://ckeditor.com">Bilancino Hotel</a> reception desk at least half an hour earlier to make sure that the registration process goes as smoothly as possible.</p>
+	<p>We look forward to welcoming you to the event. The full schedule can be found below.</p>
+</div>
+
+<style>
+	.ck-content h2 {
+		border-bottom: none;
+		margin-bottom: 0;
+	}
+</style>

+ 65 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-extended-category.js

@@ -0,0 +1,65 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+/* globals window, document, console, ClassicEditor */
+
+import { CS_CONFIG } from '@ckeditor/ckeditor5-cloud-services/tests/_utils/cloud-services-config';
+
+ClassicEditor
+	.create( document.querySelector( '#snippet-special-characters-extended-category' ), {
+		removePlugins: [
+			'SpecialCharactersEmoji'
+		],
+		toolbar: {
+			items: [
+				'heading',
+				'|',
+				'bold',
+				'italic',
+				'bulletedList',
+				'numberedList',
+				'|',
+				'outdent',
+				'indent',
+				'|',
+				'alignment',
+				'|',
+				'specialCharacters',
+				'blockQuote',
+				'link',
+				'imageUpload',
+				'mediaEmbed',
+				'insertTable',
+				'|',
+				'undo',
+				'redo'
+			],
+			viewportTopOffset: window.getViewportTopOffsetConfig()
+		},
+		image: {
+			styles: [
+				'full',
+				'alignLeft',
+				'alignRight'
+			],
+			toolbar: [
+				'imageStyle:alignLeft',
+				'imageStyle:full',
+				'imageStyle:alignRight',
+				'|',
+				'imageTextAlternative'
+			]
+		},
+		table: {
+			contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells' ]
+		},
+		cloudServices: CS_CONFIG
+	} )
+	.then( editor => {
+		window.editor = editor;
+	} )
+	.catch( err => {
+		console.error( err.stack );
+	} );

+ 15 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-new-category.html

@@ -0,0 +1,15 @@
+<div id="snippet-special-characters-new-category">
+	<h2 style="text-align:center;">The Flavorful Tuscany Meetup</h2>
+	<h3 style="text-align:center;">Welcome letter</h3>
+	<p>Dear Guest,</p>
+	<p>We are delighted to welcome you to the annual <i>Flavorful Tuscany Meetup</i> and hope you will enjoy the programme as well as your stay at the <a href="https://ckeditor.com">Bilancino Hotel</a>.</p>
+	<p>Please arrive at the <a href="https://ckeditor.com">Bilancino Hotel</a> reception desk at least half an hour earlier to make sure that the registration process goes as smoothly as possible.</p>
+	<p>We look forward to welcoming you to the event. The full schedule can be found below.</p>
+</div>
+
+<style>
+	.ck-content h2 {
+		border-bottom: none;
+		margin-bottom: 0;
+	}
+</style>

+ 65 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-new-category.js

@@ -0,0 +1,65 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+/* globals window, document, console, ClassicEditor */
+
+import { CS_CONFIG } from '@ckeditor/ckeditor5-cloud-services/tests/_utils/cloud-services-config';
+
+ClassicEditor
+	.create( document.querySelector( '#snippet-special-characters-new-category' ), {
+		removePlugins: [
+			'SpecialCharactersArrowsExtended'
+		],
+		toolbar: {
+			items: [
+				'heading',
+				'|',
+				'bold',
+				'italic',
+				'bulletedList',
+				'numberedList',
+				'|',
+				'outdent',
+				'indent',
+				'|',
+				'alignment',
+				'|',
+				'specialCharacters',
+				'blockQuote',
+				'link',
+				'imageUpload',
+				'mediaEmbed',
+				'insertTable',
+				'|',
+				'undo',
+				'redo'
+			],
+			viewportTopOffset: window.getViewportTopOffsetConfig()
+		},
+		image: {
+			styles: [
+				'full',
+				'alignLeft',
+				'alignRight'
+			],
+			toolbar: [
+				'imageStyle:alignLeft',
+				'imageStyle:full',
+				'imageStyle:alignRight',
+				'|',
+				'imageTextAlternative'
+			]
+		},
+		table: {
+			contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells' ]
+		},
+		cloudServices: CS_CONFIG
+	} )
+	.then( editor => {
+		window.editor = editor;
+	} )
+	.catch( err => {
+		console.error( err.stack );
+	} );

+ 0 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-source.html


+ 49 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters-source.js

@@ -0,0 +1,49 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+/* globals window */
+
+import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
+import ClassicEditor from '@ckeditor/ckeditor5-build-classic/src/ckeditor';
+import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment';
+import SpecialCharactersEssentials from '@ckeditor/ckeditor5-special-characters/src/specialcharactersessentials';
+
+class SpecialCharactersEmoji extends Plugin {
+	static get pluginName() {
+		return 'SpecialCharactersEmoji';
+	}
+
+	init() {
+		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Emoji', [
+			{ title: 'smiley face', character: '😊' },
+			{ title: 'rocket', character: '🚀' },
+			{ title: 'basketball', character: '🏀' },
+			{ title: 'floppy disk', character: '💾' },
+			{ title: 'hearth', character: '❤' }
+		] );
+	}
+}
+
+class SpecialCharactersArrowsExtended extends Plugin {
+	static get pluginName() {
+		return 'SpecialCharactersArrowsExtended';
+	}
+
+	init() {
+		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Arrows', [
+			{ title: 'simple arrow left', character: '←' },
+			{ title: 'simple arrow up', character: '↑' },
+			{ title: 'simple arrow right', character: '→' },
+			{ title: 'simple arrow down', character: '↓' }
+		] );
+	}
+}
+
+ClassicEditor.builtinPlugins.push( Alignment );
+ClassicEditor.builtinPlugins.push( SpecialCharactersEssentials );
+ClassicEditor.builtinPlugins.push( SpecialCharactersEmoji );
+ClassicEditor.builtinPlugins.push( SpecialCharactersArrowsExtended );
+
+window.ClassicEditor = ClassicEditor;

+ 15 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters.html

@@ -0,0 +1,15 @@
+<div id="snippet-special-characters">
+	<h2 style="text-align:center;">The Flavorful Tuscany Meetup</h2>
+	<h3 style="text-align:center;">Welcome letter</h3>
+	<p>Dear Guest,</p>
+	<p>We are delighted to welcome you to the annual <i>Flavorful Tuscany Meetup</i> and hope you will enjoy the programme as well as your stay at the <a href="https://ckeditor.com">Bilancino Hotel</a>.</p>
+	<p>Please arrive at the <a href="https://ckeditor.com">Bilancino Hotel</a> reception desk at least half an hour earlier to make sure that the registration process goes as smoothly as possible.</p>
+	<p>We look forward to welcoming you to the event. The full schedule can be found below.</p>
+</div>
+
+<style>
+	.ck-content h2 {
+		border-bottom: none;
+		margin-bottom: 0;
+	}
+</style>

+ 66 - 0
packages/ckeditor5-special-characters/docs/_snippets/features/special-characters.js

@@ -0,0 +1,66 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+/* globals window, document, console, ClassicEditor */
+
+import { CS_CONFIG } from '@ckeditor/ckeditor5-cloud-services/tests/_utils/cloud-services-config';
+
+ClassicEditor
+	.create( document.querySelector( '#snippet-special-characters' ), {
+		removePlugins: [
+			'SpecialCharactersEmoji',
+			'SpecialCharactersArrowsExtended'
+		],
+		toolbar: {
+			items: [
+				'heading',
+				'|',
+				'bold',
+				'italic',
+				'bulletedList',
+				'numberedList',
+				'|',
+				'outdent',
+				'indent',
+				'|',
+				'alignment',
+				'|',
+				'specialCharacters',
+				'blockQuote',
+				'link',
+				'imageUpload',
+				'mediaEmbed',
+				'insertTable',
+				'|',
+				'undo',
+				'redo'
+			],
+			viewportTopOffset: window.getViewportTopOffsetConfig()
+		},
+		image: {
+			styles: [
+				'full',
+				'alignLeft',
+				'alignRight'
+			],
+			toolbar: [
+				'imageStyle:alignLeft',
+				'imageStyle:full',
+				'imageStyle:alignRight',
+				'|',
+				'imageTextAlternative'
+			]
+		},
+		table: {
+			contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells' ]
+		},
+		cloudServices: CS_CONFIG
+	} )
+	.then( editor => {
+		window.editor = editor;
+	} )
+	.catch( err => {
+		console.error( err.stack );
+	} );

+ 34 - 0
packages/ckeditor5-special-characters/docs/api/special-characters.md

@@ -0,0 +1,34 @@
+---
+category: api-reference
+---
+
+# Special characters feature for CKEditor 5
+
+[![npm version](https://badge.fury.io/js/%40ckeditor%2Fckeditor5-special-characters.svg)](https://www.npmjs.com/package/@ckeditor/ckeditor5-special-characters)
+
+This package implements the special characters feature for CKEditor 5.
+
+## Demo
+
+Check out the {@link features/special-characters#demo demo in the Special characters feature} guide.
+
+## Documentation
+
+See the {@link features/special-characters Special characters feature} guide and the {@link module:special-characters/specialcharacters~SpecialCharacters} plugin documentation.
+
+## Installation
+
+```plaintext
+npm install --save @ckeditor/ckeditor5-special-characters
+```
+
+## Contribute
+
+The source code of this package is available on GitHub in https://github.com/ckeditor/ckeditor5-special-characters.
+
+## External links
+
+* [`@ckeditor/ckeditor5-special-characters` on npm](https://www.npmjs.com/package/@ckeditor/ckeditor5-special-characters)
+* [`ckeditor/ckeditor5-special-characters` on GitHub](https://github.com/ckeditor/ckeditor5-special-characters)
+* [Issue tracker](https://github.com/ckeditor/ckeditor5/issues)
+* [Changelog](https://github.com/ckeditor/ckeditor5-special-characters/blob/master/CHANGELOG.md)

+ 147 - 0
packages/ckeditor5-special-characters/docs/features/special-characters.md

@@ -0,0 +1,147 @@
+---
+category: features
+menu-title: Special characters
+---
+
+# Special characters
+
+The {@link module:special-characters/specialcharacters~SpecialCharacters} plugin provides a possibility to insert a special character into the rich-text editor.
+
+## Demo
+
+Use the editor below to see the {@link module:special-characters/specialcharacters~SpecialCharacters} plugin in action.
+
+{@snippet features/special-characters-source}
+
+{@snippet features/special-characters}
+
+## Installation
+
+To add this feature to your rich-text editor, install the [`@ckeditor/ckeditor5-special-characters`](https://www.npmjs.com/package/@ckeditor/ckeditor5-special-characters) package:
+
+```plaintext
+npm install --save @ckeditor/ckeditor5-special-characters
+```
+
+And add it to your plugin list configuration:
+
+```js
+// The plugin provides API for management special characters and their categories. 
+import SpecialCharacters from '@ckeditor/ckeditor5-special-characters/src/specialcharacters';
+
+// `SpecialCharacters` does not provide any special character. They are delivered by another plugins.
+// You can import those ones that you want to use in the editor.
+import SpecialCharactersCurrency from '@ckeditor/ckeditor5-special-characters/src/specialcharacterscurrency';
+import SpecialCharactersMathematical from '@ckeditor/ckeditor5-special-characters/src/specialcharactersmathematical';
+import SpecialCharactersArrows from '@ckeditor/ckeditor5-special-characters/src/specialcharactersarrows';
+import SpecialCharactersLatin from '@ckeditor/ckeditor5-special-characters/src/specialcharacterslatin';
+import SpecialCharactersText from '@ckeditor/ckeditor5-special-characters/src/specialcharacterstext';
+
+// Or import the plugin combining basic set of characters. The imports above can be replaced with the `SpecialCharactersEssentials` plugin.
+import SpecialCharactersEssentials from '@ckeditor/ckeditor5-special-characters/src/specialcharactersessentials';
+
+ClassicEditor
+	.create( document.querySelector( '#editor' ), {
+		plugins: [ SpecialCharacters, ... ],
+		toolbar: [ 'specialCharacters', ... ],
+	} )
+	.then( ... )
+	.catch( ... );
+```
+
+<info-box info>
+	Read more about {@link builds/guides/integration/installing-plugins installing plugins}.
+</info-box>
+
+## Common API
+
+The {@link module:special-characters/specialcharacters~SpecialCharacters} plugin registers the UI button component (`'specialCharacters'`).
+
+<info-box>
+	We recommend using the official {@link framework/guides/development-tools#ckeditor-5-inspector CKEditor 5 inspector} for development and debugging. It will give you tons of useful information about the state of the editor such as internal data structures, selection, commands, and many more.
+</info-box>
+
+## Special characters in the package
+
+The `@ckeditor/ckeditor5-special-characters` package provides a few basic special characters grouped into the following categories:
+
+- {@link module:special-characters/specialcharactersarrows~SpecialCharactersArrows} – arrows special characters,
+- {@link module:special-characters/specialcharacterscurrency~SpecialCharactersCurrency} - currency special characters,
+- {@link module:special-characters/specialcharacterslatin~SpecialCharactersLatin} – Latin special characters,
+- {@link module:special-characters/specialcharactersmathematical~SpecialCharactersMathematical} – Mathematical special characters,
+- {@link module:special-characters/specialcharacterstext~SpecialCharactersText} – Text special characters
+- {@link module:special-characters/specialcharactersessentials~SpecialCharactersEssentials} – combining plugins listed above.
+
+## Adding a new special character category
+
+By using the {@link module:special-characters/specialcharacters~SpecialCharacters#addItems `SpecialCharacters#addItems()`} function, you can define a new special characters category.
+
+Let's create a simple plugin that provides the `Emoji` category in the special characters dropdown.
+
+```js
+import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
+
+export default class SpecialCharactersEmoji extends Plugin {
+	static get pluginName() {
+		return 'SpecialCharactersEmoji';
+	}
+
+	init() {
+		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Emoji', [
+			{ title: 'smiley face', character: '😊' },
+			{ title: 'rocket', character: '🚀' },
+			{ title: 'basketball', character: '🏀' },
+			{ title: 'floppy disk', character: '💾' },
+			{ title: 'hearth', character: '❤' }
+		] );
+	}
+}
+```
+
+After adding the above plugin into the editor, the new special characters category will be available in the dropdown.
+
+<info-box warning>
+    A title of a special character must be unique across the entire special characters set.
+</info-box>
+
+### Custom special characters category demo
+
+Use the special character icon in the editor's toolbar then select `Emoji` in the select dropdown in order to insert a emoji into the editor.
+
+{@snippet features/special-characters-new-category}
+
+## Adding a new special characters to existing category
+
+By using the {@link module:special-characters/specialcharacters~SpecialCharacters#addItems `SpecialCharacters#addItems()`} function, you can also add new special characters into existing category.
+
+```js
+class SpecialCharactersArrowsExtended extends Plugin {
+	static get pluginName() {
+		return 'SpecialCharactersArrowsExtended';
+	}
+
+	init() {
+        // The `Arrows` category is provided by the `SpecialCharactersArrows` plugin.
+		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Arrows', [
+			{ title: 'simple arrow left', character: '←' },
+			{ title: 'simple arrow up', character: '↑' },
+			{ title: 'simple arrow right', character: '→' },
+			{ title: 'simple arrow down', character: '↓' }
+		] );
+	}
+}
+```
+
+<info-box warning>
+    A title of a special character must be unique across the entire special characters set.
+</info-box>
+
+### Extending existing special characters category category demo
+
+Use the special character icon in the editor's toolbar then select `Arrows` in the select dropdown in order to add new arrows.
+
+{@snippet features/special-characters-extended-category}
+
+## Contribute
+
+The source code of the feature is available on GitHub in https://github.com/ckeditor/ckeditor5-special-characters.

+ 256 - 0
packages/ckeditor5-special-characters/lang/contexts.json

@@ -0,0 +1,256 @@
+{
+  "Special characters": "Special characters",
+  "leftwards double arrow": "leftwards double arrow",
+  "rightwards double arrow": "rightwards double arrow",
+  "upwards double arrow": "upwards double arrow",
+  "downwards double arrow": "downwards double arrow",
+  "leftwards dashed arrow": "leftwards dashed arrow",
+  "rightwards dashed arrow": "rightwards dashed arrow",
+  "upwards dashed arrow": "upwards dashed arrow",
+  "downwards dashed arrow": "downwards dashed arrow",
+  "leftwards arrow to bar": "leftwards arrow to bar",
+  "rightwards arrow to bar": "rightwards arrow to bar",
+  "upwards arrow to bar": "upwards arrow to bar",
+  "downwards arrow to bar": "downwards arrow to bar",
+  "up down arrow with base": "up down arrow with base",
+  "back with leftwards arrow above": "back with leftwards arrow above",
+  "end with leftwards arrow above": "end with leftwards arrow above",
+  "on with exclamation mark with left right arrow above": "on with exclamation mark with left right arrow above",
+  "soon with rightwards arrow above": "soon with rightwards arrow above",
+  "top with upwards arrow above": "top with upwards arrow above",
+  "Dollar sign": "Dollar sign",
+  "Euro sign": "Euro sign",
+  "Yen sign": "Yen sign",
+  "Pound sign": "Pound sign",
+  "Cent sign": "Cent sign",
+  "Euro-currency sign": "Euro-currency sign",
+  "Colon sign": "Colon sign",
+  "Cruzeiro sign": "Cruzeiro sign",
+  "French franc sign": "French franc sign",
+  "Lira sign": "Lira sign",
+  "Currency sign": "Currency sign",
+  "Bitcoin sign": "Bitcoin sign",
+  "Mill sign": "Mill sign",
+  "Naira sign": "Naira sign",
+  "Peseta sign": "Peseta sign",
+  "Rupee sign": "Rupee sign",
+  "Won sign": "Won sign",
+  "New sheqel sign": "New sheqel sign",
+  "Dong sign": "Dong sign",
+  "Kip sign": "Kip sign",
+  "Tugrik sign": "Tugrik sign",
+  "Drachma sign": "Drachma sign",
+  "German penny sign": "German penny sign",
+  "Peso sign": "Peso sign",
+  "Guarani sign": "Guarani sign",
+  "Austral sign": "Austral sign",
+  "Hryvnia sign": "Hryvnia sign",
+  "Cedi sign": "Cedi sign",
+  "Livre tournois sign": "Livre tournois sign",
+  "Spesmilo sign": "Spesmilo sign",
+  "Tenge sign": "Tenge sign",
+  "Indian rupee sign": "Indian rupee sign",
+  "Turkish lira sign": "Turkish lira sign",
+  "Nordic mark sign": "Nordic mark sign",
+  "Manat sign": "Manat sign",
+  "Ruble sign": "Ruble sign",
+  "Latin capital letter a with macron": "Latin capital letter a with macron",
+  "Latin small letter a with macron": "Latin small letter a with macron",
+  "Latin capital letter a with breve": "Latin capital letter a with breve",
+  "Latin small letter a with breve": "Latin small letter a with breve",
+  "Latin capital letter a with ogonek": "Latin capital letter a with ogonek",
+  "Latin small letter a with ogonek": "Latin small letter a with ogonek",
+  "Latin capital letter c with acute": "Latin capital letter c with acute",
+  "Latin small letter c with acute": "Latin small letter c with acute",
+  "Latin capital letter c with circumflex": "Latin capital letter c with circumflex",
+  "Latin small letter c with circumflex": "Latin small letter c with circumflex",
+  "Latin capital letter c with dot above": "Latin capital letter c with dot above",
+  "Latin small letter c with dot above": "Latin small letter c with dot above",
+  "Latin capital letter c with caron": "Latin capital letter c with caron",
+  "Latin small letter c with caron": "Latin small letter c with caron",
+  "Latin capital letter d with caron": "Latin capital letter d with caron",
+  "Latin small letter d with caron": "Latin small letter d with caron",
+  "Latin capital letter d with stroke": "Latin capital letter d with stroke",
+  "Latin small letter d with stroke": "Latin small letter d with stroke",
+  "Latin capital letter e with macron": "Latin capital letter e with macron",
+  "Latin small letter e with macron": "Latin small letter e with macron",
+  "Latin capital letter e with breve": "Latin capital letter e with breve",
+  "Latin small letter e with breve": "Latin small letter e with breve",
+  "Latin capital letter e with dot above": "Latin capital letter e with dot above",
+  "Latin small letter e with dot above": "Latin small letter e with dot above",
+  "Latin capital letter e with ogonek": "Latin capital letter e with ogonek",
+  "Latin small letter e with ogonek": "Latin small letter e with ogonek",
+  "Latin capital letter e with caron": "Latin capital letter e with caron",
+  "Latin small letter e with caron": "Latin small letter e with caron",
+  "Latin capital letter g with circumflex": "Latin capital letter g with circumflex",
+  "Latin small letter g with circumflex": "Latin small letter g with circumflex",
+  "Latin capital letter g with breve": "Latin capital letter g with breve",
+  "Latin small letter g with breve": "Latin small letter g with breve",
+  "Latin capital letter g with dot above": "Latin capital letter g with dot above",
+  "Latin small letter g with dot above": "Latin small letter g with dot above",
+  "Latin capital letter g with cedilla": "Latin capital letter g with cedilla",
+  "Latin small letter g with cedilla": "Latin small letter g with cedilla",
+  "Latin capital letter h with circumflex": "Latin capital letter h with circumflex",
+  "Latin small letter h with circumflex": "Latin small letter h with circumflex",
+  "Latin capital letter h with stroke": "Latin capital letter h with stroke",
+  "Latin small letter h with stroke": "Latin small letter h with stroke",
+  "Latin capital letter i with tilde": "Latin capital letter i with tilde",
+  "Latin small letter i with tilde": "Latin small letter i with tilde",
+  "Latin capital letter i with macron": "Latin capital letter i with macron",
+  "Latin small letter i with macron": "Latin small letter i with macron",
+  "Latin capital letter i with breve": "Latin capital letter i with breve",
+  "Latin small letter i with breve": "Latin small letter i with breve",
+  "Latin capital letter i with ogonek": "Latin capital letter i with ogonek",
+  "Latin small letter i with ogonek": "Latin small letter i with ogonek",
+  "Latin capital letter i with dot above": "Latin capital letter i with dot above",
+  "Latin small letter dotless i": "Latin small letter dotless i",
+  "Latin capital ligature ij": "Latin capital ligature ij",
+  "Latin small ligature ij": "Latin small ligature ij",
+  "Latin capital letter j with circumflex": "Latin capital letter j with circumflex",
+  "Latin small letter j with circumflex": "Latin small letter j with circumflex",
+  "Latin capital letter k with cedilla": "Latin capital letter k with cedilla",
+  "Latin small letter k with cedilla": "Latin small letter k with cedilla",
+  "Latin small letter kra": "Latin small letter kra",
+  "Latin capital letter l with acute": "Latin capital letter l with acute",
+  "Latin small letter l with acute": "Latin small letter l with acute",
+  "Latin capital letter l with cedilla": "Latin capital letter l with cedilla",
+  "Latin small letter l with cedilla": "Latin small letter l with cedilla",
+  "Latin capital letter l with caron": "Latin capital letter l with caron",
+  "Latin small letter l with caron": "Latin small letter l with caron",
+  "Latin capital letter l with middle dot": "Latin capital letter l with middle dot",
+  "Latin small letter l with middle dot": "Latin small letter l with middle dot",
+  "Latin capital letter l with stroke": "Latin capital letter l with stroke",
+  "Latin small letter l with stroke": "Latin small letter l with stroke",
+  "Latin capital letter n with acute": "Latin capital letter n with acute",
+  "Latin small letter n with acute": "Latin small letter n with acute",
+  "Latin capital letter n with cedilla": "Latin capital letter n with cedilla",
+  "Latin small letter n with cedilla": "Latin small letter n with cedilla",
+  "Latin capital letter n with caron": "Latin capital letter n with caron",
+  "Latin small letter n with caron": "Latin small letter n with caron",
+  "Latin small letter n preceded by apostrophe": "Latin small letter n preceded by apostrophe",
+  "Latin capital letter eng": "Latin capital letter eng",
+  "Latin small letter eng": "Latin small letter eng",
+  "Latin capital letter o with macron": "Latin capital letter o with macron",
+  "Latin small letter o with macron": "Latin small letter o with macron",
+  "Latin capital letter o with breve": "Latin capital letter o with breve",
+  "Latin small letter o with breve": "Latin small letter o with breve",
+  "Latin capital letter o with double acute": "Latin capital letter o with double acute",
+  "Latin small letter o with double acute": "Latin small letter o with double acute",
+  "Latin capital ligature oe": "Latin capital ligature oe",
+  "Latin small ligature oe": "Latin small ligature oe",
+  "Latin capital letter r with acute": "Latin capital letter r with acute",
+  "Latin small letter r with acute": "Latin small letter r with acute",
+  "Latin capital letter r with cedilla": "Latin capital letter r with cedilla",
+  "Latin small letter r with cedilla": "Latin small letter r with cedilla",
+  "Latin capital letter r with caron": "Latin capital letter r with caron",
+  "Latin small letter r with caron": "Latin small letter r with caron",
+  "Latin capital letter s with acute": "Latin capital letter s with acute",
+  "Latin small letter s with acute": "Latin small letter s with acute",
+  "Latin capital letter s with circumflex": "Latin capital letter s with circumflex",
+  "Latin small letter s with circumflex": "Latin small letter s with circumflex",
+  "Latin capital letter s with cedilla": "Latin capital letter s with cedilla",
+  "Latin small letter s with cedilla": "Latin small letter s with cedilla",
+  "Latin capital letter s with caron": "Latin capital letter s with caron",
+  "Latin small letter s with caron": "Latin small letter s with caron",
+  "Latin capital letter t with cedilla": "Latin capital letter t with cedilla",
+  "Latin small letter t with cedilla": "Latin small letter t with cedilla",
+  "Latin capital letter t with caron": "Latin capital letter t with caron",
+  "Latin small letter t with caron": "Latin small letter t with caron",
+  "Latin capital letter t with stroke": "Latin capital letter t with stroke",
+  "Latin small letter t with stroke": "Latin small letter t with stroke",
+  "Latin capital letter u with tilde": "Latin capital letter u with tilde",
+  "Latin small letter u with tilde": "Latin small letter u with tilde",
+  "Latin capital letter u with macron": "Latin capital letter u with macron",
+  "Latin small letter u with macron": "Latin small letter u with macron",
+  "Latin capital letter u with breve": "Latin capital letter u with breve",
+  "Latin small letter u with breve": "Latin small letter u with breve",
+  "Latin capital letter u with ring above": "Latin capital letter u with ring above",
+  "Latin small letter u with ring above": "Latin small letter u with ring above",
+  "Latin capital letter u with double acute": "Latin capital letter u with double acute",
+  "Latin small letter u with double acute": "Latin small letter u with double acute",
+  "Latin capital letter u with ogonek": "Latin capital letter u with ogonek",
+  "Latin small letter u with ogonek": "Latin small letter u with ogonek",
+  "Latin capital letter w with circumflex": "Latin capital letter w with circumflex",
+  "Latin small letter w with circumflex": "Latin small letter w with circumflex",
+  "Latin capital letter y with circumflex": "Latin capital letter y with circumflex",
+  "Latin small letter y with circumflex": "Latin small letter y with circumflex",
+  "Latin capital letter y with diaeresis": "Latin capital letter y with diaeresis",
+  "Latin capital letter z with acute": "Latin capital letter z with acute",
+  "Latin small letter z with acute": "Latin small letter z with acute",
+  "Latin capital letter z with dot above": "Latin capital letter z with dot above",
+  "Latin small letter z with dot above": "Latin small letter z with dot above",
+  "Latin capital letter z with caron": "Latin capital letter z with caron",
+  "Latin small letter z with caron": "Latin small letter z with caron",
+  "Latin small letter long s": "Latin small letter long s",
+  "Less-than sign": "Less-than sign",
+  "Greater-than sign": "Greater-than sign",
+  "Less-than or equal to": "Less-than or equal to",
+  "Greater-than or equal to": "Greater-than or equal to",
+  "En dash": "En dash",
+  "Em dash": "Em dash",
+  "Macron": "Macron",
+  "Overline": "Overline",
+  "Degree sign": "Degree sign",
+  "Minus sign": "Minus sign",
+  "Plus-minus sign": "Plus-minus sign",
+  "Division sign": "Division sign",
+  "Fraction slash": "Fraction slash",
+  "Multiplication sign": "Multiplication sign",
+  "Latin small letter f with hook": "Latin small letter f with hook",
+  "Integral": "Integral",
+  "N-ary summation": "N-ary summation",
+  "Infinity": "Infinity",
+  "Square root": "Square root",
+  "Tilde operator": "Tilde operator",
+  "Approximately equal to": "Approximately equal to",
+  "Almost equal to": "Almost equal to",
+  "Not equal to": "Not equal to",
+  "Identical to": "Identical to",
+  "Element of": "Element of",
+  "Not an element of": "Not an element of",
+  "Contains as member": "Contains as member",
+  "N-ary product": "N-ary product",
+  "Logical and": "Logical and",
+  "Logical or": "Logical or",
+  "Not sign": "Not sign",
+  "Intersection": "Intersection",
+  "Union": "Union",
+  "Partial differential": "Partial differential",
+  "For all": "For all",
+  "There exists": "There exists",
+  "Empty set": "Empty set",
+  "Nabla": "Nabla",
+  "Asterisk operator": "Asterisk operator",
+  "Proportional to": "Proportional to",
+  "Angle": "Angle",
+  "Vulgar fraction one quarter": "Vulgar fraction one quarter",
+  "Vulgar fraction one half": "Vulgar fraction one half",
+  "Vulgar fraction three quarters": "Vulgar fraction three quarters",
+  "Single left-pointing angle quotation mark": "Single left-pointing angle quotation mark",
+  "Single right-pointing angle quotation mark": "Single right-pointing angle quotation mark",
+  "Left-pointing double angle quotation mark": "Left-pointing double angle quotation mark",
+  "Right-pointing double angle quotation mark": "Right-pointing double angle quotation mark",
+  "Left single quotation mark": "Left single quotation mark",
+  "Right single quotation mark": "Right single quotation mark",
+  "Left double quotation mark": "Left double quotation mark",
+  "Right double quotation mark": "Right double quotation mark",
+  "Single low-9 quotation mark": "Single low-9 quotation mark",
+  "Double low-9 quotation mark": "Double low-9 quotation mark",
+  "Inverted exclamation mark": "Inverted exclamation mark",
+  "Inverted question mark": "Inverted question mark",
+  "Two dot leader": "Two dot leader",
+  "Horizontal ellipsis": "Horizontal ellipsis",
+  "Double dagger": "Double dagger",
+  "Per mille sign": "Per mille sign",
+  "Per ten thousand sign": "Per ten thousand sign",
+  "Double exclamation mark": "Double exclamation mark",
+  "Question exclamation mark": "Question exclamation mark",
+  "Exclamation question mark": "Exclamation question mark",
+  "Double question mark": "Double question mark",
+  "Copyright sign": "Copyright sign",
+  "Registered sign": "Registered sign",
+  "Trade mark sign": "Trade mark sign",
+  "Section sign": "Section sign",
+  "Paragraph sign": "Paragraph sign",
+  "Reversed paragraph sign": "Reversed paragraph sign"
+}

+ 0 - 45
packages/ckeditor5-special-characters/src/insertspecialcharactercommand.js

@@ -1,45 +0,0 @@
-/**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
-
-/**
- * @module special-characters/insertspecialcharactercommand
- */
-
-import Command from '@ckeditor/ckeditor5-core/src/command';
-
-/**
- * @extends module:core/command~Command
- */
-export default class InsertSpecialCharacterCommand extends Command {
-	/**
-	 * Creates an instance of the command.
-	 *
-	 * @param {module:core/editor/editor~Editor} editor
-	 */
-	constructor( editor ) {
-		super( editor );
-
-		/**
-		 * @readonly
-		 * @private
-		 * @member {module:typing/inputcommand~InputCommand} #_inputCommand
-		 */
-		this._inputCommand = editor.commands.get( 'input' );
-
-		// Use the state of `Input` command to determine whether the special characters could be inserted.
-		this.bind( 'isEnabled' ).to( this._inputCommand, 'isEnabled' );
-	}
-
-	/**
-	 * @param {Object} options
-	 * @param {String} options.item An id of the special character that should be added to the editor.
-	 */
-	execute( options ) {
-		const editor = this.editor;
-		const character = editor.plugins.get( 'SpecialCharacters' ).getCharacter( options.item );
-
-		this._inputCommand.execute( { text: character } );
-	}
-}

+ 16 - 17
packages/ckeditor5-special-characters/src/specialcharacters.js

@@ -9,7 +9,6 @@
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import SpecialCharactersUI from './specialcharactersui';
 import SpecialCharactersUI from './specialcharactersui';
-import SpecialCharactersEditing from './specialcharactersediting';
 
 
 import '../theme/specialcharacters.css';
 import '../theme/specialcharacters.css';
 
 
@@ -19,6 +18,20 @@ import '../theme/specialcharacters.css';
  * @extends module:core/plugin~Plugin
  * @extends module:core/plugin~Plugin
  */
  */
 export default class SpecialCharacters extends Plugin {
 export default class SpecialCharacters extends Plugin {
+	/**
+	 * @inheritDoc
+	 */
+	static get requires() {
+		return [ SpecialCharactersUI ];
+	}
+
+	/**
+	 * @inheritDoc
+	 */
+	static get pluginName() {
+		return 'SpecialCharacters';
+	}
+
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
@@ -42,20 +55,6 @@ export default class SpecialCharacters extends Plugin {
 		this._groups = new Map();
 		this._groups = new Map();
 	}
 	}
 
 
-	/**
-	 * @inheritDoc
-	 */
-	static get requires() {
-		return [ SpecialCharactersEditing, SpecialCharactersUI ];
-	}
-
-	/**
-	 * @inheritDoc
-	 */
-	static get pluginName() {
-		return 'SpecialCharacters';
-	}
-
 	/**
 	/**
 	 * Adds a collection of special characters to specified group. A title of a special character must be unique.
 	 * Adds a collection of special characters to specified group. A title of a special character must be unique.
 	 *
 	 *
@@ -118,6 +117,6 @@ export default class SpecialCharacters extends Plugin {
 /**
 /**
  * @typedef {Object} module:special-characters/specialcharacters~SpecialCharacterDefinition
  * @typedef {Object} module:special-characters/specialcharacters~SpecialCharacterDefinition
  *
  *
- * @property {String} title A unique title of the character.
- * @property {String} character A symbol that should be inserted to the editor.
+ * @property {String} title A unique name of the character (e.g. "greek small letter epsilon").
+ * @property {String} character A human-readable character displayed as label (e.g. "ε").
  */
  */

+ 36 - 23
packages/ckeditor5-special-characters/src/specialcharactersarrows.js

@@ -4,45 +4,58 @@
  */
  */
 
 
 /**
 /**
- * @module special-characters/specialcharacters
+ * @module special-characters/specialcharactersarrows
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import SpecialCharacters from './specialcharacters';
 import SpecialCharacters from './specialcharacters';
 
 
+/**
+ * A plugin provides special characters for the "Arrows" category.
+ *
+ *		ClassicEditor
+ *			.create( {
+ *				plugins: [ ..., SpecialCharacters, SpecialCharactersArrows ],
+ *			} )
+ *			.then( ... )
+ *			.catch( ... );
+ *
+ * @extends module:core/plugin~Plugin
+ */
 export default class SpecialCharactersArrows extends Plugin {
 export default class SpecialCharactersArrows extends Plugin {
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	static get requires() {
 	static get requires() {
-		return [
-			SpecialCharacters
-		];
+		return [ SpecialCharacters ];
 	}
 	}
 
 
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	init() {
 	init() {
-		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Arrows', [
-			{ title: 'leftwards double arrow', character: '⇐' },
-			{ title: 'rightwards double arrow', character: '⇒' },
-			{ title: 'upwards double arrow', character: '⇑' },
-			{ title: 'downwards double arrow', character: '⇓' },
-			{ title: 'leftwards dashed arrow', character: '⇠' },
-			{ title: 'rightwards dashed arrow', character: '⇢' },
-			{ title: 'upwards dashed arrow', character: '⇡' },
-			{ title: 'downwards dashed arrow', character: '⇣' },
-			{ title: 'leftwards arrow to bar', character: '⇤' },
-			{ title: 'rightwards arrow to bar', character: '⇥' },
-			{ title: 'upwards arrow to bar', character: '⤒' },
-			{ title: 'downwards arrow to bar', character: '⤓' },
-			{ title: 'up down arrow with base', character: '↨' },
-			{ title: 'back with leftwards arrow above', character: '🔙' },
-			{ title: 'end with leftwards arrow above', character: '🔚' },
-			{ title: 'on with exclamation mark with left right arrow above', character: '🔛' },
-			{ title: 'soon with rightwards arrow above', character: '🔜' },
-			{ title: 'top with upwards arrow above', character: '🔝' }
+		const editor = this.editor;
+		const t = editor.t;
+
+		editor.plugins.get( 'SpecialCharacters' ).addItems( 'Arrows', [
+			{ title: t( 'leftwards double arrow' ), character: '⇐' },
+			{ title: t( 'rightwards double arrow' ), character: '⇒' },
+			{ title: t( 'upwards double arrow' ), character: '⇑' },
+			{ title: t( 'downwards double arrow' ), character: '⇓' },
+			{ title: t( 'leftwards dashed arrow' ), character: '⇠' },
+			{ title: t( 'rightwards dashed arrow' ), character: '⇢' },
+			{ title: t( 'upwards dashed arrow' ), character: '⇡' },
+			{ title: t( 'downwards dashed arrow' ), character: '⇣' },
+			{ title: t( 'leftwards arrow to bar' ), character: '⇤' },
+			{ title: t( 'rightwards arrow to bar' ), character: '⇥' },
+			{ title: t( 'upwards arrow to bar' ), character: '⤒' },
+			{ title: t( 'downwards arrow to bar' ), character: '⤓' },
+			{ title: t( 'up down arrow with base' ), character: '↨' },
+			{ title: t( 'back with leftwards arrow above' ), character: '🔙' },
+			{ title: t( 'end with leftwards arrow above' ), character: '🔚' },
+			{ title: t( 'on with exclamation mark with left right arrow above' ), character: '🔛' },
+			{ title: t( 'soon with rightwards arrow above' ), character: '🔜' },
+			{ title: t( 'top with upwards arrow above' ), character: '🔝' }
 		] );
 		] );
 	}
 	}
 }
 }

+ 54 - 165
packages/ckeditor5-special-characters/src/specialcharacterscurrency.js

@@ -4,187 +4,76 @@
  */
  */
 
 
 /**
 /**
- * @module special-characters/specialcharacters
+ * @module special-characters/specialcharacterscurrency
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import SpecialCharacters from './specialcharacters';
 import SpecialCharacters from './specialcharacters';
 
 
+/**
+ * A plugin provides special characters for the "Currency" category.
+ *
+ *		ClassicEditor
+ *			.create( {
+ *				plugins: [ ..., SpecialCharacters, SpecialCharactersCurrency ],
+ *			} )
+ *			.then( ... )
+ *			.catch( ... );
+ *
+ * @extends module:core/plugin~Plugin
+ */
 export default class SpecialCharactersCurrency extends Plugin {
 export default class SpecialCharactersCurrency extends Plugin {
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	static get requires() {
 	static get requires() {
-		return [
-			SpecialCharacters
-		];
+		return [ SpecialCharacters ];
 	}
 	}
 
 
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	init() {
 	init() {
-		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Currency', [
-			{
-				character: '$',
-				title: 'Dollar sign'
-			},
-			{
-				character: '€',
-				title: 'Euro sign'
-			},
-			{
-				character: '¥',
-				title: 'Yen sign'
-			},
-			{
-				character: '£',
-				title: 'Pound sign'
-			},
-			{
-				character: '¢',
-				title: 'Cent sign'
-			},
-			{
-				character: '₠',
-				title: 'Euro-currency sign'
-			},
-			{
-				character: '₡',
-				title: 'Colon sign'
-			},
-			{
-				character: '₢',
-				title: 'Cruzeiro sign'
-			},
-			{
-				character: '₣',
-				title: 'French franc sign'
-			},
-			{
-				character: '₤',
-				title: 'Lira sign'
-			},
-			{
-				character: '¤',
-				title: 'Currency sign'
-			},
-			{
-				character: '₿',
-				title: 'Bitcoin sign'
-			},
-			{
-				character: '₥',
-				title: 'Mill sign'
-			},
-			{
-				character: '₦',
-				title: 'Naira sign'
-			},
-			{
-				character: '₧',
-				title: 'Peseta sign'
-			},
-			{
-				character: '₨',
-				title: 'Rupee sign'
-			},
-			{
-				character: '₩',
-				title: 'Won sign'
-			},
-			{
-				character: '₪',
-				title: 'New sheqel sign'
-			},
-			{
-				character: '₫',
-				title: 'Dong sign'
-			},
-			{
-				character: '₭',
-				title: 'Kip sign'
-			},
-			{
-				character: '₮',
-				title: 'Tugrik sign'
-			},
-			{
-				character: '₯',
-				title: 'Drachma sign'
-			},
-			{
-				character: '₰',
-				title: 'German penny sign'
-			},
-			{
-				character: '₱',
-				title: 'Peso sign'
-			},
-			{
-				character: '₲',
-				title: 'Guarani sign'
-			},
-			{
-				character: '₳',
-				title: 'Austral sign'
-			},
-			{
-				character: '₴',
-				title: 'Hryvnia sign'
-			},
-			{
-				character: '₵',
-				title: 'Cedi sign'
-			},
-			{
-				character: '₶',
-				title: 'Livre tournois sign'
-			},
-			{
-				character: '₷',
-				title: 'Spesmilo sign'
-			},
-			{
-				character: '₸',
-				title: 'Tenge sign'
-			},
-			{
-				character: '₹',
-				title: 'Indian rupee sign'
-			},
-			{
-				character: '₺',
-				title: 'Turkish lira sign'
-			},
-			{
-				character: '₻',
-				title: 'Nordic mark sign'
-			},
-			{
-				character: '₼',
-				title: 'Manat sign'
-			},
-			{
-				character: '₽',
-				title: 'Ruble sign'
-			}/* ,
-			{
-				character: '円',
-				title: ''
-			},
-			{
-				character: '元',
-				title: ''
-			},
-			{
-				character: '圓',
-				title: ''
-			},
-			{
-				character: '圆',
-				title: ''
-			} */
+		const editor = this.editor;
+		const t = editor.t;
+
+		editor.plugins.get( 'SpecialCharacters' ).addItems( 'Currency', [
+			{ character: '$', title: t( 'Dollar sign' ) },
+			{ character: '€', title: t( 'Euro sign' ) },
+			{ character: '¥', title: t( 'Yen sign' ) },
+			{ character: '£', title: t( 'Pound sign' ) },
+			{ character: '¢', title: t( 'Cent sign' ) },
+			{ character: '₠', title: t( 'Euro-currency sign' ) },
+			{ character: '₡', title: t( 'Colon sign' ) },
+			{ character: '₢', title: t( 'Cruzeiro sign' ) },
+			{ character: '₣', title: t( 'French franc sign' ) },
+			{ character: '₤', title: t( 'Lira sign' ) },
+			{ character: '¤', title: t( 'Currency sign' ) },
+			{ character: '₿', title: t( 'Bitcoin sign' ) },
+			{ character: '₥', title: t( 'Mill sign' ) },
+			{ character: '₦', title: t( 'Naira sign' ) },
+			{ character: '₧', title: t( 'Peseta sign' ) },
+			{ character: '₨', title: t( 'Rupee sign' ) },
+			{ character: '₩', title: t( 'Won sign' ) },
+			{ character: '₪', title: t( 'New sheqel sign' ) },
+			{ character: '₫', title: t( 'Dong sign' ) },
+			{ character: '₭', title: t( 'Kip sign' ) },
+			{ character: '₮', title: t( 'Tugrik sign' ) },
+			{ character: '₯', title: t( 'Drachma sign' ) },
+			{ character: '₰', title: t( 'German penny sign' ) },
+			{ character: '₱', title: t( 'Peso sign' ) },
+			{ character: '₲', title: t( 'Guarani sign' ) },
+			{ character: '₳', title: t( 'Austral sign' ) },
+			{ character: '₴', title: t( 'Hryvnia sign' ) },
+			{ character: '₵', title: t( 'Cedi sign' ) },
+			{ character: '₶', title: t( 'Livre tournois sign' ) },
+			{ character: '₷', title: t( 'Spesmilo sign' ) },
+			{ character: '₸', title: t( 'Tenge sign' ) },
+			{ character: '₹', title: t( 'Indian rupee sign' ) },
+			{ character: '₺', title: t( 'Turkish lira sign' ) },
+			{ character: '₻', title: t( 'Nordic mark sign' ) },
+			{ character: '₼', title: t( 'Manat sign' ) },
+			{ character: '₽', title: t( 'Ruble sign' ) }
 		] );
 		] );
 	}
 	}
 }
 }

+ 0 - 45
packages/ckeditor5-special-characters/src/specialcharactersediting.js

@@ -1,45 +0,0 @@
-/**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
-
-/**
- * @module special-characters/specialcharactersediting
- */
-
-import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
-import Typing from '@ckeditor/ckeditor5-typing/src/typing';
-import InsertSpecialCharacterCommand from './insertspecialcharactercommand';
-
-/**
- * Special characters editing plugin.
- *
- * It registers the {@link module:special-characters/insertspecialcharactercommand~InsertSpecialCharacterCommand Special Character} command.
- *
- * @extends module:core/plugin~Plugin
- */
-export default class SpecialCharactersEditing extends Plugin {
-	/**
-	 * @inheritDoc
-	 */
-	static get pluginName() {
-		return 'SpecialCharactersEditing';
-	}
-
-	/**
-	 * @inheritDoc
-	 */
-	static get requires() {
-		return [ Typing ];
-	}
-
-	/**
-	 * @inheritDoc
-	 */
-	init() {
-		const editor = this.editor;
-
-		const command = new InsertSpecialCharacterCommand( editor );
-		editor.commands.add( 'insertSpecialCharacter', command );
-	}
-}

+ 3 - 1
packages/ckeditor5-special-characters/src/specialcharactersessentials.js

@@ -4,7 +4,7 @@
  */
  */
 
 
 /**
 /**
- * @module special-characters/specialcharacters
+ * @module special-characters/specialcharactersessentials
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
@@ -25,6 +25,8 @@ import SpecialCharactersText from './specialcharacterstext';
  *			} )
  *			} )
  *			.then( ... )
  *			.then( ... )
  *			.catch( ... );
  *			.catch( ... );
+ *
+ * @extends module:core/plugin~Plugin
  */
  */
 export default class SpecialCharactersEssentials extends Plugin {
 export default class SpecialCharactersEssentials extends Plugin {
 	/**
 	/**

+ 146 - 517
packages/ckeditor5-special-characters/src/specialcharacterslatin.js

@@ -4,539 +4,168 @@
  */
  */
 
 
 /**
 /**
- * @module special-characters/specialcharacters
+ * @module special-characters/specialcharacterslatin
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import SpecialCharacters from './specialcharacters';
 import SpecialCharacters from './specialcharacters';
 
 
+/**
+ * A plugin provides special characters for the "Latin" category.
+ *
+ *		ClassicEditor
+ *			.create( {
+ *				plugins: [ ..., SpecialCharacters, SpecialCharactersLatin ],
+ *			} )
+ *			.then( ... )
+ *			.catch( ... );
+ *
+ * @extends module:core/plugin~Plugin
+ */
 export default class SpecialCharactersLatin extends Plugin {
 export default class SpecialCharactersLatin extends Plugin {
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	static get requires() {
 	static get requires() {
-		return [
-			SpecialCharacters
-		];
+		return [ SpecialCharacters ];
 	}
 	}
 
 
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	init() {
 	init() {
-		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Latin', [
-			{
-				character: 'Ā',
-				title: 'Latin capital letter a with macron'
-			},
-			{
-				character: 'ā',
-				title: 'Latin small letter a with macron'
-			},
-			{
-				character: 'Ă',
-				title: 'Latin capital letter a with breve'
-			},
-			{
-				character: 'ă',
-				title: 'Latin small letter a with breve'
-			},
-			{
-				character: 'Ą',
-				title: 'Latin capital letter a with ogonek'
-			},
-			{
-				character: 'ą',
-				title: 'Latin small letter a with ogonek'
-			},
-			{
-				character: 'Ć',
-				title: 'Latin capital letter c with acute'
-			},
-			{
-				character: 'ć',
-				title: 'Latin small letter c with acute'
-			},
-			{
-				character: 'Ĉ',
-				title: 'Latin capital letter c with circumflex'
-			},
-			{
-				character: 'ĉ',
-				title: 'Latin small letter c with circumflex'
-			},
-			{
-				character: 'Ċ',
-				title: 'Latin capital letter c with dot above'
-			},
-			{
-				character: 'ċ',
-				title: 'Latin small letter c with dot above'
-			},
-			{
-				character: 'Č',
-				title: 'Latin capital letter c with caron'
-			},
-			{
-				character: 'č',
-				title: 'Latin small letter c with caron'
-			},
-			{
-				character: 'Ď',
-				title: 'Latin capital letter d with caron'
-			},
-			{
-				character: 'ď',
-				title: 'Latin small letter d with caron'
-			},
-			{
-				character: 'Đ',
-				title: 'Latin capital letter d with stroke'
-			},
-			{
-				character: 'đ',
-				title: 'Latin small letter d with stroke'
-			},
-			{
-				character: 'Ē',
-				title: 'Latin capital letter e with macron'
-			},
-			{
-				character: 'ē',
-				title: 'Latin small letter e with macron'
-			},
-			{
-				character: 'Ĕ',
-				title: 'Latin capital letter e with breve'
-			},
-			{
-				character: 'ĕ',
-				title: 'Latin small letter e with breve'
-			},
-			{
-				character: 'Ė',
-				title: 'Latin capital letter e with dot above'
-			},
-			{
-				character: 'ė',
-				title: 'Latin small letter e with dot above'
-			},
-			{
-				character: 'Ę',
-				title: 'Latin capital letter e with ogonek'
-			},
-			{
-				character: 'ę',
-				title: 'Latin small letter e with ogonek'
-			},
-			{
-				character: 'Ě',
-				title: 'Latin capital letter e with caron'
-			},
-			{
-				character: 'ě',
-				title: 'Latin small letter e with caron'
-			},
-			{
-				character: 'Ĝ',
-				title: 'Latin capital letter g with circumflex'
-			},
-			{
-				character: 'ĝ',
-				title: 'Latin small letter g with circumflex'
-			},
-			{
-				character: 'Ğ',
-				title: 'Latin capital letter g with breve'
-			},
-			{
-				character: 'ğ',
-				title: 'Latin small letter g with breve'
-			},
-			{
-				character: 'Ġ',
-				title: 'Latin capital letter g with dot above'
-			},
-			{
-				character: 'ġ',
-				title: 'Latin small letter g with dot above'
-			},
-			{
-				character: 'Ģ',
-				title: 'Latin capital letter g with cedilla'
-			},
-			{
-				character: 'ģ',
-				title: 'Latin small letter g with cedilla'
-			},
-			{
-				character: 'Ĥ',
-				title: 'Latin capital letter h with circumflex'
-			},
-			{
-				character: 'ĥ',
-				title: 'Latin small letter h with circumflex'
-			},
-			{
-				character: 'Ħ',
-				title: 'Latin capital letter h with stroke'
-			},
-			{
-				character: 'ħ',
-				title: 'Latin small letter h with stroke'
-			},
-			{
-				character: 'Ĩ',
-				title: 'Latin capital letter i with tilde'
-			},
-			{
-				character: 'ĩ',
-				title: 'Latin small letter i with tilde'
-			},
-			{
-				character: 'Ī',
-				title: 'Latin capital letter i with macron'
-			},
-			{
-				character: 'ī',
-				title: 'Latin small letter i with macron'
-			},
-			{
-				character: 'Ĭ',
-				title: 'Latin capital letter i with breve'
-			},
-			{
-				character: 'ĭ',
-				title: 'Latin small letter i with breve'
-			},
-			{
-				character: 'Į',
-				title: 'Latin capital letter i with ogonek'
-			},
-			{
-				character: 'į',
-				title: 'Latin small letter i with ogonek'
-			},
-			{
-				character: 'İ',
-				title: 'Latin capital letter i with dot above'
-			},
-			{
-				character: 'ı',
-				title: 'Latin small letter dotless i'
-			},
-			{
-				character: 'IJ',
-				title: 'Latin capital ligature ij'
-			},
-			{
-				character: 'ij',
-				title: 'Latin small ligature ij'
-			},
-			{
-				character: 'Ĵ',
-				title: 'Latin capital letter j with circumflex'
-			},
-			{
-				character: 'ĵ',
-				title: 'Latin small letter j with circumflex'
-			},
-			{
-				character: 'Ķ',
-				title: 'Latin capital letter k with cedilla'
-			},
-			{
-				character: 'ķ',
-				title: 'Latin small letter k with cedilla'
-			},
-			{
-				character: 'ĸ',
-				title: 'Latin small letter kra'
-			},
-			{
-				character: 'Ĺ',
-				title: 'Latin capital letter l with acute'
-			},
-			{
-				character: 'ĺ',
-				title: 'Latin small letter l with acute'
-			},
-			{
-				character: 'Ļ',
-				title: 'Latin capital letter l with cedilla'
-			},
-			{
-				character: 'ļ',
-				title: 'Latin small letter l with cedilla'
-			},
-			{
-				character: 'Ľ',
-				title: 'Latin capital letter l with caron'
-			},
-			{
-				character: 'ľ',
-				title: 'Latin small letter l with caron'
-			},
-			{
-				character: 'Ŀ',
-				title: 'Latin capital letter l with middle dot'
-			},
-			{
-				character: 'ŀ',
-				title: 'Latin small letter l with middle dot'
-			},
-			{
-				character: 'Ł',
-				title: 'Latin capital letter l with stroke'
-			},
-			{
-				character: 'ł',
-				title: 'Latin small letter l with stroke'
-			},
-			{
-				character: 'Ń',
-				title: 'Latin capital letter n with acute'
-			},
-			{
-				character: 'ń',
-				title: 'Latin small letter n with acute'
-			},
-			{
-				character: 'Ņ',
-				title: 'Latin capital letter n with cedilla'
-			},
-			{
-				character: 'ņ',
-				title: 'Latin small letter n with cedilla'
-			},
-			{
-				character: 'Ň',
-				title: 'Latin capital letter n with caron'
-			},
-			{
-				character: 'ň',
-				title: 'Latin small letter n with caron'
-			},
-			{
-				character: 'ʼn',
-				title: 'Latin small letter n preceded by apostrophe'
-			},
-			{
-				character: 'Ŋ',
-				title: 'Latin capital letter eng'
-			},
-			{
-				character: 'ŋ',
-				title: 'Latin small letter eng'
-			},
-			{
-				character: 'Ō',
-				title: 'Latin capital letter o with macron'
-			},
-			{
-				character: 'ō',
-				title: 'Latin small letter o with macron'
-			},
-			{
-				character: 'Ŏ',
-				title: 'Latin capital letter o with breve'
-			},
-			{
-				character: 'ŏ',
-				title: 'Latin small letter o with breve'
-			},
-			{
-				character: 'Ő',
-				title: 'Latin capital letter o with double acute'
-			},
-			{
-				character: 'ő',
-				title: 'Latin small letter o with double acute'
-			},
-			{
-				character: 'Œ',
-				title: 'Latin capital ligature oe'
-			},
-			{
-				character: 'œ',
-				title: 'Latin small ligature oe'
-			},
-			{
-				character: 'Ŕ',
-				title: 'Latin capital letter r with acute'
-			},
-			{
-				character: 'ŕ',
-				title: 'Latin small letter r with acute'
-			},
-			{
-				character: 'Ŗ',
-				title: 'Latin capital letter r with cedilla'
-			},
-			{
-				character: 'ŗ',
-				title: 'Latin small letter r with cedilla'
-			},
-			{
-				character: 'Ř',
-				title: 'Latin capital letter r with caron'
-			},
-			{
-				character: 'ř',
-				title: 'Latin small letter r with caron'
-			},
-			{
-				character: 'Ś',
-				title: 'Latin capital letter s with acute'
-			},
-			{
-				character: 'ś',
-				title: 'Latin small letter s with acute'
-			},
-			{
-				character: 'Ŝ',
-				title: 'Latin capital letter s with circumflex'
-			},
-			{
-				character: 'ŝ',
-				title: 'Latin small letter s with circumflex'
-			},
-			{
-				character: 'Ş',
-				title: 'Latin capital letter s with cedilla'
-			},
-			{
-				character: 'ş',
-				title: 'Latin small letter s with cedilla'
-			},
-			{
-				character: 'Š',
-				title: 'Latin capital letter s with caron'
-			},
-			{
-				character: 'š',
-				title: 'Latin small letter s with caron'
-			},
-			{
-				character: 'Ţ',
-				title: 'Latin capital letter t with cedilla'
-			},
-			{
-				character: 'ţ',
-				title: 'Latin small letter t with cedilla'
-			},
-			{
-				character: 'Ť',
-				title: 'Latin capital letter t with caron'
-			},
-			{
-				character: 'ť',
-				title: 'Latin small letter t with caron'
-			},
-			{
-				character: 'Ŧ',
-				title: 'Latin capital letter t with stroke'
-			},
-			{
-				character: 'ŧ',
-				title: 'Latin small letter t with stroke'
-			},
-			{
-				character: 'Ũ',
-				title: 'Latin capital letter u with tilde'
-			},
-			{
-				character: 'ũ',
-				title: 'Latin small letter u with tilde'
-			},
-			{
-				character: 'Ū',
-				title: 'Latin capital letter u with macron'
-			},
-			{
-				character: 'ū',
-				title: 'Latin small letter u with macron'
-			},
-			{
-				character: 'Ŭ',
-				title: 'Latin capital letter u with breve'
-			},
-			{
-				character: 'ŭ',
-				title: 'Latin small letter u with breve'
-			},
-			{
-				character: 'Ů',
-				title: 'Latin capital letter u with ring above'
-			},
-			{
-				character: 'ů',
-				title: 'Latin small letter u with ring above'
-			},
-			{
-				character: 'Ű',
-				title: 'Latin capital letter u with double acute'
-			},
-			{
-				character: 'ű',
-				title: 'Latin small letter u with double acute'
-			},
-			{
-				character: 'Ų',
-				title: 'Latin capital letter u with ogonek'
-			},
-			{
-				character: 'ų',
-				title: 'Latin small letter u with ogonek'
-			},
-			{
-				character: 'Ŵ',
-				title: 'Latin capital letter w with circumflex'
-			},
-			{
-				character: 'ŵ',
-				title: 'Latin small letter w with circumflex'
-			},
-			{
-				character: 'Ŷ',
-				title: 'Latin capital letter y with circumflex'
-			},
-			{
-				character: 'ŷ',
-				title: 'Latin small letter y with circumflex'
-			},
-			{
-				character: 'Ÿ',
-				title: 'Latin capital letter y with diaeresis'
-			},
-			{
-				character: 'Ź',
-				title: 'Latin capital letter z with acute'
-			},
-			{
-				character: 'ź',
-				title: 'Latin small letter z with acute'
-			},
-			{
-				character: 'Ż',
-				title: 'Latin capital letter z with dot above'
-			},
-			{
-				character: 'ż',
-				title: 'Latin small letter z with dot above'
-			},
-			{
-				character: 'Ž',
-				title: 'Latin capital letter z with caron'
-			},
-			{
-				character: 'ž',
-				title: 'Latin small letter z with caron'
-			},
-			{
-				character: 'ſ',
-				title: 'Latin small letter long s'
-			}
+		const editor = this.editor;
+		const t = editor.t;
+
+		editor.plugins.get( 'SpecialCharacters' ).addItems( 'Latin', [
+			{ character: 'Ā', title: t( 'Latin capital letter a with macron' ) },
+			{ character: 'ā', title: t( 'Latin small letter a with macron' ) },
+			{ character: 'Ă', title: t( 'Latin capital letter a with breve' ) },
+			{ character: 'ă', title: t( 'Latin small letter a with breve' ) },
+			{ character: 'Ą', title: t( 'Latin capital letter a with ogonek' ) },
+			{ character: 'ą', title: t( 'Latin small letter a with ogonek' ) },
+			{ character: 'Ć', title: t( 'Latin capital letter c with acute' ) },
+			{ character: 'ć', title: t( 'Latin small letter c with acute' ) },
+			{ character: 'Ĉ', title: t( 'Latin capital letter c with circumflex' ) },
+			{ character: 'ĉ', title: t( 'Latin small letter c with circumflex' ) },
+			{ character: 'Ċ', title: t( 'Latin capital letter c with dot above' ) },
+			{ character: 'ċ', title: t( 'Latin small letter c with dot above' ) },
+			{ character: 'Č', title: t( 'Latin capital letter c with caron' ) },
+			{ character: 'č', title: t( 'Latin small letter c with caron' ) },
+			{ character: 'Ď', title: t( 'Latin capital letter d with caron' ) },
+			{ character: 'ď', title: t( 'Latin small letter d with caron' ) },
+			{ character: 'Đ', title: t( 'Latin capital letter d with stroke' ) },
+			{ character: 'đ', title: t( 'Latin small letter d with stroke' ) },
+			{ character: 'Ē', title: t( 'Latin capital letter e with macron' ) },
+			{ character: 'ē', title: t( 'Latin small letter e with macron' ) },
+			{ character: 'Ĕ', title: t( 'Latin capital letter e with breve' ) },
+			{ character: 'ĕ', title: t( 'Latin small letter e with breve' ) },
+			{ character: 'Ė', title: t( 'Latin capital letter e with dot above' ) },
+			{ character: 'ė', title: t( 'Latin small letter e with dot above' ) },
+			{ character: 'Ę', title: t( 'Latin capital letter e with ogonek' ) },
+			{ character: 'ę', title: t( 'Latin small letter e with ogonek' ) },
+			{ character: 'Ě', title: t( 'Latin capital letter e with caron' ) },
+			{ character: 'ě', title: t( 'Latin small letter e with caron' ) },
+			{ character: 'Ĝ', title: t( 'Latin capital letter g with circumflex' ) },
+			{ character: 'ĝ', title: t( 'Latin small letter g with circumflex' ) },
+			{ character: 'Ğ', title: t( 'Latin capital letter g with breve' ) },
+			{ character: 'ğ', title: t( 'Latin small letter g with breve' ) },
+			{ character: 'Ġ', title: t( 'Latin capital letter g with dot above' ) },
+			{ character: 'ġ', title: t( 'Latin small letter g with dot above' ) },
+			{ character: 'Ģ', title: t( 'Latin capital letter g with cedilla' ) },
+			{ character: 'ģ', title: t( 'Latin small letter g with cedilla' ) },
+			{ character: 'Ĥ', title: t( 'Latin capital letter h with circumflex' ) },
+			{ character: 'ĥ', title: t( 'Latin small letter h with circumflex' ) },
+			{ character: 'Ħ', title: t( 'Latin capital letter h with stroke' ) },
+			{ character: 'ħ', title: t( 'Latin small letter h with stroke' ) },
+			{ character: 'Ĩ', title: t( 'Latin capital letter i with tilde' ) },
+			{ character: 'ĩ', title: t( 'Latin small letter i with tilde' ) },
+			{ character: 'Ī', title: t( 'Latin capital letter i with macron' ) },
+			{ character: 'ī', title: t( 'Latin small letter i with macron' ) },
+			{ character: 'Ĭ', title: t( 'Latin capital letter i with breve' ) },
+			{ character: 'ĭ', title: t( 'Latin small letter i with breve' ) },
+			{ character: 'Į', title: t( 'Latin capital letter i with ogonek' ) },
+			{ character: 'į', title: t( 'Latin small letter i with ogonek' ) },
+			{ character: 'İ', title: t( 'Latin capital letter i with dot above' ) },
+			{ character: 'ı', title: t( 'Latin small letter dotless i' ) },
+			{ character: 'IJ', title: t( 'Latin capital ligature ij' ) },
+			{ character: 'ij', title: t( 'Latin small ligature ij' ) },
+			{ character: 'Ĵ', title: t( 'Latin capital letter j with circumflex' ) },
+			{ character: 'ĵ', title: t( 'Latin small letter j with circumflex' ) },
+			{ character: 'Ķ', title: t( 'Latin capital letter k with cedilla' ) },
+			{ character: 'ķ', title: t( 'Latin small letter k with cedilla' ) },
+			{ character: 'ĸ', title: t( 'Latin small letter kra' ) },
+			{ character: 'Ĺ', title: t( 'Latin capital letter l with acute' ) },
+			{ character: 'ĺ', title: t( 'Latin small letter l with acute' ) },
+			{ character: 'Ļ', title: t( 'Latin capital letter l with cedilla' ) },
+			{ character: 'ļ', title: t( 'Latin small letter l with cedilla' ) },
+			{ character: 'Ľ', title: t( 'Latin capital letter l with caron' ) },
+			{ character: 'ľ', title: t( 'Latin small letter l with caron' ) },
+			{ character: 'Ŀ', title: t( 'Latin capital letter l with middle dot' ) },
+			{ character: 'ŀ', title: t( 'Latin small letter l with middle dot' ) },
+			{ character: 'Ł', title: t( 'Latin capital letter l with stroke' ) },
+			{ character: 'ł', title: t( 'Latin small letter l with stroke' ) },
+			{ character: 'Ń', title: t( 'Latin capital letter n with acute' ) },
+			{ character: 'ń', title: t( 'Latin small letter n with acute' ) },
+			{ character: 'Ņ', title: t( 'Latin capital letter n with cedilla' ) },
+			{ character: 'ņ', title: t( 'Latin small letter n with cedilla' ) },
+			{ character: 'Ň', title: t( 'Latin capital letter n with caron' ) },
+			{ character: 'ň', title: t( 'Latin small letter n with caron' ) },
+			{ character: 'ʼn', title: t( 'Latin small letter n preceded by apostrophe' ) },
+			{ character: 'Ŋ', title: t( 'Latin capital letter eng' ) },
+			{ character: 'ŋ', title: t( 'Latin small letter eng' ) },
+			{ character: 'Ō', title: t( 'Latin capital letter o with macron' ) },
+			{ character: 'ō', title: t( 'Latin small letter o with macron' ) },
+			{ character: 'Ŏ', title: t( 'Latin capital letter o with breve' ) },
+			{ character: 'ŏ', title: t( 'Latin small letter o with breve' ) },
+			{ character: 'Ő', title: t( 'Latin capital letter o with double acute' ) },
+			{ character: 'ő', title: t( 'Latin small letter o with double acute' ) },
+			{ character: 'Œ', title: t( 'Latin capital ligature oe' ) },
+			{ character: 'œ', title: t( 'Latin small ligature oe' ) },
+			{ character: 'Ŕ', title: t( 'Latin capital letter r with acute' ) },
+			{ character: 'ŕ', title: t( 'Latin small letter r with acute' ) },
+			{ character: 'Ŗ', title: t( 'Latin capital letter r with cedilla' ) },
+			{ character: 'ŗ', title: t( 'Latin small letter r with cedilla' ) },
+			{ character: 'Ř', title: t( 'Latin capital letter r with caron' ) },
+			{ character: 'ř', title: t( 'Latin small letter r with caron' ) },
+			{ character: 'Ś', title: t( 'Latin capital letter s with acute' ) },
+			{ character: 'ś', title: t( 'Latin small letter s with acute' ) },
+			{ character: 'Ŝ', title: t( 'Latin capital letter s with circumflex' ) },
+			{ character: 'ŝ', title: t( 'Latin small letter s with circumflex' ) },
+			{ character: 'Ş', title: t( 'Latin capital letter s with cedilla' ) },
+			{ character: 'ş', title: t( 'Latin small letter s with cedilla' ) },
+			{ character: 'Š', title: t( 'Latin capital letter s with caron' ) },
+			{ character: 'š', title: t( 'Latin small letter s with caron' ) },
+			{ character: 'Ţ', title: t( 'Latin capital letter t with cedilla' ) },
+			{ character: 'ţ', title: t( 'Latin small letter t with cedilla' ) },
+			{ character: 'Ť', title: t( 'Latin capital letter t with caron' ) },
+			{ character: 'ť', title: t( 'Latin small letter t with caron' ) },
+			{ character: 'Ŧ', title: t( 'Latin capital letter t with stroke' ) },
+			{ character: 'ŧ', title: t( 'Latin small letter t with stroke' ) },
+			{ character: 'Ũ', title: t( 'Latin capital letter u with tilde' ) },
+			{ character: 'ũ', title: t( 'Latin small letter u with tilde' ) },
+			{ character: 'Ū', title: t( 'Latin capital letter u with macron' ) },
+			{ character: 'ū', title: t( 'Latin small letter u with macron' ) },
+			{ character: 'Ŭ', title: t( 'Latin capital letter u with breve' ) },
+			{ character: 'ŭ', title: t( 'Latin small letter u with breve' ) },
+			{ character: 'Ů', title: t( 'Latin capital letter u with ring above' ) },
+			{ character: 'ů', title: t( 'Latin small letter u with ring above' ) },
+			{ character: 'Ű', title: t( 'Latin capital letter u with double acute' ) },
+			{ character: 'ű', title: t( 'Latin small letter u with double acute' ) },
+			{ character: 'Ų', title: t( 'Latin capital letter u with ogonek' ) },
+			{ character: 'ų', title: t( 'Latin small letter u with ogonek' ) },
+			{ character: 'Ŵ', title: t( 'Latin capital letter w with circumflex' ) },
+			{ character: 'ŵ', title: t( 'Latin small letter w with circumflex' ) },
+			{ character: 'Ŷ', title: t( 'Latin capital letter y with circumflex' ) },
+			{ character: 'ŷ', title: t( 'Latin small letter y with circumflex' ) },
+			{ character: 'Ÿ', title: t( 'Latin capital letter y with diaeresis' ) },
+			{ character: 'Ź', title: t( 'Latin capital letter z with acute' ) },
+			{ character: 'ź', title: t( 'Latin small letter z with acute' ) },
+			{ character: 'Ż', title: t( 'Latin capital letter z with dot above' ) },
+			{ character: 'ż', title: t( 'Latin small letter z with dot above' ) },
+			{ character: 'Ž', title: t( 'Latin capital letter z with caron' ) },
+			{ character: 'ž', title: t( 'Latin small letter z with caron' ) },
+			{ character: 'ſ', title: t( 'Latin small letter long s' ) }
 		] );
 		] );
 	}
 	}
 }
 }

+ 62 - 181
packages/ckeditor5-special-characters/src/specialcharactersmathematical.js

@@ -4,203 +4,84 @@
  */
  */
 
 
 /**
 /**
- * @module special-characters/specialcharacters
+ * @module special-characters/specialcharactersmathematical
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import SpecialCharacters from './specialcharacters';
 import SpecialCharacters from './specialcharacters';
 
 
+/**
+ * A plugin provides special characters for the "Mathematical" category.
+ *
+ *		ClassicEditor
+ *			.create( {
+ *				plugins: [ ..., SpecialCharacters, SpecialCharactersMathematical ],
+ *			} )
+ *			.then( ... )
+ *			.catch( ... );
+ *
+ * @extends module:core/plugin~Plugin
+ */
 export default class SpecialCharactersMathematical extends Plugin {
 export default class SpecialCharactersMathematical extends Plugin {
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	static get requires() {
 	static get requires() {
-		return [
-			SpecialCharacters
-		];
+		return [ SpecialCharacters ];
 	}
 	}
 
 
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	init() {
 	init() {
-		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Mathematical', [
-			{
-				character: '<',
-				title: 'Less-than sign'
-			},
-			{
-				character: '>',
-				title: 'Greater-than sign'
-			},
-			{
-				character: '≤',
-				title: 'Less-than or equal to'
-			},
-			{
-				character: '≥',
-				title: 'Greater-than or equal to'
-			},
-			{
-				character: '–',
-				title: 'En dash'
-			},
-			{
-				character: '—',
-				title: 'Em dash'
-			},
-			{
-				character: '¯',
-				title: 'Macron'
-			},
-			{
-				character: '‾',
-				title: 'Overline'
-			},
-			{
-				character: '°',
-				title: 'Degree sign'
-			},
-			{
-				character: '−',
-				title: 'Minus sign'
-			},
-			{
-				character: '±',
-				title: 'Plus-minus sign'
-			},
-			{
-				character: '÷',
-				title: 'Division sign'
-			},
-			{
-				character: '⁄',
-				title: 'Fraction slash'
-			},
-			{
-				character: '×',
-				title: 'Multiplication sign'
-			},
-			{
-				character: 'ƒ',
-				title: 'Latin small letter f with hook'
-			},
-			{
-				character: '∫',
-				title: 'Integral'
-			},
-			{
-				character: '∑',
-				title: 'N-ary summation'
-			},
-			{
-				character: '∞',
-				title: 'Infinity'
-			},
-			{
-				character: '√',
-				title: 'Square root'
-			},
-			{
-				character: '∼',
-				title: 'Tilde operator'
-			},
-			{
-				character: '≅',
-				title: 'Approximately equal to'
-			},
-			{
-				character: '≈',
-				title: 'Almost equal to'
-			},
-			{
-				character: '≠',
-				title: 'Not equal to'
-			},
-			{
-				character: '≡',
-				title: 'Identical to'
-			},
-			{
-				character: '∈',
-				title: 'Element of'
-			},
-			{
-				character: '∉',
-				title: 'Not an element of'
-			},
-			{
-				character: '∋',
-				title: 'Contains as member'
-			},
-			{
-				character: '∏',
-				title: 'N-ary product'
-			},
-			{
-				character: '∧',
-				title: 'Logical and'
-			},
-			{
-				character: '∨',
-				title: 'Logical or'
-			},
-			{
-				character: '¬',
-				title: 'Not sign'
-			},
-			{
-				character: '∩',
-				title: 'Intersection'
-			},
-			{
-				character: '∪',
-				title: 'Union'
-			},
-			{
-				character: '∂',
-				title: 'Partial differential'
-			},
-			{
-				character: '∀',
-				title: 'For all'
-			},
-			{
-				character: '∃',
-				title: 'There exists'
-			},
-			{
-				character: '∅',
-				title: 'Empty set'
-			},
-			{
-				character: '∇',
-				title: 'Nabla'
-			},
-			{
-				character: '∗',
-				title: 'Asterisk operator'
-			},
-			{
-				character: '∝',
-				title: 'Proportional to'
-			},
-			{
-				character: '∠',
-				title: 'Angle'
-			},
-			{
-				character: '¼',
-				title: 'Vulgar fraction one quarter'
-			},
-			{
-				character: '½',
-				title: 'Vulgar fraction one half'
-			},
-			{
-				character: '¾',
-				title: 'Vulgar fraction three quarters'
-			}
+		const editor = this.editor;
+		const t = editor.t;
+
+		editor.plugins.get( 'SpecialCharacters' ).addItems( 'Mathematical', [
+			{ character: '<', title: t( 'Less-than sign' ) },
+			{ character: '>', title: t( 'Greater-than sign' ) },
+			{ character: '≤', title: t( 'Less-than or equal to' ) },
+			{ character: '≥', title: t( 'Greater-than or equal to' ) },
+			{ character: '–', title: t( 'En dash' ) },
+			{ character: '—', title: t( 'Em dash' ) },
+			{ character: '¯', title: t( 'Macron' ) },
+			{ character: '‾', title: t( 'Overline' ) },
+			{ character: '°', title: t( 'Degree sign' ) },
+			{ character: '−', title: t( 'Minus sign' ) },
+			{ character: '±', title: t( 'Plus-minus sign' ) },
+			{ character: '÷', title: t( 'Division sign' ) },
+			{ character: '⁄', title: t( 'Fraction slash' ) },
+			{ character: '×', title: t( 'Multiplication sign' ) },
+			{ character: 'ƒ', title: t( 'Latin small letter f with hook' ) },
+			{ character: '∫', title: t( 'Integral' ) },
+			{ character: '∑', title: t( 'N-ary summation' ) },
+			{ character: '∞', title: t( 'Infinity' ) },
+			{ character: '√', title: t( 'Square root' ) },
+			{ character: '∼', title: t( 'Tilde operator' ) },
+			{ character: '≅', title: t( 'Approximately equal to' ) },
+			{ character: '≈', title: t( 'Almost equal to' ) },
+			{ character: '≠', title: t( 'Not equal to' ) },
+			{ character: '≡', title: t( 'Identical to' ) },
+			{ character: '∈', title: t( 'Element of' ) },
+			{ character: '∉', title: t( 'Not an element of' ) },
+			{ character: '∋', title: t( 'Contains as member' ) },
+			{ character: '∏', title: t( 'N-ary product' ) },
+			{ character: '∧', title: t( 'Logical and' ) },
+			{ character: '∨', title: t( 'Logical or' ) },
+			{ character: '¬', title: t( 'Not sign' ) },
+			{ character: '∩', title: t( 'Intersection' ) },
+			{ character: '∪', title: t( 'Union' ) },
+			{ character: '∂', title: t( 'Partial differential' ) },
+			{ character: '∀', title: t( 'For all' ) },
+			{ character: '∃', title: t( 'There exists' ) },
+			{ character: '∅', title: t( 'Empty set' ) },
+			{ character: '∇', title: t( 'Nabla' ) },
+			{ character: '∗', title: t( 'Asterisk operator' ) },
+			{ character: '∝', title: t( 'Proportional to' ) },
+			{ character: '∠', title: t( 'Angle' ) },
+			{ character: '¼', title: t( 'Vulgar fraction one quarter' ) },
+			{ character: '½', title: t( 'Vulgar fraction one half' ) },
+			{ character: '¾', title: t( 'Vulgar fraction three quarters' ) }
 		] );
 		] );
 	}
 	}
 }
 }

+ 45 - 89
packages/ckeditor5-special-characters/src/specialcharacterstext.js

@@ -4,111 +4,67 @@
  */
  */
 
 
 /**
 /**
- * @module special-characters/specialcharacters
+ * @module special-characters/specialcharacterstext
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import SpecialCharacters from './specialcharacters';
 import SpecialCharacters from './specialcharacters';
 
 
+/**
+ * A plugin provides special characters for the "Text" category.
+ *
+ *		ClassicEditor
+ *			.create( {
+ *				plugins: [ ..., SpecialCharacters, SpecialCharactersText ],
+ *			} )
+ *			.then( ... )
+ *			.catch( ... );
+ *
+ * @extends module:core/plugin~Plugin
+ */
 export default class SpecialCharactersText extends Plugin {
 export default class SpecialCharactersText extends Plugin {
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	static get requires() {
 	static get requires() {
-		return [
-			SpecialCharacters
-		];
+		return [ SpecialCharacters ];
 	}
 	}
 
 
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
 	init() {
 	init() {
-		this.editor.plugins.get( 'SpecialCharacters' ).addItems( 'Text', [
-			{
-				character: '‹',
-				title: 'Single left-pointing angle quotation mark'
-			},
-			{
-				character: '›',
-				title: 'Single right-pointing angle quotation mark'
-			},
-			{
-				character: '«',
-				title: 'Left-pointing double angle quotation mark'
-			},
-			{
-				character: '»',
-				title: 'Right-pointing double angle quotation mark'
-			},
-			{
-				character: '‘',
-				title: 'Left single quotation mark'
-			},
-			{
-				character: '’',
-				title: 'Right single quotation mark'
-			},
-			{
-				character: '“',
-				title: 'Left double quotation mark'
-			},
-			{
-				character: '”',
-				title: 'Right double quotation mark'
-			},
-			{
-				character: '‚',
-				title: 'Single low-9 quotation mark'
-			},
-			{
-				character: '„',
-				title: 'Double low-9 quotation mark'
-			},
-			{
-				character: '¡',
-				title: 'Inverted exclamation mark'
-			},
-			{
-				character: '¿',
-				title: 'Inverted question mark'
-			},
-			{
-				character: '‥',
-				title: 'Two dot leader'
-			},
-			{
-				character: '…',
-				title: 'Horizontal ellipsis'
-			},
-			{
-				character: '‡',
-				title: 'Double dagger'
-			},
-			{
-				character: '‰',
-				title: 'Per mille sign'
-			},
-			{
-				character: '‱',
-				title: 'Per ten thousand sign'
-			},
-			{
-				character: '‼',
-				title: 'Double exclamation mark'
-			},
-			{
-				character: '⁈',
-				title: 'Question exclamation mark'
-			},
-			{
-				character: '⁉',
-				title: 'Exclamation question mark'
-			},
-			{
-				character: '⁇',
-				title: 'Double question mark'
-			}
+		const editor = this.editor;
+		const t = editor.t;
+
+		editor.plugins.get( 'SpecialCharacters' ).addItems( 'Text', [
+			{ character: '‹', title: t( 'Single left-pointing angle quotation mark' ) },
+			{ character: '›', title: t( 'Single right-pointing angle quotation mark' ) },
+			{ character: '«', title: t( 'Left-pointing double angle quotation mark' ) },
+			{ character: '»', title: t( 'Right-pointing double angle quotation mark' ) },
+			{ character: '‘', title: t( 'Left single quotation mark' ) },
+			{ character: '’', title: t( 'Right single quotation mark' ) },
+			{ character: '“', title: t( 'Left double quotation mark' ) },
+			{ character: '”', title: t( 'Right double quotation mark' ) },
+			{ character: '‚', title: t( 'Single low-9 quotation mark' ) },
+			{ character: '„', title: t( 'Double low-9 quotation mark' ) },
+			{ character: '¡', title: t( 'Inverted exclamation mark' ) },
+			{ character: '¿', title: t( 'Inverted question mark' ) },
+			{ character: '‥', title: t( 'Two dot leader' ) },
+			{ character: '…', title: t( 'Horizontal ellipsis' ) },
+			{ character: '‡', title: t( 'Double dagger' ) },
+			{ character: '‰', title: t( 'Per mille sign' ) },
+			{ character: '‱', title: t( 'Per ten thousand sign' ) },
+			{ character: '‼', title: t( 'Double exclamation mark' ) },
+			{ character: '⁈', title: t( 'Question exclamation mark' ) },
+			{ character: '⁉', title: t( 'Exclamation question mark' ) },
+			{ character: '⁇', title: t( 'Double question mark' ) },
+			{ character: '©', title: t( 'Copyright sign' ) },
+			{ character: '®', title: t( 'Registered sign' ) },
+			{ character: '™', title: t( 'Trade mark sign' ) },
+			{ character: '§', title: t( 'Section sign' ) },
+			{ character: '¶', title: t( 'Paragraph sign' ) },
+			{ character: '⁋', title: t( 'Reversed paragraph sign' ) }
 		] );
 		] );
 	}
 	}
 }
 }

+ 12 - 3
packages/ckeditor5-special-characters/src/specialcharactersui.js

@@ -12,6 +12,7 @@ import { createDropdown } from '@ckeditor/ckeditor5-ui/src/dropdown/utils';
 import specialCharactersIcon from '../theme/icons/specialcharacters.svg';
 import specialCharactersIcon from '../theme/icons/specialcharacters.svg';
 import CharacterGridView from './ui/charactergridview';
 import CharacterGridView from './ui/charactergridview';
 import SpecialCharactersNavigationView from './ui/specialcharactersnavigationview';
 import SpecialCharactersNavigationView from './ui/specialcharactersnavigationview';
+import Typing from '@ckeditor/ckeditor5-typing/src/typing';
 
 
 /**
 /**
  * The special characters UI plugin.
  * The special characters UI plugin.
@@ -21,6 +22,13 @@ import SpecialCharactersNavigationView from './ui/specialcharactersnavigationvie
  * @extends module:core/plugin~Plugin
  * @extends module:core/plugin~Plugin
  */
  */
 export default class SpecialCharactersUI extends Plugin {
 export default class SpecialCharactersUI extends Plugin {
+	/**
+	 * @inheritDoc
+	 */
+	static get requires() {
+		return [ Typing ];
+	}
+
 	/**
 	/**
 	 * @inheritDoc
 	 * @inheritDoc
 	 */
 	 */
@@ -34,6 +42,8 @@ export default class SpecialCharactersUI extends Plugin {
 	init() {
 	init() {
 		const editor = this.editor;
 		const editor = this.editor;
 		const t = editor.t;
 		const t = editor.t;
+
+		const inputCommand = editor.commands.get( 'input' );
 		const specialCharsPlugin = editor.plugins.get( 'SpecialCharacters' );
 		const specialCharsPlugin = editor.plugins.get( 'SpecialCharacters' );
 
 
 		// Add the `specialCharacters` dropdown button to feature components.
 		// Add the `specialCharacters` dropdown button to feature components.
@@ -43,7 +53,6 @@ export default class SpecialCharactersUI extends Plugin {
 			const gridView = new CharacterGridView( this.locale, {
 			const gridView = new CharacterGridView( this.locale, {
 				columns: 10
 				columns: 10
 			} );
 			} );
-			const command = editor.commands.get( 'insertSpecialCharacter' );
 
 
 			gridView.delegate( 'execute' ).to( dropdownView );
 			gridView.delegate( 'execute' ).to( dropdownView );
 
 
@@ -61,11 +70,11 @@ export default class SpecialCharactersUI extends Plugin {
 				tooltip: true
 				tooltip: true
 			} );
 			} );
 
 
-			dropdownView.bind( 'isEnabled' ).to( command );
+			dropdownView.bind( 'isEnabled' ).to( inputCommand );
 
 
 			// Insert a special character when a tile was clicked.
 			// Insert a special character when a tile was clicked.
 			dropdownView.on( 'execute', ( evt, data ) => {
 			dropdownView.on( 'execute', ( evt, data ) => {
-				editor.execute( 'insertSpecialCharacter', { item: data.name } );
+				editor.execute( 'input', { text: data.character } );
 				editor.editing.view.focus();
 				editor.editing.view.focus();
 			} );
 			} );
 
 

+ 3 - 2
packages/ckeditor5-special-characters/src/ui/charactergridview.js

@@ -62,7 +62,8 @@ export default class CharacterGridView extends View {
 		 *
 		 *
 		 * @event execute
 		 * @event execute
 		 * @param {Object} data Additional information about the event.
 		 * @param {Object} data Additional information about the event.
-		 * @param {String} data.name Name of the tile that caused the event (e.g. "greek small letter epsilon").
+		 * @param {String} data.name A name of the tile that caused the event (e.g. "greek small letter epsilon").
+		 * @param {String} data.character A human-readable character displayed as label (e.g. "ε").
 		 */
 		 */
 	}
 	}
 
 
@@ -91,7 +92,7 @@ export default class CharacterGridView extends View {
 		} );
 		} );
 
 
 		tile.on( 'execute', () => {
 		tile.on( 'execute', () => {
-			this.fire( 'execute', { name } );
+			this.fire( 'execute', { name, character } );
 		} );
 		} );
 
 
 		return tile;
 		return tile;

+ 0 - 109
packages/ckeditor5-special-characters/tests/insertspecialcharactercommand.js

@@ -1,109 +0,0 @@
-/**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
-
-/* globals document */
-
-import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
-import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
-import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
-import { setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
-import SpecialCharacters from '../src/specialcharacters';
-
-describe( 'InsertSpecialCharacterCommand', () => {
-	let editor, model, editorElement, command;
-
-	testUtils.createSinonSandbox();
-
-	beforeEach( () => {
-		editorElement = document.createElement( 'div' );
-		document.body.appendChild( editorElement );
-
-		return ClassicTestEditor
-			.create( editorElement, {
-				plugins: [ Paragraph, SpecialCharacters ]
-			} )
-			.then( newEditor => {
-				editor = newEditor;
-				model = editor.model;
-				command = editor.commands.get( 'insertSpecialCharacter' );
-
-				editor.plugins.get( 'SpecialCharacters' ).addItems( 'Arrows', [
-					{ title: 'arrow left', character: '←' },
-					{ title: 'arrow right', character: '→' }
-				] );
-			} );
-	} );
-
-	afterEach( () => {
-		return editor.destroy()
-			.then( () => {
-				editorElement.remove();
-			} );
-	} );
-
-	describe( 'isEnabled', () => {
-		it( 'should be bound to InputCommand#isEnables', () => {
-			const inputCommand = editor.commands.get( 'input' );
-
-			inputCommand.isEnabled = true;
-			expect( command.isEnabled ).to.equal( true );
-
-			inputCommand.isEnabled = false;
-			expect( command.isEnabled ).to.equal( false );
-		} );
-	} );
-
-	describe( 'execute()', () => {
-		it( 'should create a single batch', () => {
-			setModelData( model, '<paragraph>foo[]</paragraph>' );
-
-			const spy = sinon.spy();
-
-			model.document.on( 'change', spy );
-
-			command.execute( { item: 'arrow left' } );
-
-			sinon.assert.calledOnce( spy );
-		} );
-
-		it( 'executes InputCommand#execute()', () => {
-			const inputCommand = editor.commands.get( 'input' );
-
-			setModelData( model, '<paragraph>foo[]</paragraph>' );
-
-			const spy = sinon.stub( inputCommand, 'execute' );
-
-			command.execute( { item: 'arrow left' } );
-
-			sinon.assert.calledWithExactly( spy, { text: '←' } );
-
-			spy.restore();
-		} );
-
-		it( 'does nothing if specified object is invalid', () => {
-			setModelData( model, '<paragraph>foo[]</paragraph>' );
-
-			const spy = sinon.spy();
-
-			model.document.on( 'change', spy );
-
-			command.execute( { foo: 'arrow left' } );
-
-			sinon.assert.notCalled( spy );
-		} );
-
-		it( 'does nothing if specified item name does not exist', () => {
-			setModelData( model, '<paragraph>foo[]</paragraph>' );
-
-			const spy = sinon.spy();
-
-			model.document.on( 'change', spy );
-
-			command.execute( { item: 'arrow up' } );
-
-			sinon.assert.notCalled( spy );
-		} );
-	} );
-} );

+ 1 - 2
packages/ckeditor5-special-characters/tests/specialcharacters.js

@@ -5,7 +5,6 @@
 
 
 import SpecialCharacters from '../src/specialcharacters';
 import SpecialCharacters from '../src/specialcharacters';
 import SpecialCharactersUI from '../src/specialcharactersui';
 import SpecialCharactersUI from '../src/specialcharactersui';
-import SpecialCharactersEditing from '../src/specialcharactersediting';
 
 
 describe( 'SpecialCharacters', () => {
 describe( 'SpecialCharacters', () => {
 	let plugin;
 	let plugin;
@@ -15,7 +14,7 @@ describe( 'SpecialCharacters', () => {
 	} );
 	} );
 
 
 	it( 'should require proper plugins', () => {
 	it( 'should require proper plugins', () => {
-		expect( SpecialCharacters.requires ).to.deep.equal( [ SpecialCharactersEditing, SpecialCharactersUI ] );
+		expect( SpecialCharacters.requires ).to.deep.equal( [ SpecialCharactersUI ] );
 	} );
 	} );
 
 
 	it( 'should be named', () => {
 	it( 'should be named', () => {

+ 0 - 35
packages/ckeditor5-special-characters/tests/specialcharactersediting.js

@@ -1,35 +0,0 @@
-/**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
-
-import SpecialCharactersEditing from '../src/specialcharactersediting';
-import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
-import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
-import InsertSpecialCharacterCommand from '../src/insertspecialcharactercommand';
-
-describe( 'SpecialCharactersEditing', () => {
-	let editor;
-
-	beforeEach( () => {
-		return VirtualTestEditor
-			.create( {
-				plugins: [ SpecialCharactersEditing, Paragraph ]
-			} )
-			.then( newEditor => {
-				editor = newEditor;
-			} );
-	} );
-
-	afterEach( () => {
-		return editor.destroy();
-	} );
-
-	it( 'should have proper pluginName', () => {
-		expect( SpecialCharactersEditing.pluginName ).to.equal( 'SpecialCharactersEditing' );
-	} );
-
-	it( 'adds a command', () => {
-		expect( editor.commands.get( 'insertSpecialCharacter' ) ).to.be.instanceOf( InsertSpecialCharacterCommand );
-	} );
-} );

+ 3 - 3
packages/ckeditor5-special-characters/tests/specialcharactersui.js

@@ -33,7 +33,7 @@ describe( 'SpecialCharactersUI', () => {
 			} )
 			} )
 			.then( newEditor => {
 			.then( newEditor => {
 				editor = newEditor;
 				editor = newEditor;
-				command = editor.commands.get( 'insertSpecialCharacter' );
+				command = editor.commands.get( 'input' );
 			} );
 			} );
 	} );
 	} );
 
 
@@ -91,8 +91,8 @@ describe( 'SpecialCharactersUI', () => {
 
 
 			sinon.assert.calledOnce( executeSpy );
 			sinon.assert.calledOnce( executeSpy );
 			sinon.assert.calledOnce( focusSpy );
 			sinon.assert.calledOnce( focusSpy );
-			sinon.assert.calledWithExactly( executeSpy.firstCall, 'insertSpecialCharacter', {
-				item: 'Less-than or equal to'
+			sinon.assert.calledWithExactly( executeSpy.firstCall, 'input', {
+				text: '≤'
 			} );
 			} );
 		} );
 		} );
 
 

+ 1 - 1
packages/ckeditor5-special-characters/tests/ui/charactergridview.js

@@ -61,7 +61,7 @@ describe( 'CharacterGridView', () => {
 			tile.fire( 'execute' );
 			tile.fire( 'execute' );
 
 
 			sinon.assert.calledOnce( spy );
 			sinon.assert.calledOnce( spy );
-			sinon.assert.calledWithExactly( spy, sinon.match.any, { name: 'foo bar baz' } );
+			sinon.assert.calledWithExactly( spy, sinon.match.any, { name: 'foo bar baz', character: 'ε' } );
 		} );
 		} );
 	} );
 	} );
 } );
 } );