L'integrazione di CKEditor con GeSHI ha sempre dato origine a qualche inconveniente e anche su Drupal possono verificarsi dei problemi, comunque facilmente risolvibili con qualche piccolo aggiustamento.
Prima di tutto è necessario avere un'installazione di drupal funzionante e i moduli CKEditor e GeSHI Filter configurati e pronti. Il problema che si verifica con GeSHI è che i codici sorgente non vengono correttamente visualizzati, questo è dovuto dal fatto che CKEditor esegue l'escaping del testo e GeSHI invece necessita del plain text.
Per ovviare a questo problema occorre modificare il file geshi.php fornito insieme alla distribuzione ufficiale di GeSHI (maggiori informazioni sull'installazione e configurazione in drupal nella pagina del modulo), in modo da "ingannare" il filtro. Le modiche da apportare sono le seguenti:
class GeSHI { ... ... function parse_code () { // Start the timer $start_time = microtime(); // Replace all newlines to a common form. $code = str_replace("\r\n", "\n", $this->source); $code = str_replace("\r", "\n", $code); // patch for Drupal + CKEditor $code = str_replace(""", "\"", $code); $code = str_replace(" ", " ", $code); $code = str_replace(">", ">", $code); $code = str_replace("<", "<", $code); $code = str_replace("&", "&", $code); $code = str_replace("'", "'", $code); // end of patch // Firstly, if there is an error, we won't highlight if ($this->error) { //Escape the source for output $result = $this->hsc($this->source); //This fix is related to SF#1923020, but has to be applied regardless of //actually highlighting symbols. $result = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $result); // Timing is irrelevant $this->set_time($start_time, $start_time); $this->finalise($result); return $result; } ... } ... ... }
Il problema viene risolto subito; l'unico inconveniente è che ad ogni aggiornamento di GeSHI dovremmo inserire questa patch.




