{page.title}
++ +
+{page.data.abstract -> f:format.nl2br()}
-diff --git a/Classes/UserFunction/CodeHighlighting.php b/Classes/UserFunction/CodeHighlighting.php new file mode 100644 index 0000000..545cc37 --- /dev/null +++ b/Classes/UserFunction/CodeHighlighting.php @@ -0,0 +1,55 @@ + + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +use Highlight\Highlighter; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; + +/** + * Highlights the current value via library. + * Returns HTML Markup with css classes for proper highlighting. + */ +class CodeHighlighting +{ + /** + * @var ContentObjectRenderer + */ + public $cObj; + + public function preTag(string $content, array $config): string + { + $highlighter = new Highlighter(); + $highlighter->setClassPrefix(''); + $code = $this->cObj->data[$this->cObj->currentValKey]; + $code = htmlspecialchars_decode(trim($code)); + + try { + // Highlight some code. + $highlighted = $highlighter->highlightAuto($code); + $content = '
' . $highlighted->value . '
';
+ } catch (DomainException $e) {
+ $content = '' . $code . '
';
+ }
+
+ return $content;
+ }
+}
diff --git a/Configuration/RTE/Default.yaml b/Configuration/RTE/Default.yaml
new file mode 100644
index 0000000..82b8810
--- /dev/null
+++ b/Configuration/RTE/Default.yaml
@@ -0,0 +1,72 @@
+# Load default processing options
+imports:
+ - {resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml"}
+ - {resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml"}
+
+editor:
+ config:
+ contentsCss: "EXT:ds_site/Resources/Public/Css/index.css"
+ height: 1000
+ format_tags: "p;pre"
+
+ # Ensure that special characters are not converted to HTML entities
+ entities_latin: false
+ entities: false
+ stylesSet:
+ - {name: "Inline code", element: "code"}
+
+ toolbarGroups:
+ # - {name: insert}
+ - {name: basicstyles, groups: [basicstyles, align, cleanup]}
+ - {name: paragraph, groups: [list, indent, blocks, align, bidi]}
+ - {name: links}
+ - {name: editing, groups: [find, selection, spellchecker]}
+ - {name: specialcharacters, groups: [insertcharacters]}
+ - "/"
+ - {name: styles}
+ - "/"
+ - {name: tools}
+ - {name: document, groups: [mode, document, doctools]}
+
+ # - {name: 'document', items: ['Source']}
+ # - {name: 'clipboard', items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', 'Undo', 'Redo']}
+ # - '/'
+ # - {name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', 'CopyFormatting', 'RemoveFormat']}
+ # - {name: 'paragraph', items: ['NumberedList', 'BulletedList', 'Outdent', 'Indent', 'Blockquote']}
+ # - {name: 'links', items: ['Link', 'Unlink', 'Anchor']}
+ # - {name: 'insert', items: ['HorizontalRule', 'SpecialChar']}
+ # - '/'
+ # - {name: 'styles', items: ['Styles', 'Format']}
+ # - {name: 'tools', items: ['Maximize', 'ShowBlocks']}
+ # - {name: 'about', items: ['About']}
+
+ externalPlugins:
+ typo3link: { resource: "EXT:rte_ckeditor/Resources/Public/JavaScript/Plugins/typo3link.js", route: "rteckeditor_wizard_browse_links" }
+ showbrokenlinks: { resource: "EXT:rte_ckeditor/Resources/Public/JavaScript/Plugins/showbrokenlinks/plugin.js"}
+ # This is a plugin, found here: https://github.com/ufdada/quicktable
+ # quicktable: { resource: "EXT:rte_ckeditor/Resources/Public/JavaScript/Plugins/quicktable/plugin.js" }
+ autolinking: { resource: "EXT:rte_ckeditor/Resources/Public/JavaScript/Plugins/autolinking.js" }
+ # softhyphen plugin for adding ctrl+dash support to insert a conditional word break
+ # softhyphen:
+ # resource: "EXT:rte_ckeditor/Resources/Public/JavaScript/Plugins/softhyphen/"
+ # enableShortcut: true
+
+processing:
+ allowAttributes: [class, title, start]
+ HTMLparser_db:
+ tags:
+ ol:
+ allowedAttribs:
+ - class
+ - start
+ allowTagsOutside:
+ - pre
+ - blockquote
+ - ul
+ - ol
+ - li
+ - br
+# blockElementList:
+# - P
+# - PRE
+# - BLOCKQUOTE
diff --git a/Configuration/TypoScript/Setup/ContentElements/ParseFunc.typoscript b/Configuration/TypoScript/Setup/ContentElements/ParseFunc.typoscript
new file mode 100644
index 0000000..0428bfd
--- /dev/null
+++ b/Configuration/TypoScript/Setup/ContentElements/ParseFunc.typoscript
@@ -0,0 +1,114 @@
+# Creates persistent ParseFunc setup for non-HTML content.
+lib.parseFunc {
+ makelinks = 1
+ makelinks {
+ http {
+ keep = {$styles.content.links.keep}
+ extTarget = {$styles.content.links.extTarget}
+ }
+ mailto {
+ keep = path
+ }
+ }
+ tags {
+ link = TEXT
+ link {
+ current = 1
+ typolink {
+ parameter.data = parameters : allParams
+ extTarget = {$styles.content.links.extTarget}
+ }
+ parseFunc.constants = 1
+ }
+ pre = USER
+ pre {
+ userFunc = DanielSiepmann\DsSite\UserFunction\CodeHighlighting->preTag
+ }
+ a = TEXT
+ a {
+ current = 1
+ typolink {
+ parameter.data = parameters:href
+ title.data = parameters:title
+ ATagParams.data = parameters:allParams
+ target.data = parameters:target
+ extTarget = {$styles.content.links.extTarget}
+ extTarget.override.data = parameters:target
+ }
+ }
+ }
+ allowTags = a, abbr, acronym, address, b, bdo, big, blockquote, br, caption, center, cite, code, dd, del, dfn, dl, div, dt, em, h3, h4, h5, h6, hr, i, img, ins, kbd, label, li, link, ol, p, pre, q, s, samp, sdfield, small, span, strike, strong, sub, sup, title, tt, u, ul, var
+ denyTags = *
+ sword = |
+ constants = 1
+ nonTypoTagStdWrap {
+ HTMLparser = 1
+ HTMLparser {
+ keepNonMatchedTags = 1
+ htmlSpecialChars = 2
+ }
+ }
+}
+
+# Creates persistent ParseFunc setup for RTE content (which is mainly HTML) based on the "default" transformation.
+lib.parseFunc_RTE < lib.parseFunc
+lib.parseFunc_RTE {
+ # Processing