plugin.js 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708
  1. /**
  2. * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3. * Licensed under the LGPL or a commercial license.
  4. * For LGPL see License.txt in the project root for license information.
  5. * For commercial licenses see https://www.tiny.cloud/
  6. *
  7. * Version: 5.0.3 (2019-03-19)
  8. */
  9. (function () {
  10. var charmap = (function (domGlobals) {
  11. 'use strict';
  12. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  13. var fireInsertCustomChar = function (editor, chr) {
  14. return editor.fire('insertCustomChar', { chr: chr });
  15. };
  16. var Events = { fireInsertCustomChar: fireInsertCustomChar };
  17. var insertChar = function (editor, chr) {
  18. var evtChr = Events.fireInsertCustomChar(editor, chr).chr;
  19. editor.execCommand('mceInsertContent', false, evtChr);
  20. };
  21. var Actions = { insertChar: insertChar };
  22. var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  23. var getCharMap = function (editor) {
  24. return editor.settings.charmap;
  25. };
  26. var getCharMapAppend = function (editor) {
  27. return editor.settings.charmap_append;
  28. };
  29. var Settings = {
  30. getCharMap: getCharMap,
  31. getCharMapAppend: getCharMapAppend
  32. };
  33. var constant = function (value) {
  34. return function () {
  35. return value;
  36. };
  37. };
  38. var never = constant(false);
  39. var always = constant(true);
  40. var never$1 = never;
  41. var always$1 = always;
  42. var none = function () {
  43. return NONE;
  44. };
  45. var NONE = function () {
  46. var eq = function (o) {
  47. return o.isNone();
  48. };
  49. var call = function (thunk) {
  50. return thunk();
  51. };
  52. var id = function (n) {
  53. return n;
  54. };
  55. var noop = function () {
  56. };
  57. var nul = function () {
  58. return null;
  59. };
  60. var undef = function () {
  61. return undefined;
  62. };
  63. var me = {
  64. fold: function (n, s) {
  65. return n();
  66. },
  67. is: never$1,
  68. isSome: never$1,
  69. isNone: always$1,
  70. getOr: id,
  71. getOrThunk: call,
  72. getOrDie: function (msg) {
  73. throw new Error(msg || 'error: getOrDie called on none.');
  74. },
  75. getOrNull: nul,
  76. getOrUndefined: undef,
  77. or: id,
  78. orThunk: call,
  79. map: none,
  80. ap: none,
  81. each: noop,
  82. bind: none,
  83. flatten: none,
  84. exists: never$1,
  85. forall: always$1,
  86. filter: none,
  87. equals: eq,
  88. equals_: eq,
  89. toArray: function () {
  90. return [];
  91. },
  92. toString: constant('none()')
  93. };
  94. if (Object.freeze)
  95. Object.freeze(me);
  96. return me;
  97. }();
  98. var some = function (a) {
  99. var constant_a = function () {
  100. return a;
  101. };
  102. var self = function () {
  103. return me;
  104. };
  105. var map = function (f) {
  106. return some(f(a));
  107. };
  108. var bind = function (f) {
  109. return f(a);
  110. };
  111. var me = {
  112. fold: function (n, s) {
  113. return s(a);
  114. },
  115. is: function (v) {
  116. return a === v;
  117. },
  118. isSome: always$1,
  119. isNone: never$1,
  120. getOr: constant_a,
  121. getOrThunk: constant_a,
  122. getOrDie: constant_a,
  123. getOrNull: constant_a,
  124. getOrUndefined: constant_a,
  125. or: self,
  126. orThunk: self,
  127. map: map,
  128. ap: function (optfab) {
  129. return optfab.fold(none, function (fab) {
  130. return some(fab(a));
  131. });
  132. },
  133. each: function (f) {
  134. f(a);
  135. },
  136. bind: bind,
  137. flatten: constant_a,
  138. exists: bind,
  139. forall: bind,
  140. filter: function (f) {
  141. return f(a) ? me : NONE;
  142. },
  143. equals: function (o) {
  144. return o.is(a);
  145. },
  146. equals_: function (o, elementEq) {
  147. return o.fold(never$1, function (b) {
  148. return elementEq(a, b);
  149. });
  150. },
  151. toArray: function () {
  152. return [a];
  153. },
  154. toString: function () {
  155. return 'some(' + a + ')';
  156. }
  157. };
  158. return me;
  159. };
  160. var from = function (value) {
  161. return value === null || value === undefined ? NONE : some(value);
  162. };
  163. var Option = {
  164. some: some,
  165. none: none,
  166. from: from
  167. };
  168. var typeOf = function (x) {
  169. if (x === null)
  170. return 'null';
  171. var t = typeof x;
  172. if (t === 'object' && Array.prototype.isPrototypeOf(x))
  173. return 'array';
  174. if (t === 'object' && String.prototype.isPrototypeOf(x))
  175. return 'string';
  176. return t;
  177. };
  178. var isType = function (type) {
  179. return function (value) {
  180. return typeOf(value) === type;
  181. };
  182. };
  183. var isFunction = isType('function');
  184. var map = function (xs, f) {
  185. var len = xs.length;
  186. var r = new Array(len);
  187. for (var i = 0; i < len; i++) {
  188. var x = xs[i];
  189. r[i] = f(x, i, xs);
  190. }
  191. return r;
  192. };
  193. var each = function (xs, f) {
  194. for (var i = 0, len = xs.length; i < len; i++) {
  195. var x = xs[i];
  196. f(x, i, xs);
  197. }
  198. };
  199. var find = function (xs, pred) {
  200. for (var i = 0, len = xs.length; i < len; i++) {
  201. var x = xs[i];
  202. if (pred(x, i, xs)) {
  203. return Option.some(x);
  204. }
  205. }
  206. return Option.none();
  207. };
  208. var push = Array.prototype.push;
  209. var flatten = function (xs) {
  210. var r = [];
  211. for (var i = 0, len = xs.length; i < len; ++i) {
  212. if (!Array.prototype.isPrototypeOf(xs[i]))
  213. throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
  214. push.apply(r, xs[i]);
  215. }
  216. return r;
  217. };
  218. var bind = function (xs, f) {
  219. var output = map(xs, f);
  220. return flatten(output);
  221. };
  222. var slice = Array.prototype.slice;
  223. var from$1 = isFunction(Array.from) ? Array.from : function (x) {
  224. return slice.call(x);
  225. };
  226. var isArray = global$1.isArray;
  227. var UserDefined = 'User Defined';
  228. var getDefaultCharMap = function () {
  229. return [
  230. {
  231. name: 'Currency',
  232. characters: [
  233. [
  234. 36,
  235. 'dollar sign'
  236. ],
  237. [
  238. 162,
  239. 'cent sign'
  240. ],
  241. [
  242. 8364,
  243. 'euro sign'
  244. ],
  245. [
  246. 163,
  247. 'pound sign'
  248. ],
  249. [
  250. 165,
  251. 'yen sign'
  252. ],
  253. [
  254. 164,
  255. 'currency sign'
  256. ],
  257. [
  258. 8352,
  259. 'euro-currency sign'
  260. ],
  261. [
  262. 8353,
  263. 'colon sign'
  264. ],
  265. [
  266. 8354,
  267. 'cruzeiro sign'
  268. ],
  269. [
  270. 8355,
  271. 'french franc sign'
  272. ],
  273. [
  274. 8356,
  275. 'lira sign'
  276. ],
  277. [
  278. 8357,
  279. 'mill sign'
  280. ],
  281. [
  282. 8358,
  283. 'naira sign'
  284. ],
  285. [
  286. 8359,
  287. 'peseta sign'
  288. ],
  289. [
  290. 8360,
  291. 'rupee sign'
  292. ],
  293. [
  294. 8361,
  295. 'won sign'
  296. ],
  297. [
  298. 8362,
  299. 'new sheqel sign'
  300. ],
  301. [
  302. 8363,
  303. 'dong sign'
  304. ],
  305. [
  306. 8365,
  307. 'kip sign'
  308. ],
  309. [
  310. 8366,
  311. 'tugrik sign'
  312. ],
  313. [
  314. 8367,
  315. 'drachma sign'
  316. ],
  317. [
  318. 8368,
  319. 'german penny symbol'
  320. ],
  321. [
  322. 8369,
  323. 'peso sign'
  324. ],
  325. [
  326. 8370,
  327. 'guarani sign'
  328. ],
  329. [
  330. 8371,
  331. 'austral sign'
  332. ],
  333. [
  334. 8372,
  335. 'hryvnia sign'
  336. ],
  337. [
  338. 8373,
  339. 'cedi sign'
  340. ],
  341. [
  342. 8374,
  343. 'livre tournois sign'
  344. ],
  345. [
  346. 8375,
  347. 'spesmilo sign'
  348. ],
  349. [
  350. 8376,
  351. 'tenge sign'
  352. ],
  353. [
  354. 8377,
  355. 'indian rupee sign'
  356. ],
  357. [
  358. 8378,
  359. 'turkish lira sign'
  360. ],
  361. [
  362. 8379,
  363. 'nordic mark sign'
  364. ],
  365. [
  366. 8380,
  367. 'manat sign'
  368. ],
  369. [
  370. 8381,
  371. 'ruble sign'
  372. ],
  373. [
  374. 20870,
  375. 'yen character'
  376. ],
  377. [
  378. 20803,
  379. 'yuan character'
  380. ],
  381. [
  382. 22291,
  383. 'yuan character, in hong kong and taiwan'
  384. ],
  385. [
  386. 22278,
  387. 'yen/yuan character variant one'
  388. ]
  389. ]
  390. },
  391. {
  392. name: 'Text',
  393. characters: [
  394. [
  395. 169,
  396. 'copyright sign'
  397. ],
  398. [
  399. 174,
  400. 'registered sign'
  401. ],
  402. [
  403. 8482,
  404. 'trade mark sign'
  405. ],
  406. [
  407. 8240,
  408. 'per mille sign'
  409. ],
  410. [
  411. 181,
  412. 'micro sign'
  413. ],
  414. [
  415. 183,
  416. 'middle dot'
  417. ],
  418. [
  419. 8226,
  420. 'bullet'
  421. ],
  422. [
  423. 8230,
  424. 'three dot leader'
  425. ],
  426. [
  427. 8242,
  428. 'minutes / feet'
  429. ],
  430. [
  431. 8243,
  432. 'seconds / inches'
  433. ],
  434. [
  435. 167,
  436. 'section sign'
  437. ],
  438. [
  439. 182,
  440. 'paragraph sign'
  441. ],
  442. [
  443. 223,
  444. 'sharp s / ess-zed'
  445. ]
  446. ]
  447. },
  448. {
  449. name: 'Quotations',
  450. characters: [
  451. [
  452. 8249,
  453. 'single left-pointing angle quotation mark'
  454. ],
  455. [
  456. 8250,
  457. 'single right-pointing angle quotation mark'
  458. ],
  459. [
  460. 171,
  461. 'left pointing guillemet'
  462. ],
  463. [
  464. 187,
  465. 'right pointing guillemet'
  466. ],
  467. [
  468. 8216,
  469. 'left single quotation mark'
  470. ],
  471. [
  472. 8217,
  473. 'right single quotation mark'
  474. ],
  475. [
  476. 8220,
  477. 'left double quotation mark'
  478. ],
  479. [
  480. 8221,
  481. 'right double quotation mark'
  482. ],
  483. [
  484. 8218,
  485. 'single low-9 quotation mark'
  486. ],
  487. [
  488. 8222,
  489. 'double low-9 quotation mark'
  490. ],
  491. [
  492. 60,
  493. 'less-than sign'
  494. ],
  495. [
  496. 62,
  497. 'greater-than sign'
  498. ],
  499. [
  500. 8804,
  501. 'less-than or equal to'
  502. ],
  503. [
  504. 8805,
  505. 'greater-than or equal to'
  506. ],
  507. [
  508. 8211,
  509. 'en dash'
  510. ],
  511. [
  512. 8212,
  513. 'em dash'
  514. ],
  515. [
  516. 175,
  517. 'macron'
  518. ],
  519. [
  520. 8254,
  521. 'overline'
  522. ],
  523. [
  524. 164,
  525. 'currency sign'
  526. ],
  527. [
  528. 166,
  529. 'broken bar'
  530. ],
  531. [
  532. 168,
  533. 'diaeresis'
  534. ],
  535. [
  536. 161,
  537. 'inverted exclamation mark'
  538. ],
  539. [
  540. 191,
  541. 'turned question mark'
  542. ],
  543. [
  544. 710,
  545. 'circumflex accent'
  546. ],
  547. [
  548. 732,
  549. 'small tilde'
  550. ],
  551. [
  552. 176,
  553. 'degree sign'
  554. ],
  555. [
  556. 8722,
  557. 'minus sign'
  558. ],
  559. [
  560. 177,
  561. 'plus-minus sign'
  562. ],
  563. [
  564. 247,
  565. 'division sign'
  566. ],
  567. [
  568. 8260,
  569. 'fraction slash'
  570. ],
  571. [
  572. 215,
  573. 'multiplication sign'
  574. ],
  575. [
  576. 185,
  577. 'superscript one'
  578. ],
  579. [
  580. 178,
  581. 'superscript two'
  582. ],
  583. [
  584. 179,
  585. 'superscript three'
  586. ],
  587. [
  588. 188,
  589. 'fraction one quarter'
  590. ],
  591. [
  592. 189,
  593. 'fraction one half'
  594. ],
  595. [
  596. 190,
  597. 'fraction three quarters'
  598. ]
  599. ]
  600. },
  601. {
  602. name: 'Mathematical',
  603. characters: [
  604. [
  605. 402,
  606. 'function / florin'
  607. ],
  608. [
  609. 8747,
  610. 'integral'
  611. ],
  612. [
  613. 8721,
  614. 'n-ary sumation'
  615. ],
  616. [
  617. 8734,
  618. 'infinity'
  619. ],
  620. [
  621. 8730,
  622. 'square root'
  623. ],
  624. [
  625. 8764,
  626. 'similar to'
  627. ],
  628. [
  629. 8773,
  630. 'approximately equal to'
  631. ],
  632. [
  633. 8776,
  634. 'almost equal to'
  635. ],
  636. [
  637. 8800,
  638. 'not equal to'
  639. ],
  640. [
  641. 8801,
  642. 'identical to'
  643. ],
  644. [
  645. 8712,
  646. 'element of'
  647. ],
  648. [
  649. 8713,
  650. 'not an element of'
  651. ],
  652. [
  653. 8715,
  654. 'contains as member'
  655. ],
  656. [
  657. 8719,
  658. 'n-ary product'
  659. ],
  660. [
  661. 8743,
  662. 'logical and'
  663. ],
  664. [
  665. 8744,
  666. 'logical or'
  667. ],
  668. [
  669. 172,
  670. 'not sign'
  671. ],
  672. [
  673. 8745,
  674. 'intersection'
  675. ],
  676. [
  677. 8746,
  678. 'union'
  679. ],
  680. [
  681. 8706,
  682. 'partial differential'
  683. ],
  684. [
  685. 8704,
  686. 'for all'
  687. ],
  688. [
  689. 8707,
  690. 'there exists'
  691. ],
  692. [
  693. 8709,
  694. 'diameter'
  695. ],
  696. [
  697. 8711,
  698. 'backward difference'
  699. ],
  700. [
  701. 8727,
  702. 'asterisk operator'
  703. ],
  704. [
  705. 8733,
  706. 'proportional to'
  707. ],
  708. [
  709. 8736,
  710. 'angle'
  711. ]
  712. ]
  713. },
  714. {
  715. name: 'Extended Latin',
  716. characters: [
  717. [
  718. 192,
  719. 'A - grave'
  720. ],
  721. [
  722. 193,
  723. 'A - acute'
  724. ],
  725. [
  726. 194,
  727. 'A - circumflex'
  728. ],
  729. [
  730. 195,
  731. 'A - tilde'
  732. ],
  733. [
  734. 196,
  735. 'A - diaeresis'
  736. ],
  737. [
  738. 197,
  739. 'A - ring above'
  740. ],
  741. [
  742. 256,
  743. 'A - macron'
  744. ],
  745. [
  746. 198,
  747. 'ligature AE'
  748. ],
  749. [
  750. 199,
  751. 'C - cedilla'
  752. ],
  753. [
  754. 200,
  755. 'E - grave'
  756. ],
  757. [
  758. 201,
  759. 'E - acute'
  760. ],
  761. [
  762. 202,
  763. 'E - circumflex'
  764. ],
  765. [
  766. 203,
  767. 'E - diaeresis'
  768. ],
  769. [
  770. 274,
  771. 'E - macron'
  772. ],
  773. [
  774. 204,
  775. 'I - grave'
  776. ],
  777. [
  778. 205,
  779. 'I - acute'
  780. ],
  781. [
  782. 206,
  783. 'I - circumflex'
  784. ],
  785. [
  786. 207,
  787. 'I - diaeresis'
  788. ],
  789. [
  790. 298,
  791. 'I - macron'
  792. ],
  793. [
  794. 208,
  795. 'ETH'
  796. ],
  797. [
  798. 209,
  799. 'N - tilde'
  800. ],
  801. [
  802. 210,
  803. 'O - grave'
  804. ],
  805. [
  806. 211,
  807. 'O - acute'
  808. ],
  809. [
  810. 212,
  811. 'O - circumflex'
  812. ],
  813. [
  814. 213,
  815. 'O - tilde'
  816. ],
  817. [
  818. 214,
  819. 'O - diaeresis'
  820. ],
  821. [
  822. 216,
  823. 'O - slash'
  824. ],
  825. [
  826. 332,
  827. 'O - macron'
  828. ],
  829. [
  830. 338,
  831. 'ligature OE'
  832. ],
  833. [
  834. 352,
  835. 'S - caron'
  836. ],
  837. [
  838. 217,
  839. 'U - grave'
  840. ],
  841. [
  842. 218,
  843. 'U - acute'
  844. ],
  845. [
  846. 219,
  847. 'U - circumflex'
  848. ],
  849. [
  850. 220,
  851. 'U - diaeresis'
  852. ],
  853. [
  854. 362,
  855. 'U - macron'
  856. ],
  857. [
  858. 221,
  859. 'Y - acute'
  860. ],
  861. [
  862. 376,
  863. 'Y - diaeresis'
  864. ],
  865. [
  866. 562,
  867. 'Y - macron'
  868. ],
  869. [
  870. 222,
  871. 'THORN'
  872. ],
  873. [
  874. 224,
  875. 'a - grave'
  876. ],
  877. [
  878. 225,
  879. 'a - acute'
  880. ],
  881. [
  882. 226,
  883. 'a - circumflex'
  884. ],
  885. [
  886. 227,
  887. 'a - tilde'
  888. ],
  889. [
  890. 228,
  891. 'a - diaeresis'
  892. ],
  893. [
  894. 229,
  895. 'a - ring above'
  896. ],
  897. [
  898. 257,
  899. 'a - macron'
  900. ],
  901. [
  902. 230,
  903. 'ligature ae'
  904. ],
  905. [
  906. 231,
  907. 'c - cedilla'
  908. ],
  909. [
  910. 232,
  911. 'e - grave'
  912. ],
  913. [
  914. 233,
  915. 'e - acute'
  916. ],
  917. [
  918. 234,
  919. 'e - circumflex'
  920. ],
  921. [
  922. 235,
  923. 'e - diaeresis'
  924. ],
  925. [
  926. 275,
  927. 'e - macron'
  928. ],
  929. [
  930. 236,
  931. 'i - grave'
  932. ],
  933. [
  934. 237,
  935. 'i - acute'
  936. ],
  937. [
  938. 238,
  939. 'i - circumflex'
  940. ],
  941. [
  942. 239,
  943. 'i - diaeresis'
  944. ],
  945. [
  946. 299,
  947. 'i - macron'
  948. ],
  949. [
  950. 240,
  951. 'eth'
  952. ],
  953. [
  954. 241,
  955. 'n - tilde'
  956. ],
  957. [
  958. 242,
  959. 'o - grave'
  960. ],
  961. [
  962. 243,
  963. 'o - acute'
  964. ],
  965. [
  966. 244,
  967. 'o - circumflex'
  968. ],
  969. [
  970. 245,
  971. 'o - tilde'
  972. ],
  973. [
  974. 246,
  975. 'o - diaeresis'
  976. ],
  977. [
  978. 248,
  979. 'o slash'
  980. ],
  981. [
  982. 333,
  983. 'o macron'
  984. ],
  985. [
  986. 339,
  987. 'ligature oe'
  988. ],
  989. [
  990. 353,
  991. 's - caron'
  992. ],
  993. [
  994. 249,
  995. 'u - grave'
  996. ],
  997. [
  998. 250,
  999. 'u - acute'
  1000. ],
  1001. [
  1002. 251,
  1003. 'u - circumflex'
  1004. ],
  1005. [
  1006. 252,
  1007. 'u - diaeresis'
  1008. ],
  1009. [
  1010. 363,
  1011. 'u - macron'
  1012. ],
  1013. [
  1014. 253,
  1015. 'y - acute'
  1016. ],
  1017. [
  1018. 254,
  1019. 'thorn'
  1020. ],
  1021. [
  1022. 255,
  1023. 'y - diaeresis'
  1024. ],
  1025. [
  1026. 563,
  1027. 'y - macron'
  1028. ],
  1029. [
  1030. 913,
  1031. 'Alpha'
  1032. ],
  1033. [
  1034. 914,
  1035. 'Beta'
  1036. ],
  1037. [
  1038. 915,
  1039. 'Gamma'
  1040. ],
  1041. [
  1042. 916,
  1043. 'Delta'
  1044. ],
  1045. [
  1046. 917,
  1047. 'Epsilon'
  1048. ],
  1049. [
  1050. 918,
  1051. 'Zeta'
  1052. ],
  1053. [
  1054. 919,
  1055. 'Eta'
  1056. ],
  1057. [
  1058. 920,
  1059. 'Theta'
  1060. ],
  1061. [
  1062. 921,
  1063. 'Iota'
  1064. ],
  1065. [
  1066. 922,
  1067. 'Kappa'
  1068. ],
  1069. [
  1070. 923,
  1071. 'Lambda'
  1072. ],
  1073. [
  1074. 924,
  1075. 'Mu'
  1076. ],
  1077. [
  1078. 925,
  1079. 'Nu'
  1080. ],
  1081. [
  1082. 926,
  1083. 'Xi'
  1084. ],
  1085. [
  1086. 927,
  1087. 'Omicron'
  1088. ],
  1089. [
  1090. 928,
  1091. 'Pi'
  1092. ],
  1093. [
  1094. 929,
  1095. 'Rho'
  1096. ],
  1097. [
  1098. 931,
  1099. 'Sigma'
  1100. ],
  1101. [
  1102. 932,
  1103. 'Tau'
  1104. ],
  1105. [
  1106. 933,
  1107. 'Upsilon'
  1108. ],
  1109. [
  1110. 934,
  1111. 'Phi'
  1112. ],
  1113. [
  1114. 935,
  1115. 'Chi'
  1116. ],
  1117. [
  1118. 936,
  1119. 'Psi'
  1120. ],
  1121. [
  1122. 937,
  1123. 'Omega'
  1124. ],
  1125. [
  1126. 945,
  1127. 'alpha'
  1128. ],
  1129. [
  1130. 946,
  1131. 'beta'
  1132. ],
  1133. [
  1134. 947,
  1135. 'gamma'
  1136. ],
  1137. [
  1138. 948,
  1139. 'delta'
  1140. ],
  1141. [
  1142. 949,
  1143. 'epsilon'
  1144. ],
  1145. [
  1146. 950,
  1147. 'zeta'
  1148. ],
  1149. [
  1150. 951,
  1151. 'eta'
  1152. ],
  1153. [
  1154. 952,
  1155. 'theta'
  1156. ],
  1157. [
  1158. 953,
  1159. 'iota'
  1160. ],
  1161. [
  1162. 954,
  1163. 'kappa'
  1164. ],
  1165. [
  1166. 955,
  1167. 'lambda'
  1168. ],
  1169. [
  1170. 956,
  1171. 'mu'
  1172. ],
  1173. [
  1174. 957,
  1175. 'nu'
  1176. ],
  1177. [
  1178. 958,
  1179. 'xi'
  1180. ],
  1181. [
  1182. 959,
  1183. 'omicron'
  1184. ],
  1185. [
  1186. 960,
  1187. 'pi'
  1188. ],
  1189. [
  1190. 961,
  1191. 'rho'
  1192. ],
  1193. [
  1194. 962,
  1195. 'final sigma'
  1196. ],
  1197. [
  1198. 963,
  1199. 'sigma'
  1200. ],
  1201. [
  1202. 964,
  1203. 'tau'
  1204. ],
  1205. [
  1206. 965,
  1207. 'upsilon'
  1208. ],
  1209. [
  1210. 966,
  1211. 'phi'
  1212. ],
  1213. [
  1214. 967,
  1215. 'chi'
  1216. ],
  1217. [
  1218. 968,
  1219. 'psi'
  1220. ],
  1221. [
  1222. 969,
  1223. 'omega'
  1224. ]
  1225. ]
  1226. },
  1227. {
  1228. name: 'Symbols',
  1229. characters: [
  1230. [
  1231. 8501,
  1232. 'alef symbol'
  1233. ],
  1234. [
  1235. 982,
  1236. 'pi symbol'
  1237. ],
  1238. [
  1239. 8476,
  1240. 'real part symbol'
  1241. ],
  1242. [
  1243. 978,
  1244. 'upsilon - hook symbol'
  1245. ],
  1246. [
  1247. 8472,
  1248. 'Weierstrass p'
  1249. ],
  1250. [
  1251. 8465,
  1252. 'imaginary part'
  1253. ]
  1254. ]
  1255. },
  1256. {
  1257. name: 'Arrows',
  1258. characters: [
  1259. [
  1260. 8592,
  1261. 'leftwards arrow'
  1262. ],
  1263. [
  1264. 8593,
  1265. 'upwards arrow'
  1266. ],
  1267. [
  1268. 8594,
  1269. 'rightwards arrow'
  1270. ],
  1271. [
  1272. 8595,
  1273. 'downwards arrow'
  1274. ],
  1275. [
  1276. 8596,
  1277. 'left right arrow'
  1278. ],
  1279. [
  1280. 8629,
  1281. 'carriage return'
  1282. ],
  1283. [
  1284. 8656,
  1285. 'leftwards double arrow'
  1286. ],
  1287. [
  1288. 8657,
  1289. 'upwards double arrow'
  1290. ],
  1291. [
  1292. 8658,
  1293. 'rightwards double arrow'
  1294. ],
  1295. [
  1296. 8659,
  1297. 'downwards double arrow'
  1298. ],
  1299. [
  1300. 8660,
  1301. 'left right double arrow'
  1302. ],
  1303. [
  1304. 8756,
  1305. 'therefore'
  1306. ],
  1307. [
  1308. 8834,
  1309. 'subset of'
  1310. ],
  1311. [
  1312. 8835,
  1313. 'superset of'
  1314. ],
  1315. [
  1316. 8836,
  1317. 'not a subset of'
  1318. ],
  1319. [
  1320. 8838,
  1321. 'subset of or equal to'
  1322. ],
  1323. [
  1324. 8839,
  1325. 'superset of or equal to'
  1326. ],
  1327. [
  1328. 8853,
  1329. 'circled plus'
  1330. ],
  1331. [
  1332. 8855,
  1333. 'circled times'
  1334. ],
  1335. [
  1336. 8869,
  1337. 'perpendicular'
  1338. ],
  1339. [
  1340. 8901,
  1341. 'dot operator'
  1342. ],
  1343. [
  1344. 8968,
  1345. 'left ceiling'
  1346. ],
  1347. [
  1348. 8969,
  1349. 'right ceiling'
  1350. ],
  1351. [
  1352. 8970,
  1353. 'left floor'
  1354. ],
  1355. [
  1356. 8971,
  1357. 'right floor'
  1358. ],
  1359. [
  1360. 9001,
  1361. 'left-pointing angle bracket'
  1362. ],
  1363. [
  1364. 9002,
  1365. 'right-pointing angle bracket'
  1366. ],
  1367. [
  1368. 9674,
  1369. 'lozenge'
  1370. ],
  1371. [
  1372. 9824,
  1373. 'black spade suit'
  1374. ],
  1375. [
  1376. 9827,
  1377. 'black club suit'
  1378. ],
  1379. [
  1380. 9829,
  1381. 'black heart suit'
  1382. ],
  1383. [
  1384. 9830,
  1385. 'black diamond suit'
  1386. ],
  1387. [
  1388. 8194,
  1389. 'en space'
  1390. ],
  1391. [
  1392. 8195,
  1393. 'em space'
  1394. ],
  1395. [
  1396. 8201,
  1397. 'thin space'
  1398. ],
  1399. [
  1400. 8204,
  1401. 'zero width non-joiner'
  1402. ],
  1403. [
  1404. 8205,
  1405. 'zero width joiner'
  1406. ],
  1407. [
  1408. 8206,
  1409. 'left-to-right mark'
  1410. ],
  1411. [
  1412. 8207,
  1413. 'right-to-left mark'
  1414. ]
  1415. ]
  1416. }
  1417. ];
  1418. };
  1419. var charmapFilter = function (charmap) {
  1420. return global$1.grep(charmap, function (item) {
  1421. return isArray(item) && item.length === 2;
  1422. });
  1423. };
  1424. var getCharsFromSetting = function (settingValue) {
  1425. if (isArray(settingValue)) {
  1426. return [].concat(charmapFilter(settingValue));
  1427. }
  1428. if (typeof settingValue === 'function') {
  1429. return settingValue();
  1430. }
  1431. return [];
  1432. };
  1433. var extendCharMap = function (editor, charmap) {
  1434. var userCharMap = Settings.getCharMap(editor);
  1435. if (userCharMap) {
  1436. charmap = [{
  1437. name: UserDefined,
  1438. characters: getCharsFromSetting(userCharMap)
  1439. }];
  1440. }
  1441. var userCharMapAppend = Settings.getCharMapAppend(editor);
  1442. if (userCharMapAppend) {
  1443. var userDefinedGroup = global$1.grep(charmap, function (cg) {
  1444. return cg.name === UserDefined;
  1445. });
  1446. if (userDefinedGroup.length) {
  1447. userDefinedGroup[0].characters = [].concat(userDefinedGroup[0].characters).concat(getCharsFromSetting(userCharMapAppend));
  1448. return charmap;
  1449. }
  1450. return [].concat(charmap).concat({
  1451. name: UserDefined,
  1452. characters: getCharsFromSetting(userCharMapAppend)
  1453. });
  1454. }
  1455. return charmap;
  1456. };
  1457. var getCharMap$1 = function (editor) {
  1458. var groups = extendCharMap(editor, getDefaultCharMap());
  1459. return groups.length > 1 ? [{
  1460. name: 'All',
  1461. characters: bind(groups, function (g) {
  1462. return g.characters;
  1463. })
  1464. }].concat(groups) : groups;
  1465. };
  1466. var CharMap = { getCharMap: getCharMap$1 };
  1467. var get = function (editor) {
  1468. var getCharMap = function () {
  1469. return CharMap.getCharMap(editor);
  1470. };
  1471. var insertChar = function (chr) {
  1472. Actions.insertChar(editor, chr);
  1473. };
  1474. return {
  1475. getCharMap: getCharMap,
  1476. insertChar: insertChar
  1477. };
  1478. };
  1479. var Api = { get: get };
  1480. var Cell = function (initial) {
  1481. var value = initial;
  1482. var get = function () {
  1483. return value;
  1484. };
  1485. var set = function (v) {
  1486. value = v;
  1487. };
  1488. var clone = function () {
  1489. return Cell(get());
  1490. };
  1491. return {
  1492. get: get,
  1493. set: set,
  1494. clone: clone
  1495. };
  1496. };
  1497. var last = function (fn, rate) {
  1498. var timer = null;
  1499. var cancel = function () {
  1500. if (timer !== null) {
  1501. domGlobals.clearTimeout(timer);
  1502. timer = null;
  1503. }
  1504. };
  1505. var throttle = function () {
  1506. var args = [];
  1507. for (var _i = 0; _i < arguments.length; _i++) {
  1508. args[_i] = arguments[_i];
  1509. }
  1510. if (timer !== null)
  1511. domGlobals.clearTimeout(timer);
  1512. timer = domGlobals.setTimeout(function () {
  1513. fn.apply(null, args);
  1514. timer = null;
  1515. }, rate);
  1516. };
  1517. return {
  1518. cancel: cancel,
  1519. throttle: throttle
  1520. };
  1521. };
  1522. var contains = function (str, substr) {
  1523. return str.indexOf(substr) !== -1;
  1524. };
  1525. var charMatches = function (charCode, name, lowerCasePattern) {
  1526. if (contains(String.fromCharCode(charCode).toLowerCase(), lowerCasePattern)) {
  1527. return true;
  1528. } else {
  1529. return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\s+/g, ''), lowerCasePattern);
  1530. }
  1531. };
  1532. var scan = function (group, pattern) {
  1533. var matches = [];
  1534. var lowerCasePattern = pattern.toLowerCase();
  1535. each(group.characters, function (g) {
  1536. if (charMatches(g[0], g[1], lowerCasePattern)) {
  1537. matches.push(g);
  1538. }
  1539. });
  1540. return map(matches, function (m) {
  1541. return {
  1542. text: m[1],
  1543. value: String.fromCharCode(m[0]),
  1544. icon: String.fromCharCode(m[0])
  1545. };
  1546. });
  1547. };
  1548. var Scan = { scan: scan };
  1549. var patternName = 'pattern';
  1550. var open = function (editor, charMap) {
  1551. var makeGroupItems = function () {
  1552. return [
  1553. {
  1554. label: 'Search',
  1555. type: 'input',
  1556. name: patternName
  1557. },
  1558. {
  1559. type: 'collection',
  1560. name: 'results'
  1561. }
  1562. ];
  1563. };
  1564. var makeTabs = function () {
  1565. return map(charMap, function (charGroup) {
  1566. return {
  1567. title: charGroup.name,
  1568. items: makeGroupItems()
  1569. };
  1570. });
  1571. };
  1572. var currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');
  1573. var makePanel = function () {
  1574. return {
  1575. type: 'panel',
  1576. items: makeGroupItems()
  1577. };
  1578. };
  1579. var makeTabPanel = function () {
  1580. return {
  1581. type: 'tabpanel',
  1582. tabs: makeTabs()
  1583. };
  1584. };
  1585. var scanAndSet = function (dialogApi, pattern) {
  1586. find(charMap, function (group) {
  1587. return group.name === currentTab.get();
  1588. }).each(function (f) {
  1589. var items = Scan.scan(f, pattern);
  1590. dialogApi.setData({ results: items });
  1591. });
  1592. };
  1593. var SEARCH_DELAY = 40;
  1594. var updateFilter = last(function (dialogApi) {
  1595. var pattern = dialogApi.getData().pattern;
  1596. scanAndSet(dialogApi, pattern);
  1597. }, SEARCH_DELAY);
  1598. var body = charMap.length === 1 ? makePanel() : makeTabPanel();
  1599. var initialData = {
  1600. pattern: '',
  1601. results: Scan.scan(charMap[0], '')
  1602. };
  1603. var bridgeSpec = {
  1604. title: 'Special Character',
  1605. size: 'normal',
  1606. body: body,
  1607. buttons: [{
  1608. type: 'cancel',
  1609. name: 'close',
  1610. text: 'Close',
  1611. primary: true
  1612. }],
  1613. initialData: initialData,
  1614. onAction: function (api, details) {
  1615. if (details.name === 'results') {
  1616. Actions.insertChar(editor, details.value);
  1617. api.close();
  1618. }
  1619. },
  1620. onTabChange: function (dialogApi, title) {
  1621. currentTab.set(title);
  1622. updateFilter.throttle(dialogApi);
  1623. },
  1624. onChange: function (dialogApi, changeData) {
  1625. if (changeData.name === patternName) {
  1626. updateFilter.throttle(dialogApi);
  1627. }
  1628. }
  1629. };
  1630. editor.windowManager.open(bridgeSpec);
  1631. };
  1632. var Dialog = { open: open };
  1633. var register = function (editor, charMap) {
  1634. editor.addCommand('mceShowCharmap', function () {
  1635. Dialog.open(editor, charMap);
  1636. });
  1637. };
  1638. var Commands = { register: register };
  1639. var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');
  1640. var init = function (editor, all) {
  1641. editor.ui.registry.addAutocompleter('charmap', {
  1642. ch: ':',
  1643. columns: 'auto',
  1644. minChars: 2,
  1645. fetch: function (pattern, maxResults) {
  1646. return new global$2(function (resolve, reject) {
  1647. resolve(Scan.scan(all, pattern));
  1648. });
  1649. },
  1650. onAction: function (autocompleteApi, rng, value) {
  1651. editor.selection.setRng(rng);
  1652. editor.insertContent(value);
  1653. autocompleteApi.hide();
  1654. }
  1655. });
  1656. };
  1657. var register$1 = function (editor) {
  1658. editor.ui.registry.addButton('charmap', {
  1659. icon: 'insert-character',
  1660. tooltip: 'Special character',
  1661. onAction: function () {
  1662. return editor.execCommand('mceShowCharmap');
  1663. }
  1664. });
  1665. editor.ui.registry.addMenuItem('charmap', {
  1666. icon: 'insert-character',
  1667. text: 'Special character...',
  1668. onAction: function () {
  1669. return editor.execCommand('mceShowCharmap');
  1670. }
  1671. });
  1672. };
  1673. var Buttons = { register: register$1 };
  1674. global.add('charmap', function (editor) {
  1675. var charMap = CharMap.getCharMap(editor);
  1676. Commands.register(editor, charMap);
  1677. Buttons.register(editor);
  1678. init(editor, charMap[0]);
  1679. return Api.get(editor);
  1680. });
  1681. function Plugin () {
  1682. }
  1683. return Plugin;
  1684. }(window));
  1685. })();