Spodobał mi się sposób kolorowania składni, jaki wykorzystuje SyntaxHighlighter, zachciało mi się na jego podstawie zrobić sobie plugin do studio Gallery, i nie byłoby problemu, jednak… jednocześnie wykorzystuję TinyMCE, a ten edytorek, albo podmieniał wklepywany kod na encje, albo nie tykał go wcale i traktował całość jako HTML, szkoda, że nie potrafił podmieniać jedynie zawartości pomiędzy tagami <pre>.
Już zaprzęgałem do dzieła moje ulubione preg_replace_callback… gdy nagle przypomniałem sobie, że na stronie SyntaxHighlighting rzucił mi się w oczy plugin do TinyMCE.
Okrężną drogą, ale trafiłem w końcu na stronę Nawafa. Stworzył on plugin, który współpracuje niemal idealnie z Tinym w wersji 3.0.
Jednak i tutaj nie wszystko przebiegało po mojej myśli…
Tak jak sądziłem, pojawił się problem ze znacznikami HTML, które Tiny przekształcał lub nie wyświetlał ich w ogóle. Kolejne poszukiwania i powstała mała poprawka do Codehighlighting. Wystarczy wyedytować plik codehighlighting.js w katalogu js i dodać na początku
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | references = { 'ą': 'ą', 'Ą': 'Ą', 'ć': 'ć', 'Ć': 'Ć', 'ę': 'ę', 'Ę': 'Ę', 'ł': 'ł', 'Ł': 'Ł', 'ń': 'ń', 'Ń': 'Ń', 'ó': 'ó', 'Ó': 'Ó', 'ś': 'ś', 'Ś': 'Ś', 'ż': 'ż', 'Ż': 'Ż', 'ź': 'ź', 'Ź': 'Ź', 'À': 'À', 'Á': 'Á', 'Â': 'Â', 'Ã': 'Ã', 'Ä': 'Ä', 'Å': 'Å', 'Æ': 'Æ', 'Ç': 'Ç', 'È': 'È', 'É': 'É', 'Ê': 'Ê', 'Ë': 'Ë', 'Ì': 'Ì', 'Í': 'Í', 'Î': 'Î', 'Ï': 'Ï', 'Ð': 'Ð', 'Ñ': 'Ñ', 'Ò': 'Ò', 'Ó': 'Ó', 'Ô': 'Ô', 'Õ': 'Õ', 'Ö': 'Ö', 'Ø': 'Ø', 'Ù': 'Ù', 'Ú': 'Ú', 'Û': 'Û', 'Ü': 'Ü', 'Ý': 'Ý', 'Þ': 'Þ', 'ß': 'ß', 'à': 'à', 'á': 'á', 'â': 'â', 'ã': 'ã', 'ä': 'ä', 'å': 'å', 'æ': 'æ', 'ç': 'ç', 'è': 'è', 'é': 'é', 'ê': 'ê', 'ë': 'ë', 'ì': 'ì', 'í': 'í', 'î': 'î', 'ï': 'ï', 'ð': 'ð', 'ñ': 'ñ', 'ò': 'ò', 'ó': 'ó', 'ô': 'ô', 'õ': 'õ', 'ö': 'ö', 'ø': 'ø', 'ù': 'ù', 'ú': 'ú', 'û': 'û', 'ü': 'ü', 'ý': 'ý', 'þ': 'þ', 'ÿ': 'ÿ' }; html = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' } |
oraz zastąpić istniejącą wartość val, następującym kodem:
28 29 30 31 32 33 34 35 36 | var val = document.getElementById("CodeArea").value; for (i in html){ var re = new RegExp(i, "g") val = val.replace(re, html[i]) } for (i in references){ var re = new RegExp(i, "g") val = val.replace(re, references[i]) } |
Jak ktoś nie chce edytować, może sobie podmienić na ten:
codehighlighting.js
(kodowanie oczywiście w utf-8)


