ShikiPHP
Αμιγής επισημαντής σύνταξης PHP, μεταφορά του Shiki. Μορφοποιήστε μπλοκ κώδικα με θέματα VS Code και γραμματικές TextMate χωρίς Node· η έξοδος ταιριάζει με το Shiki 3.23.0 σε όλα τα σενάρια oracle 214.
composer require shikiphp/shikiphpΤελευταία έκδοση v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
'lang' => 'ansi',
'theme' => 'github-dark',
]);Στην πράξη
Επισημάνετε ένα απόσπασμα από πρότυπο PHP ή σενάριο δημιουργίας και εκτυπώστε το HTML που επιστρέφει.
Μία κλήση ανά μπλοκ κώδικα
Το Shikiphp::codeToHtml δέχεται τον κώδικα, ένα αναγνωριστικό γλώσσας και ένα αναγνωριστικό θέματος. Επιστρέφει ένα πλήρες μπλοκ pre με τα χρώματα ενσωματωμένα, ώστε να αποδίδεται χωρίς επιπλέον φύλλο στυλ.
Περάστε έναν χάρτη themes αντί για theme και το ίδιο μπλοκ θα περιλαμβάνει φωτεινά και σκοτεινά χρώματα μέσω μεταβλητών CSS.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
return "Hello, {$name}!";
}
PHP, [
'lang' => 'php',
'theme' => 'github-dark',
]);use Shikiphp\Shikiphp;
$code = 'const answer: number = 42';
echo Shikiphp::codeToHtml($code, [
'lang' => 'ts',
'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);Πραγματικές γραμματικές TextMate
Πιστή μεταφορά του vscode-textmate: ενσωματωμένες γλώσσες, ενσωματώσεις και εμφωλευμένα αποθετήρια. Οι ίδιες γραμματικές με τις οποίες κάνουν τοκενικοποίηση τα Shiki και VS Code.
Θέματα VS Code
Ειδικότητα επιλογέα scope και αντιστοίχιση γονικών scope, μεταφερμένες από το vscode-textmate. Ένα θέμα ή διπλό φωτεινό/σκοτεινό μέσω μεταβλητών CSS.
Έξοδος πανομοιότυπη με Shiki
Τα σενάρια oracle 214, που καλύπτουν 167 από τις 253 ενσωματωμένες γραμματικές, το ANSI και τα 65 θέματα, παράγουν αποτέλεσμα που ταιριάζει με το HTML του Shiki 3.23.0 με τη μηχανή regex JavaScript του, εκτός από τα αρχικά και τελικά κενά.
Μηχανή regex αποκλειστικά σε PHP
Μια ενσωματωμένη μηχανή RegExp JavaScript από το inline0/phasis, με τροφοδότηση από μεταφορά oniguruma-to-es. Η μηχανή regex JavaScript του Shiki ακολουθεί την ίδια διαδρομή Oniguruma προς RegExp.
Μετασχηματιστές
Κάθε hook του Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), μαζί με τους ενσωματωμένους μετασχηματιστές σημειογραφίας, μεταδεδομένων και κενών χαρακτήρων.
Το πλήρες πακέτο
Περιλαμβάνονται όλες οι γλώσσες tm-grammars (235, συν 18 βοηθητικές γραμματικές) και όλα τα θέματα tm-themes (65). Περιλαμβάνονται επίσης έξοδος τερματικού ANSI, διακοσμήσεις και colorReplacements.
CLI
Επισημάνετε ένα αρχείο για το HTML ή εμφανίστε τις ενσωματωμένες γλώσσες και τα θέματα απευθείας από τη γραμμή εντολών με το bin/shikiphp.
Χωρίς Node
Εκτελείται σε PHP 8.2+ μόνο με τα ext-json και ext-mbstring. Χωρίς περιβάλλον εκτέλεσης Node, εγγενή σύνδεση Oniguruma ή κλήση εξωτερικών εντολών.
Γιατί ShikiPHP
Εκτελείται εκεί όπου εκτελείται το PHP σας
Η επισήμανση γίνεται μέσα στη διεργασία PHP, χωρίς κλήση του Node μέσω κελύφους ή κλήση φιλοξενούμενου API. Ταιριάζει σε βήμα δημιουργίας για Laravel, WordPress ή στατικό ιστότοπο.
Αποτέλεσμα που αποθηκεύεται στην κρυφή μνήμη
Ο ίδιος κώδικας με τις ίδιες επιλογές παράγει πάντα το ίδιο HTML. Κάντε επισήμανση κατά τη δημιουργία ή αποθηκεύστε το HTML στην κρυφή μνήμη με κλειδί τον κώδικα και τις επιλογές, μέχρι να αλλάξει η πηγή.
Ένα μπλοκ για φωτεινή και σκοτεινή εμφάνιση
Ένας χάρτης θεμάτων γράφει το δεύτερο θέμα ως μεταβλητές CSS στην ίδια σήμανση και λίγες γραμμές CSS αλλάζουν σε αυτό. Η επιλογή defaultColor καθορίζει ποιο θέμα ενσωματώνεται.
Όρια για μη έμπιστη είσοδο
Η μηχανή regex αποθηκεύει αποτυχημένες αντιστοιχίσεις και προστατεύεται από ReDoS, ώστε ένα παθολογικό μοτίβο να επιβραδύνει την εκτέλεση αντί να την κολλήσει. Η επιλογή tokenizeMaxLineLength αποδίδει τις υπερβολικά μεγάλες γραμμές ως ένα απλό διακριτικό.
Σε σύγκριση με
Άλλοι τρόποι επισήμανσης κώδικα για ιστότοπο PHP και οι διαφορές του ShikiPHP.
| Εργαλείο | Κατάλληλο για | Διαφορά με το ShikiPHP |
|---|---|---|
| Shiki | Κατάλληλο γιαΗ υλοποίηση αναφοράς, σε JavaScript. Λειτουργεί σε κάθε σύγχρονο περιβάλλον εκτέλεσης JavaScript χωρίς API Node.js, φορτώνει γραμματικές και θέματα κατά απαίτηση και διαθέτει ενσωματώσεις Twoslash TypeScript. | Διαφορά με το ShikiPHPΤο ShikiPHP μεταφέρει αυτή την ακολουθία στο PHP για σελίδες που αποδίδονται σε διακομιστή PHP. Το περιβάλλον oracle συγκρίνει το HTML του με το 3.23.0 Shiki, ενώ ο κύριος κλάδος του Shiki έχει προχωρήσει στο v4. |
| Phiki | Κατάλληλο γιαΈνας επισημαντής PHP που χρησιμοποιεί επίσης γραμματικές TextMate και θέματα VS Code. Περιλαμβάνει επέκταση league/commonmark που λειτουργεί με το Str::markdown του Laravel, έξοδο τερματικού και εκτελέσιμο αρχείο γραμμής εντολών. | Διαφορά με το ShikiPHPΤο Phiki περιγράφει τον αναλυτή διακριτικών του ως εμπνευσμένο από το vscode-textmate, αλλά όχι ως μετάφραση 1 προς 1. Το ShikiPHP μεταφέρει τα vscode-textmate και oniguruma-to-es και ελέγχει το HTML του ως προς την έξοδο του Shiki στα σενάρια oracle 214. |
| highlight.php | Κατάλληλο γιαΜια μεταφορά PHP του highlight.js για την πλευρά του διακομιστή, με υποστήριξη 185 γλωσσών και τους αρχικούς ορισμούς γλωσσών και στυλ, καθώς και αυτόματη ανίχνευση γλώσσας. | Διαφορά με το ShikiPHPΤο ShikiPHP κάνει τοκενικοποίηση με γραμματικές TextMate και χρωματίζει με θέματα VS Code, χρησιμοποιώντας τα ίδια αρχεία με το Shiki, ενώ κάθε κλήση ορίζει τη γλώσσα. |
| Torchlight | Κατάλληλο γιαΜια υπηρεσία επισήμανσης συμβατή με VS Code. Είναι HTTP API με σχολιασμούς για επισημάνσεις, εστίαση και διαφορές, και διαθέτει επίσημα προγράμματα-πελάτες για Laravel, CommonMark, Statamic και άλλα περιβάλλοντα. | Διαφορά με το ShikiPHPΤο ShikiPHP εκτελείται μέσα στη διεργασία PHP, χωρίς φιλοξενούμενο API. Οι ενσωματωμένοι μετασχηματιστές σημειογραφίας διαβάζουν αντίστοιχα σχόλια για επισημασμένες γραμμές, γραμμές εστίασης και διαφορών. |
Πηγές, επιλεγμένο
Ερωτήσεις και απαντήσεις
Σύντομες απαντήσεις από την τεκμηρίωση του ShikiPHP.
Περάστε έναν χάρτη θεμάτων με φωτεινή και σκοτεινή καταχώριση. Τα φωτεινά χρώματα ενσωματώνονται, ενώ τα σκοτεινά γράφονται ως μεταβλητές --shiki-dark, τις οποίες ενεργοποιεί ένας σύντομος κανόνας CSS με scope στο html.dark .shiki. Ορίστε το defaultColor σε false για έξοδο μόνο με μεταβλητές.
Περιλαμβάνονται όλες οι γραμματικές από το tm-grammars 1.31.15, 235 γλώσσες συν 18 βοηθητικές γραμματικές, και τα 65 θέματα από το tm-themes. Εκτελέστε τις εντολές vendor/bin/shikiphp langs ή vendor/bin/shikiphp themes για να εμφανίσετε τα αναγνωριστικά ή καλέστε τις μεθόδους bundledLanguages() και bundledThemes() στον επισημαντή.
Ναι. Αποκωδικοποιήστε το αρχείο .tmLanguage.json και καταχωρίστε το με το loadGrammar, δίνοντας ένα αναγνωριστικό και προαιρετικά ψευδώνυμα, ή καταχωρίστε ένα θέμα VS Code με το loadTheme. Καταχωρίστε πρώτα κάθε γραμματική που αυτό περιλαμβάνει ή ενσωματώνει.
Η μηχανή regex διαθέτει αποθήκευση αποτυχημένων αντιστοιχίσεων και προστασία από ReDoS, ώστε ένα παθολογικό μοτίβο να επιβραδύνει την εκτέλεση αντί να την κολλήσει. Ορίστε το tokenizeMaxLineLength για να αποδίδεται ένα μόνο απλό διακριτικό για κάθε γραμμή ίση με ή μεγαλύτερη από αυτό το όριο.
Η τεκμηρίωση δεν το συνιστά. Κάντε επισήμανση κατά τη δημιουργία στατικών σελίδων ή αποθηκεύστε το αποδοσμένο HTML στην κρυφή μνήμη με κλειδί τον κώδικα και τις επιλογές. Μέσα σε μία διεργασία, επαναχρησιμοποιήστε έναν επισημαντή· το facade του Shikiphp το κάνει για εσάς.
Το περιβάλλον oracle συγκρίνει το HTML του ShikiPHP με το 3.23.0 Shiki χρησιμοποιώντας τη μηχανή regex JavaScript του Shiki. Τα σενάρια 214 καλύπτουν 167 από τις 253 ενσωματωμένες γραμματικές, το ANSI και όλα τα 65 θέματα, ενώ οι επιλογές και οι ενσωματωμένοι μετασχηματιστές έχουν τους δικούς τους ελέγχους ισοτιμίας.
Ξεκινήστε με τον οδηγό έναρξης και στη συνέχεια προσθέστε μετασχηματιστές, προσαρμοσμένες γραμματικές ή έξοδο ANSI, όταν τις χρειάζονται οι σελίδες σας.