Μετάβαση στο περιεχόμενο

Προσαρμοσμένες γλώσσες & θέματα

Το ενσωματωμένο σύνολο καλύπτει ολόκληρο τον κατάλογο Shiki, αλλά μπορείτε να καταχωρίσετε τη δική σας γραμματική TextMate ή το δικό σας θέμα VS Code από αποκωδικοποιημένο JSON. Και τα δύο ανήκουν στην παρουσία Highlighter.

Προσαρμοσμένα θέματα

Αποκωδικοποιήστε ένα αρχείο θέματος VS Code JSON και περάστε το στο loadTheme. Το θέμα καταχωρίζεται με κλειδί το name του και ένα προσαρμοσμένο θέμα αντικαθιστά το ενσωματωμένο με το ίδιο όνομα.

PHP
use Shikiphp\Shikiphp;

$highlighter = Shikiphp::highlighter();

$theme = json_decode(file_get_contents('my-theme.json'), true);
$highlighter->loadTheme($theme);

$code = '<?php echo "hello";';

echo $highlighter->codeToHtml($code, [
    'lang'  => 'php',
    'theme' => $theme['name'], // the theme's own name
]);

Προσαρμοσμένες γραμματικές

Το loadGrammar καταχωρίζει ένα αποκωδικοποιημένο .tmLanguage.json, ώστε κάθε σημείο εισόδου να μπορεί να το χρησιμοποιεί με το id γλώσσας:

PHP
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
  • $langId — το id με το οποίο θα αναφέρεστε σε αυτό. Αν παραλειφθεί, χρησιμοποιείται το name της γραμματικής και έπειτα το scopeName.
  • $aliases — πρόσθετα id που αντιστοιχούν στην ίδια γραμματική.
  • $embedded — τα id γλωσσών που ενσωματώνει αυτή η γραμματική, ώστε να επιλύονται και οι αντίστοιχες γραμματικές.
PHP
use Shikiphp\Shikiphp;

$highlighter = Shikiphp::highlighter();

$grammar = json_decode(file_get_contents('mylang.tmLanguage.json'), true);
$highlighter->loadGrammar($grammar, 'mylang', aliases: ['ml']);

$code = file_get_contents('example.mylang');

echo $highlighter->codeToHtml($code, [
    'lang'  => 'mylang',
    'theme' => 'github-dark',
]);

Οι αναφορές γραμματικών include (#repo, $self, $base, other.scope) και οι ενσωματωμένες γλώσσες επιλύονται με βάση τις γραμματικές που έχουν ήδη καταχωριστεί στο εργαλείο επισήμανσης. Καταχωρίστε πρώτα τυχόν εξαρτήσεις.

Χρήση προσαρμοσμένου εργαλείου επισήμανσης μέσω του facade

Αν θέλετε το στατικό facade Shikiphp να χρησιμοποιεί το προσαρμοσμένο εργαλείο επισήμανσης, περάστε του το μέσω του Shikiphp::use:

PHP
use Shikiphp\Highlighter;
use Shikiphp\Shikiphp;

$myTheme = json_decode(file_get_contents('my-theme.json'), true);
$myGrammar = json_decode(file_get_contents('mylang.tmLanguage.json'), true);
$code = file_get_contents('example.mylang');

$highlighter = Highlighter::createBundled();
$highlighter->loadTheme($myTheme);
$highlighter->loadGrammar($myGrammar, 'mylang');

Shikiphp::use($highlighter);

// Now the facade delegates to your highlighter.
echo Shikiphp::codeToHtml($code, ['lang' => 'mylang', 'theme' => $myTheme['name']]);

Καλέστε το Shikiphp::reset() για να επιστρέψετε στο προεπιλεγμένο ενσωματωμένο εργαλείο επισήμανσης.