--=REKLAMA=--

Pomoc

Podświetlanie składni

Z Joomla!WikiPL

Kolorowanie składni, a MediaWiki

Ikona informacja.png
 Informacja

Najlepiej korzystać z tego rozwiązania. Jest ono zalecane, ale w niektórych przypadkach może okazać się wygodniejsze drugie rozwiązanie, podane niżej.


Całkiem niedawno (maj 2007) samo oprogramowanie MediaWiki daje nam możliwość podświetlania składni, więc nie trzeba uciekać do JavaScriptowych trików. W najprostszy sposób wykorzystujemy w tym celu znacznik. <source lang="język"></source> np.

 <source lang="python">
 silnia = lambda x: x==0 or x*silnia(x-1)
 print silnia(10)
 </source>
 

Otrzymamy:

silnia = lambda x: x==0 or x*silnia(x-1)
print silnia(10)

Powyższe rozwiązanie jest zalecane, ale w niektórych przypadkach można wykorzystać sposób podany niżej. Jednakże nie powinno się mieszać obydwu metod w jednym podręczniku.

Więcej na ten temat można poczytać na stronie MediaWiki.

Podświetlania składni (JavaScript)

Język Skrót
C c
C++ cpp
JavaScript js
Pascal pas
PHP php
Python py

Chyba każdy się zgodzi, że odpowiednio podświetlony kod danego języka programowania ułatwia jego czytanie i zrozumienie. Niestety oprogramowanie Wikibooks nie daje nam takiej możliwości. Wcześniej podświetlanie składni można było uzyskać poprzez ręczne kolorowanie kodu, co było oczywiście dosyć niewygodne i uciążliwe. Na przykład wstawiając kod:

<font color=blue>#include</font> <iostream>
 
<font color=blue>using namespace</font> std;
 
<font color=green>int</font> main() {
   cout << "Hello World\n";
   <font color=blue>return</font> 0;
}
 

Otrzymujemy:

#include <iostream>

using namespace std;

int main() {
   cout << "Hello World\n";
   return 0;
}

Niestety takie podejście do kolorowania kodu jest dla większości jednak uciążliwe i Wikipisarz zamiast skupić się na treści za bardzo koncentruje się na wyglądzie, traci mnóstwo czasu na kolory, a jakość i czytelność kodu wiki jest raczej kiepska.

Na szczęście pomimo tego większość przeglądarek obsługuje Jave Script, dlatego też został stworzony skrypt koloryzujący składnię różnych języków programowania (kod można znaleźć w MediaWiki:Ext/Highlighting.js).

Korzystanie ze skryptu

Aby skrypt się załadował w danym pliku należy umieścić w pewnym miejscu szablon {{podświetl}} i tylko tyle.

Teraz wystarczy wstawić blok pre lub tt i ustawić klasę, która została przeznaczona dla danego języka, a klasa jest postaci lang-(skrót języka). Na przykład, aby podświetlić kod C++, napiszemy:

<pre class="lang-cpp">
#include <iostream>

using namespace std;

int main() {
   cout << "Hello World\n";
   return 0;
}
</pre>
 

I otrzymamy

#include <iostream>

using namespace std;

int main() {
   cout << "Hello World\n";
   return 0;
}

Natomiast pisząc:

<pre class="lang-py">
def silnia(a):
   if a == 0:
      return 1
   return a*silnia(a-1)

print silnia(30)
</pre>
 

otrzymamy:

def silnia(a):
   if a == 0:
      return 1
   return a*silnia(a-1)

print silnia(30)

Z kolei, gdy napiszemy <tt class="lang-cpp">using namespace std;</tt> otrzymamy using namespace std;.

W tabeli na górze strony została wypisana liczba obsługiwanych języków przez skrypt i jaki posiada dany język skrót. Należy zaznaczyć, że wielkość liter ma znaczenia.

W większości przypadków na jednej stronie opisujemy tylko jeden język programowania. Skrypt także daje nam możliwość zdefiniowania domyślnego języka za pomocą {{podświetl||skrót języka}}. Na przykład, jeśli kod strony będzie wyglądał tak:

{{podświetl|python}}

 def dodaj(a, b):
    return a + b

Instrukcja <tt>def</tt> służy do definiowania funkcji w Pythonie,
podobnie jak <tt class="lang-js">function</tt> w Javie Script.

Otrzymamy:

def dodaj(a, b):
   return a + b

