Plugin Crayon Syntax Highlighter um Syntax für MySQL erweitern

Nachdem ich mich in das Thema WordPress eingearbeitet hatte wollte ich natürlich gleich meinen ersten Beitrag posten. Dabei sollte es um meine erste Erfahrung mit WordPress gehen, dem „nichts geht mehr“ Phänomen. Ich hatte es nämlich nach diversen Installationen und Deinstallationen von Plugins geschafft, dass WordPress meinen Forschungsdrang nur noch mit einem simplen „error“ quittierte.

Ich habe also meinen ersten Beitrag geschrieben und wollte einen MySQL-Code-Schnipsel dann schön mit einem Plugin für Syntax-Highlighter hervorheben. Also machte ich mich auf die Suche nach einem geeigneten Plugin. Nachdem 2-3 Stunden ins Land gestrichen sind und ich ca. 10 verschiedene Plugins installiert und wieder deinstalliert hatte bin ich dann bei dem (für mich) mit Abstand besten Plugin Crayon Syntax Highlighter hängen geblieben.

Wieso dieses Plugin?

Neben den unzähligen Einstellmöglichkeiten, die sich zudem nochmals für jeden Code-Schnipsel individuell anpassen lassen (das alles per schickem Editor) kommt dieses Plugin auch mit vielen Programmiersprachen klar – sogar in einem Code-Schnipsel gemischt. Dieses Plugin hat das Problem mit langen Codezeilen jedoch für mich am besten von allen getesteten Plugins gelöst und bietet hierfür verschiedene Möglichkeiten für den User (siehe Beispiel unten).

Das Problem:

Das Plugin kann extrem viele Programmiersprachen bunt machen, aber ausgerechnet MySQL fehlt. Daher habe ich mich entschlossen eine kleine Erweiterung zu schreiben um das Plugin Crayon Syntax Highlighter um eine Syntax für MySQL zu erweitern.

Die Lösung:

Hier könnt Ihr Euch die Erweiterung herunterladen (selbstverständlich für jeden kostenlos, egal ob es nachher privat oder kommerziell genutzt wird):

mysql-1.0.0.zip (2219 Downloads )

Und so „installiert“ Ihr die Erweiterung. Einfach die ZIP-Datei in den Ordner wp-content/plugins/crayon-syntax-highlighter/langs der WordPress Installation ablegen und in diesen Ordner entpacken.

Oder wenn Ihr keinen SSH Zugriff habt: Einfach die ZIP-Datei lokal entpacken und den Ordner mysql in eben genannten Ordner kopieren.

Das war es schon, ab da an tauscht „MySQL“ als weitere Sprache im Editor auf.

So sieht MySQL mit der Erweiterung aus:

-- a comment
SET NAMES 'utf8';

# another comment
DROP TABLE item;
DROP DATABASE `shop`;

/*
 * and another comment
 */
DROP TRIGGER IF EXISTS `trigger_item`;
DELIMITER //
CREATE TRIGGER `trigger_item` AFTER UPDATE ON `item`
FOR EACH ROW BEGIN
    IF COALESCE(NEW.value, -1) <> COALESCE(OLD.value, -1) THEN
        INSERT INTO item_log (item_id, old, new, inserted) VALUES (NEW.item_id, OLD.value, NEW.value, NOW());
    END IF;
END
//
DELIMITER ;

CREATE TABLE `item` (
    `item_id` int(8) unsigned NOT NULL AUTO_INCREMENT,
    `value` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
    `category` enum('lifestyle', 'it', 'unknown') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'unknown',
    `inserted` date NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

SELECT
    i.item_id AS `ItemID`,
    i.category AS Category,
    FLOOR(i.category / 100) AS Catalog,
    CONCAT(i.value, ' ', SUM(r.amount), ' hits') AS `Hits`,
    DATE_FORMAT(i.inserted, '%d.%m.%Y') AS `Datum`,
    IF(i.category = 'lifestyle', 'cool', '') AS `Feedback`,
    IFNULL ( i.category, 'buggy' ) AS CategorySomething  -- not nice but works: there should be no whitespace between function name and the bracket
FROM
    item AS i
LEFT JOIN
    rate AS r
    USE INDEX(  -- not nice but works: there should be a whitespace between the reserved word and the bracket
        idx_item_rate
    )
    ON (
        i.item_id = r.item_id
        AND r.is_active = 1
    )

WHERE
    i.article_id = 12345
    AND i.category IN('lifestyle', 'it')
    AND(
        i.value IS NOT NULL
        OR i.inserted > NOW() - INTERVAL 10 HOUR
        OR HOUR(i.inserted) = 8
        OR i.inserted BETWEEN '2013-01-01' AND CURDATE()
        OR i.value REGEXP "abc"
    )
GROUP BY
    `ItemID`
HAVING
    Catalog = 12
ORDER BY
    Category ASC,
    `Hits` DESC
LIMIT
    1
    OFFSET 10
;

Natürlich machen die Anweisungen nicht wirklich Sinn. Es geht hier nur darum die Syntax Hervorhebung zu zeigen.

Das könnte dich auch interessieren …

3 Antworten

  1. Ansas sagt:

    Update: Der Autor des Plugins Crayon Syntax Highlighter hat in Version 2.4.0 bereits eine erste Erweiterung für MySQL integriert, allerdings fehlen hier noch viele MySQL Schlüsselwörter, Operatoren und Funktionen. Die Farbeinteilung ist (aus meiner Sicht) auch noch nicht optimal gewählt.

    Noch muss daher meine Erweiterung manuell eingepflegt werden, damit das Highlighting so wie im Beispiel oben aussieht.

    Ich habe jedoch mit dem Autor des Plugins schon Kontakt aufgenommen und dieser wird meine Erweiterung (wahrscheinlich mit dem nächsten Update) direkt ins Plugin integrieren (siehe Githup Commit)

  2. Ich habe die neueste Version vom Crayon Syntax Highlighter installiert, MySQL war da als Sprache nicht dabei.
    Dein Plugin funktioniert aber super, danke ;)

    • Ansas sagt:

      Hi Marco,

      das freut mich. MySQL sollte inzwischen seit fast einem Jahr zwar standardmäßig im Plugin verfügbar sein, jedoch finde ich die Farbgebung in meiner Version schöner ;)

      VG Ansas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte beachte die Hinweise zum Datenschutz