RkBlog

Hardware, programming and astronomy tutorials and reviews.

GeSHI

Opis klasy do kolorowania składni wielu języków programowania

GeSHi czylo Generic Syntax Highlighter to klasa służąca do wyświetlania pokolorowanej składni kodu wielu języków programistycznych. Obecnie GeSHi obsługuje języki takie jak: HTML, CSS, C, PHP, JAVA, SQL i inne.

Podstawowe opcje GeSHi

Wraz z klasą mamy plik example.php - jest to w pełni działający skrypt pokazujący możliwości klasy. Wpisujemy kod, wybieramy język i wysyłamy formularz. Zaczniemy od podstaw. Oto przykład kodu kolorującego składnię wybranego języka:
<?php

<?PHP
include('geshi.php');
$language = 'php'; // język kodu
$patch = 'geshi/'; // ścieżka do plików językowych

ob_start(); // tworzymy zmienną przechowującą kod do pokolorowania
?>
echo $foo;
// tutaj jakiś kod PHP do kolorowania
<?PHP
$source = ob_get_contents();
// Cały powyższy kod znajduje się w zmiennej $source
ob_end_clean();

// Tworzymy nowy obiekt klasy
$geshi = new GeSHi($source, $language, $path);
// Wyświetlamy
echo $geshi->parse_code();
To wyświetli "pokolorowany" kod, lecz brakować będzie formatowania i kolorów takich jak w example.php. Rozbudujmy przykład:
<?PHP
ob_start(); // tworzymy zmienną przechowującą kod do pokolorowania
?>
echo $foo;
// tutaj jakiś kod PHP do kolorowania
<?PHP
$source = ob_get_contents();
// Cały powyższy kod znajduje się w zmiennej $source
ob_end_clean();
$language = 'php'; // język kolorowanego kodu

include('geshi.php');
// Tworzymy obiekt
$geshi = new GeSHi($source, $language);
$geshi->enable_classes();
$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5); // Numerowanie wierszy
$geshi->set_overall_style('font-size: 90%; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', true); // ogólne formatowanie (obramowanie i tło)
$geshi->set_line_style('font: normal normal 95% 'Courier New', Courier, monospace; color: #003030;', 'font: bold normal 95% 'Courier New', Courier, monospace; color: #006060;', true);  // wygląd numerów wieszy
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<title>GeSHi examples</title>
	<style type="text/css">
	<!--
	<?php
		echo $geshi->get_stylesheet(); // style dla danego kodu
	?>
	-->
	</style></head><body>
<?php
// wyświetlenie wyniku
		echo $geshi->parse_code();
?>
enable_line_numbers określa czy numeracja jest włączona i jak ma wyglądać. Jako parametry mamy do wyboru: GESHI_NORMAL_LINE_NUMBERS - normalne numerowanie, GESHI_FANCY_LINE_NUMBERS co X wierszy numer będzie wyszczególniony, GESHI_NO_LINE_NUMBERS - brak numerowania (domyślne). Przy 2 typie podajemy również co ile wierszy wyszczególnić numer: (GESHI_FANCY_LINE_NUMBERS, 5) tj. co pięć. Kolejną opcją dodatkową jest set_case_keywords co może zamienić na duże lub małe litery odpowiednie słowa w kodzie, np dla SQL: "SELECT * FROM tabela". Dodajemy: $geshi->set_case_keywords(GESHI_CAPS_UPPER); lub z GESHI_CAPS_LOWER by mieć małe litery.
Po szczegółowy opis odsyłam do dokumentacji klasy (w katalogu doc/)
RkBlog

PHP w Akcji, 14 July 2008,

Comment article