Instrukcja def służy do definiowania funkcji w Pythonie, podobnie jak function w Javie Script.

Rozwiązywanie problemów

Podświetlanie a własne formatowanie

Załóżmy, że chcielibyśmy, aby pewna linia została w jakiś sposób została wyróżniona np. kolorem, czy pogrubieniem. W takim przypadku nie możemy skorzystać z bloku pre, ale za to istnieją dwa inne rozwiązania:

  • Zdefiniować domyślny język za pomocą {{podświetl||skrót języka}}.
  • Zamiast z bloku pre skorzystać z tt.

W przypadku, gdy zdefiniujemy domyślny język, możemy pisać tak jak zawsze, dodając dodatkowe wcięcia do kodu i formatując go np.

 {{podświetl|py}}
 Kod źródłowy:
  def test():
     print "OK"
     '''a = 10''' # bardzo ważne

Otrzymamy:

Kod źródłowy:

def test():
   print "OK"
   a = 10 # bardzo ważne

W przypadku, gdy z jakichś powodów nie możemy skorzystać z pierwszego sposobu, korzystamy oczywiście z drugiego. Zamiast korzystać z pre korzystamy z tt tworząc jednocześnie wcięcia np.

 <tt class="lang-py">def test():
    print "OK"
    '''a = 10''' # bardzo ważne</tt>
</div>

Wynik będzie identyczny z poprzednim.

Jeśli nie chcemy podświetlać

Załóżmy, że zdefiniowaliśmy domyślny język i tworzymy sobie jakiś tekst preformatowany, który nie chcemy podświetlać. Co możemy zrobić? Wystarczy wszystko umieścić w <span>...</span> i po problemie np.

{{podświetl|cpp}}
 
 <span>Słowo void, czy return już dla
 nas nic nie znaczy.</span>

Otrzymamy:

 Słowo void, czy return już dla
 nas nic nie znaczy.

Brakuje języka

Jeśli chcesz, aby została dodana obsługa pewnego języka, porozmawiaj o tym w Kawiarence. W przypadku znalezienia jakiś błędów w skrypcie, także powinieneś o tym tam napisać.


Obsługiwane języki

Poniżej znajduje się lista języków obsługiwanych przez GeSHi. Nazwa może być zastosowana jako parametr lang:

Kod Język
abap ABAP
actionscript ActionScript
ada Ada
apache Apache Log
applescript AppleScript
asm ASM
asp Active Server Pages (ASP)
autoit AutoIt
bash Bash
basic4gl Basic4GL
blitzbasic Blitz BASIC
bnf Backus-Naur Form
c C
c_mac C (Mac)
caddcl AutoCAD DCL
cadlisp AutoLISP
cfdg CFDG
cfm ColdFusion
cpp-qt C++ (Qt toolkit)
cpp C++
csharp C#
css Cascading Style Sheets (CSS)
d D
delphi Delphi
diff Diff
div DIV
dos DOS batch file
dot DOT
eiffel Eiffel
fortran Fortran
freebasic FreeBASIC
genero Genero
gml Game Maker Language (GML)
groovy Groovy
haskell Haskell
html4strict HTML
idl Uno IDL
ini INI
inno Inno
io Io
java Java
java5 Java(TM) 2 Platform Standard Edition 5.0
javascript JavaScript
latex LaTeX
Code Language
lisp Lisp
lua Lua
m68k Motorola 68000 Assembler
matlab MATLAB M
mirc mIRC scripting language
mpasm Microchip Assembler
mysql MySQL
nsis Nullsoft Scriptable Install System (NSIS)
objc Objective-C
ocaml-brief OCaml
ocaml OCaml
oobas OpenOffice.org Basic
oracle8 Oracle 8 SQL
pascal Pascal
per per
perl Perl
php-brief PHP
php PHP
plsql PL/SQL
python Python
qbasic QBasic/QuickBASIC
rails Rails
reg Windows Registry
robots robots.txt
ruby Ruby
sas SAS
scheme Scheme
sdlbasic SdlBasic
smalltalk Smalltalk
smarty Smarty
sql SQL
tcl Tcl
text Plain text
thinbasic thinBasic
tsql Transact-SQL
vb Visual Basic
vbnet Visual Basic .NET
vhdl VHDL
visualfoxpro Visual FoxPro
winbatch Winbatch
xml XML
xpp X++
z80 ZiLOG Z80 Assembler