TypeFriendly 0.1
| Copyright © Invenzzia Group 2008-2009 |
| Dostępne na licencji: GNU Free Documentation License 1.2 |
| Wygenerowano: 02.05.2010 |
Spis treści
- 1. Przedmowa
- 2. Instalacja
- 3. Tworzenie własnej publikacji
- 3.1. Struktura katalogowa
- 3.2. Plik settings.ini
- 3.3. Rozdziały
- 3.4. Składnia pliku
- 3.4.1. Wprowadzenie
- 3.4.2. Akapity i tekst
- 3.4.3. Wyróżnienia
- 3.4.4. Wstawki kodu
- 3.4.5. Nagłówki
- 3.4.6. Linki
- 3.4.7. Grafika i obrazki
- 3.4.8. Listy porządkowe
- 3.4.9. Bloki kodu
- 3.4.10. Tabelki
- 3.4.11. Listy definicji
- 3.4.12. Przypisy
- 3.4.13. Bloki cytatu i ramki informacyjne
- 3.4.14. Wstawki HTML
- 3.4.15. Zaawansowane użycie
- 3.5. Tagi plików
- 3.6. Szablony
- 4. TypeFriendly
- 5. Dodatki
- Spis treści
1. Przedmowa - 2. Instalacja
Następny »
1. Przedmowa
TypeFriendly to program narzędziowy napisany w PHP5 przeznaczony do generowania i publikowania tekstów w formacie HTML takich, jak dokumentacje projektów, podręczniki użytkownika, artykuły czy inne dłuższe publikacje. Został napisany tak, aby być prostym w obsłudze oraz aby rezultaty można było osiągnąć już w kilka minut po rozpoczęciu pracy. TypeFriendly domyślnie zawiera wszystko, co niezbędne, do stworzenia dokumentacji, dzięki czemu nie trzeba wyważać otwartych drzwi.
Najważniejsze cechy TypeFriendly:
- Modularna budowa dokumentacji - dokument wynikowy generowany jest ze zwykłych plików tekstowych, a jego układ i zależności między rozdziałami automatycznie ustalane na podstawie nazw tych plików.
- Prosta składnia - rozdziały można pisać w niezwykle prostym i czytelnym formacie Markdown.
- Wsparcie dla publikacji wielojęzycznych - TypeFriendly umożliwia równoległe tworzenie publikacji w kilku językach, a także udostępnia narzędzia ułatwiające prace, takie jak porównywanie wersji językowych.
- Konfigurowalne formaty wyjściowe - aktualnie TypeFriendly potrafi generować dane w dwóch formatach: XHTML - wiele stron i XHTML - jedna strona.
- Różne dodatki przydatne przy dokumentowaniu kodu: kolorowanie składni, referencje, zależności między klasami...
- Łatwe tworzenie nawigacji.
- Pracuje pod Linuksem i Windowsem.
TypeFriendly dostępny jest na licencji GNU General Public License 3, co oznacza, że możesz go nie tylko używać za darmo, ale także modyfikować i dostosowywać do własnych celów.
- Spis treści
2. Instalacja - 1. Przedmowa
« Poprzedni - 3. Tworzenie własnej publikacji
Następny »
2. Instalacja
TypeFriendly jest narzędziem napisanym w PHP5 obsługiwanym z wiersza poleceń systemu operacyjnego. Aby móc z niego korzystać, musisz posiadać zainstalowane PHP 5.2 z obsługą trybu wiersza poleceń (CLI).
Instalacja PHP
PHP jest popularnym skryptowym językiem programowania wykorzystywanym powszechnie do tworzenia dynamicznych stron internetowych. Jest jednak wykorzystywany również do tworzenia tradycyjnych aplikacji. W tym rozdziale krótko opiszemy, jak zainstalować PHP na własnym komputerze.
Jeśli jesteś programistą PHP, interpreter powinien już być zainstalowany na Twoim komputerze. W tym przypadku pozostaje Ci tylko sprawdzić, czy Twoja instalacja posiada obsługę interfejsu wiersza poleceń.
System Windows
Binarne wersje PHP 5.2 dla systemu Windows są dostępne do ściągnięcia w formie archiwów ZIP ze strony www.php.net. Rozpakuj ściągnięte archiwum ZIP gdzieś na dysk twardy, np. C:\php\. Właściwie to już jest wszystko, jednak póki co korzystanie z interpretera będzie dość niewygodne, gdyż będziesz musiał podawać pełną ścieżkę dostępu do pliku php.exe. Aby usunąć tę nieprzyjemność, musisz dodać C:\php do zmiennej środowiskowej PATH w Twoim systemie.
Otwórz Panel sterowania i uruchom aplet System. W zakładce Zaawansowane wybierz przycisk Zmienne środowiskowe. W nowo otwartym oknie, w sekcji Zmienne środowiskowe znajdź zmienną PATH, zaznacz ją i kliknij przycisk Edytuj, aby zmodyfikować jej wartość. Po znaku średnika ; dopisz ścieżkę do katalogu z PHP, np.
...;C:\php\
Zapisz wszystko i zamknij panel sterowania.
Systemy uniksowe
Instalacja PHP jest dużo prostsza w systemach uniksowych, ponieważ najczęściej wyposażone są one w rozmaite narzędzia do zarządzania pakietami. Przykładowo, w Debian Linux możesz zainstalować PHP z konsoli przy pomocy następujących poleceń:
apt-get install php5-common
apt-get install php5-cli
Szczegółowe polecenia do Twojej dystrybucji mogą być inne, dlatego musisz zajrzeć do jej dokumentacji po dokładne instrukcje.
Zazwyczaj pakiety PHP są odpowiednio skonfigurowane tak, żeby nie trzeba było modyfikować zmiennej środowiskowej PATH.
Testowanie instalacji
Aby przetestować swoją instalację PHP, otwórz konsolę (w Windowsie: wiersz poleceń) i wpisz:
php --version
Jeśli zobaczysz wynik podobny do poniższego, oznacza to, że wszystko zostało prawidłowo zainstalowane.
PHP 5.2.10RC2-dev (cli) (built: May 27 2009 18:48:36)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
Instalacja TypeFriendly
Ściągnij najnowszą wersję TypeFriendly ze strony www.invenzzia.org i rozpakuj ją gdzieś na swoim dysku twardym. Właściwie jest to już wszystko, o ile PHP jest poprawnie zainstalowane. Uruchom wiersz poleceń i przejdź do katalogu z TypeFriendly poleceniem cd:
cd /sciezka/do/TypeFriendly
Aby przetestować instalację, spróbuj zbudować podręcznik użytkownika do samego TypeFriendly dołączony do instalacji:
php typefriendly.php build "./docs/"
Użytkownicy systemów uniksowych mogą także przetestować skróconą formę, o ile ścieżka do interpretera w ich systemie to /usr/bin/php:
./typefriendly build "./docs/"
TypeFriendly powinien teraz przebudować swój własny podręcznik, a wygenerowany wynik powinien być dostępny w katalogu ./docs/output/.
- Spis treści
3. Tworzenie własnej publikacji - 2. Instalacja
« Poprzedni - 3.1. Struktura katalogowa
Następny »
3. Tworzenie własnej publikacji
W tym rozdziale opiszemy, jak stworzyć swoją własną publikację.
Ręczne tworzenie
W następnych rozdziałach zakładamy, że chcesz utworzyć nową publikację ręcznie. Cały proces jest dość prosty i trwa tylko kilka minut. Jeśli używasz TypeFriendly po raz pierwszy, zalecamy rozpoczęcie swej przygody właśnie od tego, aby zapoznać się z budową wersji źródłowej publikacji.
Kreator nowych publikacji
Od wersji 0.1.2 TypeFriendly udostępnia kreator nowych publikacji uruchamiany z wiersza poleceń. Kreator samodzielnie tworzy całą niezbędną strukturę katalogów w podanym folderze, używając domyślnych szablonów oraz dostarczonych przez Ciebie informacji. Aby uruchomić kreator, stwórz nowy, pusty katalog i uruchom następującą komendę:
php typefriendly.php create "/path/to/directory"
TypeFriendly zada Ci kilka pytań dotyczących nowego projektu, a następnie utworzy wszystkie wymagane pliki.
- 3. Tworzenie własnej publikacji
3.1. Struktura katalogowa - 3. Tworzenie własnej publikacji
« Poprzedni - 3.2. Plik settings.ini
Następny »
3.1. Struktura katalogowa
Publikacja TypeFriendly musi mieć odpowiednią strukturę katalogową. Utwórz gdzieś na dysku twardym nowy, pusty folder - my oznaczymy go przez /, a w nim dodaj następujące podkatalogi:
/input
/pl
/output
/sort_hints.txt
/settings.ini
Zasady są bardzo proste: w katalogu /input znajdują się podkatalogi reprezentujące poszczególne wersje językowe, a w nich umieszczamy charakterystyczne dla każdej z nich pliki tekstowe. W /output TypeFriendly będzie zapisywać wygenerowaną wersję HTML dokumentów, dlatego upewnij się, że nadałeś mu uprawnienia do zapisu. Bezpośrednio w głównym katalogu zapisywane są pliki z ustawieniami, w których możesz wpływać na różne aspekty publikacji. Najważniejszym z nich jest settings.ini zawierający ustawienia główne. sort_hints.txt zawiera wskazówki dotyczące kolejności rozdziałów. Dokładna budowa każdego z plików wyjaśniona jest dalej.
Opcjonalnie, każdy katalog z wersją językową może zawierać dwa dodatkowe foldery: /input/JEZYK/media oraz /input/JEZYK/templates do przechowywania:
- plików graficznych
- szablonów treści
Zostaną one omówione dalej.
- 3. Tworzenie własnej publikacji
3.2. Plik settings.ini - 3.1. Struktura katalogowa
« Poprzedni - 3.3. Rozdziały
Następny »
3.2. Plik settings.ini
Jest to główny plik konfiguracyjny z listą opcji. Jak sama nazwa pliku wskazuje, jest to typowa składnia plików INI:
opcja1 = "wartosc1" opcja2 = "wartosc2" opcja3 = "wartosc3" ; komentarz
Znak średnika rozpoczyna komentarz, który ciągnie się aż do końca linii.
Podstawowe opcje, jakie należy ustawić, to:
- title
- tytuł publikacji
- version
- wersja publikacji
- copyright
- prawa autorskie do publikacji
- license
- licencja, na jakiej udostępniana jest publikacja
- projectType
- rodzaj publikacji
- dostępne wartości:
manual(domyślna),documentation,article,book
Dodatkowe opcje:
- copyrightLink
- odnośnik do strony posiadacza praw autorskich
- licenseLink
- odnośnik do strony z treścią licencji
Opcje techniczne związane z projektem:
- outputs
- lista formatów, w jakich chcesz generować dokumentację, odseparowanych przecinkami.
- baseLanguage
- dla każdej publikacji musi zostać wybrany podstawowy język, w którym powstaje oryginalna treść. Tutaj możesz go ustawić. Ważne, aby nazwa pokrywała się z nazwą katalogu, w którym znajduje się wersja publikacji w tym języku.
- navigation
-
określa sposób łączenia stron w pasku nawigacyjnym "Poprzedni/Następny". Dozwolone wartości to:
- tree
- linki "Poprzedni" i "Następny" zawsze wskazują na sąsiada danego rozdziału. Jeżeli sąsiad nie istnieje, link nie jest wyświetlany. Jest to domyślna wartość.
- book
- rozdziały są tak łączone, aby klikając "Poprzedni" lub "Następny" można było przejść całą publikację (jak w książce).
- showNumbers
- czy włączyć numerowanie rozdziałów (wartości true lub false).
- versionControlInfo
- czy wyświetlać wartości tagów dotyczących systemu kontroli wersji? (domyślnie false)
Przykładowy plik konfiguracyjny, który służy do wygenerowania tego podręcznika, wygląda następująco:
; Opcje podstawowe title = "TypeFriendly" version = "0.1" copyright = "Invenzzia Group 2008-2009" copyrightLink = "http://www.invenzzia.org/" license = "GNU Free Documentation License 2.1" licenseLink = "http://www.gnu.org/licenses/fdl.html" projectType = "manual" ; Ustawienia wyświetlania itd... outputs = "xhtml, xhtml_single" baseLanguage = "en" navigation = "book" showNumbers = true
- 3. Tworzenie własnej publikacji
3.3. Rozdziały - 3.2. Plik settings.ini
« Poprzedni - 3.4. Składnia pliku
Następny »
3.3. Rozdziały
W TypeFriendly poszczególne rozdziały dokumentacji tworzysz jako pliki tekstowe w katalogu /input/jezyk/. Każdy taki plik składa się z dwóch części:
- Nagłówek
- Treść
W nagłówku znajduje się kilka opcji, które pozwalają ustawić np. właściwy tytuł danego rozdziału lub powiązania z innymi częściami dokumentacji. Pod nagłówkiem umieszczana jest treść w formacie Markdown. Dokładny opis składni tych plików znajduje się dalej, gdyż tutaj pragniemy omówić inną rzecz związaną z rozdziałami, mianowicie ustalanie ich kolejności.
W każdej publikacji rozdziały ułożone są w pewnym, określonym porządku i mogą zawierać dodatkowe podrozdziały. Niekiedy pragniemy nadać im alfabetyczną kolejność, np. gdy podrozdziały są indeksem dostępnych funkcji. W innych przypadkach, będziemy chcieli, aby czytelnik zapoznawał się z rozdziałami w żądanym przez nas porządku, gdyż późniejsze rozdziały mogą bazować na informacjach podanych w tych początkowych. TypeFriendly pozwala osiągnąć wszystkie te efekty.
Pliki rozdziałów wykorzystują rozszerzenie *.txt, natomiast pozostała część nazwy używana jest do określenia zależności między rozdziałami. Każdy rozdział ma swój własny identyfikator zbudowany z liter, cyfr, pauz i podkreśleń. Aby zaznaczyć, że B i C są podrozdziałami A, dodajemy identyfikator rozdziału A do B i C, a obie części oddzielamy kropką. Poniżej przedstawiamy przykładową listę rozdziałów:
wstep.txtinstalacja.txtinstalacja.prosta.txtinstalacja.zlozona.txtapi.txtapi.klasa.txtapi.klasa.funkcja1.txtapi.klasa.funkcja2.txtapi.interfejs.txtapi.interfejs.funkcja1.txtapi.interfejs.funkcja2.txt
Przyjrzyjmy się np. rozdziałowi poświęconemu instalacji. Jest stworzony plik tekstowy dla niego, w którym możemy zamieścić jakieś wprowadzenie. Jednocześnie umieszczamy w nim dwa podrozdziały: instalacja.prosta i instalacja.zlozona. TypeFriendly na podstawie nazw pliku powiąże jedno z drugim i wygeneruje odpowiednią nawigację. Opis API jest już bardziej złożony, ponieważ mamy tutaj aż trzy poziomy. Po słowie wstępu w pliku api.txt tworzymy wprowadzenie do opisu pierwszej z klas (api.klasa.txt). Klasa ma jakieś funkcje, tak więc opisujemy każdą z nich jako osobny podrozdział. Pamiętaj, że jeżeli chcesz stworzyć plik o nazwie foo.bar.joe.txt, w dokumentacji muszą również istnieć foo.txt i foo.bar.txt - inaczej TypeFriendly zwróci błąd.
Domyślnie TypeFriendly sortuje poziomy zagnieżdżeń alfabetycznie:
api.txtapi.interfejs.txtapi.interfejs.funkcja1.txtapi.interfejs.funkcja2.txtapi.klasa.txtapi.klasa.funkcja1.txtapi.klasa.funkcja2.txtinstalacja.txtinstalacja.prosta.txtinstalacja.zlozona.txtwstep.txt
Jest to trochę bez sensu, ponieważ o ile super, że funkcje są sortowane automatycznie, o tyle wstęp na końcu publikacji może już wzbudzić u czytelników zdumienie. Aby zmienić kolejność, musimy w głównym katalogu publikacji utworzyć plik sort_hints.txt z paroma wskazówkami:
wstep
instalacja
instalacja.prosta
instalacja.zlozona
api
api.klasa
api.interfejs
Plik zawiera listę rozdziałów w żądanym przez nas porządku. Zauważ, że nie wymieniliśmy tu wszystkich plików. Jeśli w jakimś poziomie zagnieżdżeń pasuje nam alfabetyczna kolejność, po prostu nie wymieniamy tych podrozdziałów na liście (np. nie wypisaliśmy tutaj żadnych funkcji z api.klasa i api.interfejs).
Musisz albo określić kolejność wszystkich podrozdziałów na danym poziomie, albo nie określać jej w ogóle. Jeżeli wymienisz tylko część podrozdziałów, TypeFriendly zgłosi błąd.
Wskazówki:
Plik ze wskazówkami jest jeden dla wszystkich języków, dlatego bardzo ważne jest, aby w każdej wersji językowej odpowiadające sobie rozdziały miały tę samą nazwę pliku.
Nazwa pliku jest też wykorzystywana do identyfikowania rozdziałów przy tworzeniu ręcznym odnośników w tekście. Dlatego wybieraj nazwy krótkie i intuicyjne, trzymając się jakichś reguł. Ułatwi to późniejsze odnalezienie się w tym wszystkim.
TypeFriendly pomija pliki z innym rozszerzeniem lub kończące się np. tyldą, tak więc nie trzeba wyłączać opcji tworzenia kopii zapasowej w edytorze, aby tworzyć publikację.
Zobacz także:
- 3. Tworzenie własnej publikacji
3.4. Składnia pliku - 3.3. Rozdziały
« Poprzedni - 3.4.1. Wprowadzenie
Następny »
3.4. Składnia pliku
Przykładowy plik rozdziału wygląda następująco:
Title: Tytuł
Opcja1: Wartość
Opcja2: Wartość
ListaUstawień:
- Wartość 1
- Wartość 2
---
Treść rozdziału
W ustawieniach umieszczamy kolejne znaczniki w sposób pokazany powyżej. Obowiązkowy jest Title, ale jest też kilka innych. Właściwie ich lista zależy bardziej od tego, w jakim formacie wyjściowym będziemy generować dokumentację. Można bardzo łatwo opracować własny i zacząć używać tam nowe znaczniki - zostanie to omówione dalej.
Treść nagłówka od właściwej treści rozdziału rozdzielamy co najmniej trzema pauzami --- otoczonymi pojedynczymi pustymi linijkami.
Do formatowania treści rozdziału używana jest składnia "PHP Markdown Extra" z paroma rozszerzeniami i modyfikacjami. Spotkać się z nią można na wielu stronach internetowych, ponieważ parsery są publicznie dostępne, stąd istnieje szansa, że już ją znasz. Gdyby jednak nie, odwiedź stronę jednego z parserów (np. tę podaną powyżej), by dowiedzieć się więcej. W następnych rozdziałach szczegółowo została opisana składnia tego języka oraz wyszczególnione zostały drobne modyfikacje zastosowane w TypeFriendly.
Zobacz także:
- 3.4. Składnia pliku
3.4.1. Wprowadzenie - 3.4. Składnia pliku
« Poprzedni - 3.4.2. Akapity i tekst
Następny »
3.4.1. Wprowadzenie
Markdown został stworzony, by być zarówno łatwy w użyciu, jak i przyjazny w czytaniu plików źródłowych. Pliki źródłowe dokumentacji TypeFriendly mogą dzięki temu służyć za pomoc nawet bez przepuszczenia ich przez generator. Przyjęte jest założenie, że znaki formatujące powinny jak najmniej rzucać się w oczy czytelnikowi i mieć zbliżone zastosowanie do tego, jakiego już się używa np. w poczcie elektronicznej czy plikach README. Zauważyć można też podobieństwa do składni reStructuredText. Oprócz podstawowego formatowania, do użytku dopuszczony jest także HTML i modyfikacje TypeFriendly czasem z tego faktu korzystają. W kolejnych rozdziałach opisane zostały szczegółowo wszystkie elementy tego języka.
TypeFriendly korzysta z bardziej rozbudowanej składni Markdown Extra, której rozwojem zajmuje się Michel Fortin.
TypeFriendly jako podstawę swojego parsera źródeł rozdziałów korzysta z oryginalnego parsera Michela Fortina o nazwie PHP Markdown Extra. Do kolejnych wydań TypeFriendly zamieszczać będziemy najaktualniejsze jego wersje.
Dokładna specyfikacja języka Markdown jest cały czas w trakcie opracowywania i do języka mogą dojść nowe elementy i rozwiązania. Autorzy planują zachować kompatybilność wsteczną.
- 3.4. Składnia pliku
3.4.2. Akapity i tekst - 3.4.1. Wprowadzenie
« Poprzedni - 3.4.3. Wyróżnienia
Następny »
3.4.2. Akapity i tekst
Akapit to jedna - bądź więcej, następujących po sobie - linijki tekstu. Osobne akapity oddzielone są jedną, bądź więcej pustą linijka. (Pusta linijka, jak sama nazwa wskazuje, nie może zawierać nic prócz spacji lub tabulacji.) Akapity nie powinny mieć wcięć spacjami na początku.
Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. Ile cię stracił. Dziś piękność twą w Litwie chodził po całym domu lasami i Rzeczpospolita! Zawżdy z jakich rąk strzelby, którą powinna młodź dla żony przy Bernardynie, bernardyn zmówił krótki pacierz wieczorny, pomału usnął ostatni w ręku trzyma obyczajem pańskim i żywot Katona.
Dalej w ulicę się dowie kto gości wysoko siadł pomiędzy nim wiedzą, lekce go kaznodzieją, że tamuje progresy, że przeszkadza kulturze, że nam się ta chwała należy chartu Sokołowi.
Pytano zdania innych. więc będzie jego bok usiadła owa piękność twą w szklankę panny Róży a potem Sędzia z tych łąk zielonych szeroko nad błękitnym Niemnem rozciągnionych.
Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. Ile cię stracił. Dziś piękność twą w Litwie chodził po całym domu lasami i Rzeczpospolita! Zawżdy z jakich rąk strzelby, którą powinna młodź dla żony przy Bernardynie, bernardyn zmówił krótki pacierz wieczorny, pomału usnął ostatni w ręku trzyma obyczajem pańskim i żywot Katona.
Dalej w ulicę się dowie kto gości wysoko siadł pomiędzy nim wiedzą, lekce go kaznodzieją, że tamuje progresy, że przeszkadza kulturze, że nam się ta chwała należy chartu Sokołowi.
Pytano zdania innych. więc będzie jego bok usiadła owa piękność twą w szklankę panny Róży a potem Sędzia z tych łąk zielonych szeroko nad błękitnym Niemnem rozciągnionych. 1
Akapit może składać się z następujących po sobie linijek, które nie zostaną złamane w tekście wyjściowym przez <br />. Oznacza to, że możemy formatować tekst, tak, jak jest to robione np. w tekstowych mailach.
Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. Ile cię stracił.
Dziś piękność twą w Litwie chodził po całym domu lasami i Rzeczpospolita!
Zawżdy z jakich rąk strzelby, którą powinna młodź dla żony przy
Bernardynie, bernardyn zmówił krótki pacierz wieczorny, pomału usnął
ostatni w ręku trzyma obyczajem pańskim i żywot Katona.
Mimo tego, że powyższy tekst ma 5 linijek, zostanie on zamieniony na pojedynczy akapit, bez złamań wierszy:
Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. Ile cię stracił. Dziś piękność twą w Litwie chodził po całym domu lasami i Rzeczpospolita! Zawżdy z jakich rąk strzelby, którą powinna młodź dla żony przy Bernardynie, bernardyn zmówił krótki pacierz wieczorny, pomału usnął ostatni w ręku trzyma obyczajem pańskim i żywot Katona.
Aby zrobić zwykłe przełamanie linijki, należy zakończyć ją dwoma lub więcej spacjami i przejść do nowej linijki.
W poniższym przykładzie spacje na końcu linijek zastąpione zostały znakiem podkreślenia _ aby pokazać ich umiejscowienie
Litwo!__
Ojczyzno moja!__
Ty jesteś jak zdrowie.
Litwo!
Ojczyzno moja!
Ty jesteś jak zdrowie.
Znaki specjalne:
>,<i&Składnia markdown umożliwia wstawianie bezpośrednio do tekstu znaczników języka HTML, co zostało opisane w następnych rozdziałach. Wymaga więc specjalnego traktowania znaków
> < &w przypadku, gdy nie używamy ich do wstawiania znaczników HTML.W HTML-u jeśli np. chcesz napisać np o muzyce R&B musisz posłużyć się tzw. kodami ucieczki HTML, badź encjami i napisać R
&B. Co więcej, musisz również w podobny sposób zapisywać nawet adresy URL, w których występuje znak &!Szukaj <a href="http://images.google.com/images?num=30&q=beata+kozidrak">zdjęć</a>Parser Markdown jest jednak na tyle inteligentny, że potrafi z kontekstu odczytać, który znak należy zamienić na encję, a który nie. Jeśli więc chcesz wstawić znak praw autorskich ©, możesz zapisać go normalną encją HTML:
©.Ale jeśli zechcesz jednak pisać o tej muzyce R&B, Markdown automatycznie zamieni & na encję:
Muzyka R&BChoć Markdown wspiera wstawianie znaczników HTML-a bezpośrednio do treści, możesz bez obaw napisać prawdę matematyczną, że:
4 < 5A znak < zostanie zamieniony na odpowienik encji:
<. Podobnie ma się sytuacja z >, którego encją jest>.
Poziome linie
Można wstawić poziomą linię oddzielającą (<hr />) umieszczając co najmniej trzy gwiazdki *, pauzy - lub podkreślenia _ obok siebie w linijce. Opcjonalnie możesz rozdzielić spacją te znaki.
* * *
***
*****
- - -
---------------------------------------
-
Tekst wygenerowany przez Generator Lorem Ipsum ↩
- 3.4. Składnia pliku
3.4.3. Wyróżnienia - 3.4.2. Akapity i tekst
« Poprzedni - 3.4.4. Wstawki kodu
Następny »
3.4.3. Wyróżnienia
Markdown do pogrubiania i pochylania tekstu wykorzystuje znaki gwiazdki * oraz podkreślenia _ przed i po fragmencie, który chcemy sformatować. Fragment tekstu otoczony jednym znakiem * lub _ zostanie pochylony HTML-owym znacznikiem <em>. Podwójne użycie tych znaków wstawi znacznik <strong> i pogrubi tekst.
*pojedyncze gwiazdki*
_pojedyncze podkreślenia_
**podwójne gwiazdki**
__podwójne podkreślenia__
pojedyncze gwiazdki
pojedyncze podkreśleniapodwójne gwiazdki
podwójne podkreślenia
Możesz użyć którego znaku chcesz, jednym wymogiem jest użycie tego samego znaku do otworzenia i zamknięcia wyróżnienia.
Jeśli chcesz, aby fragment był i pogrubiony, i pochylony, użyj trzech znaków.
***potrójne gwiazdki***
potrójne gwiazdki
Wyróżnienia możesz użyć również wewnątrz słowa:
Litwo*Ojczyzno*Moja
LitwoOjczyznoMoja
Powyższa reguła stosuje się jedynie do gwiazdek. Znaki podkreślenia wyróżnią tekst tylko jeśli odnoszą się do całego słowa, możesz więc bez obaw pisać:
Użyj funkcji mysql_escape_string
Jeśli otoczysz _ lub * przez pojedyncze spacje, tekst nie zostanie sformatowany, a znaki potraktowane po prostu jak gwiazdki lub podkreślenia.
Gdy nie chcesz, by wstawione _ lub * przed i po fragmencie zostały potraktowane jako wyróżnienie, wystarczy poprzedzić je znakiem backslashu
\:\*ten tekst jest otoczony zwykłymi gwiazdkami\**ten tekst jest otoczony zwykłymi gwiazdkami*
- 3.4. Składnia pliku
3.4.4. Wstawki kodu - 3.4.3. Wyróżnienia
« Poprzedni - 3.4.5. Nagłówki
Następny »
3.4.4. Wstawki kodu
W tej dokumentacji już pewnie kilkakrotnie widziałeś tekst o stałej szerokości na żółtym tle wstawiony bezpośrednio do akapitu. Tworzy się go wykorzystując znak odwróconego apostrofu ` przed i po fragmencie, który chcemy sformatować.
Użyj funkcji `print()` by wyświetlić tekst.
Użyj funkcji
print()by wyświetlić tekst.
Jeśli we wstawianym tekście także występują odwrócone apostrofy, do włączenia formatowania można użyć podwojonego odwróconego apostrofu.
``Ten tekst zawiera odwrócony apostrof (`) w środku``
Ten tekst zawiera odwrócony apostrof (`) w środku
Jeśli odwrócony apostrof znajduje się na początku lub końcu kodu, wystarczy oddzielić go spacją.
Pojedynczy odwrócony apostrof: `` ` ``
Ciąg tekstu otoczony odwróconymi apostrofami: `` `coś` ``
Pojedynczy odwrócony apostrof:
`Ciąg tekstu otoczony odwróconymi apostrofami:
`coś`
Umieszczone we wstawce znaki
<,>oraz&automatycznie zamieniane są na encje, a znaczniki HTML w nich nie są przetwarzane.Wpisanie:
Nigdy nie używaj znacznika `<blink>`.Da nam:
Nigdy nie używaj znacznika
<blink>.
Zobacz także:
- 3.4. Składnia pliku
3.4.5. Nagłówki - 3.4.4. Wstawki kodu
« Poprzedni - 3.4.6. Linki
Następny »
3.4.5. Nagłówki
Markdown obsługuje dwa systemy wstawiania nagłówków: Setext oraz atx. Tak jak akapity, są one elementami blokowymi, co znaczy, że do oddzielenia od innych elementów blokowych (listy, akapity, bloki kodu) stosuje się co najmniej jedną pustą linijkę.
Notacja Setext
W notacji Setext, nagłówki zostają "optycznie" podkreślone znakami równości = (nagłówek pierwszego rzędu) lub pauz - (nagłówek drugiego rzędu).
Nagłówek 1
==========
Nagłówek 2
----------
Ilość znaków = lub - nie ma znaczenia, może służyć jedynie celom estetycznym.
Notacja atx
Druga metoda pozwala wstawić nagłówki wszystkich rzędów, przy użyciu od jednego do sześciu znaków krzyżyka (hashu) # przed treścią nagłówka.
# nagłówek 1
## nagłówek 2
##### nagłówek 5
Dopuszczalne jest też zamknięcie nagłówka tymi samymi znakami. Służy to jedynie celom estetycznym, a ilość znaków po nagłówku nie musi się zgadzać z ilością przed nagłówkiem.
# nagłówek 1 #
## nagłówek 2 ####
##### nagłówek 5 #
W stosunku do oryginalnego parsera Markdowna, w TypeFriendly poczynione zostały zmiany, które obniżają w generowanym wyjściu XHTML poziom nagłówka o jeden. Ma to związek z tym, że tytuł artykułu jest zawsze najważniejszy, i to on zyskuje znacznik
<h1>. Wpisany w kod nagłówek pierwszego rzędu zostanie zamieniony na nagłowek drugiego rzędu, drugiego na trzeciego itd. Oznacza to, że choć Markdown (i HTML) udostępnia 6 poziomów nagłówków, to w TypeFriendly dostępnych jest ich 5.
Przykładowe nagłówki:
Nagłówek 1
Nagłówek 2
Nagłówek 3
Nagłówek 4
Nagłówek 5
Kotwice w nagłówkach
Nagłówki umożliwiają stworzenie kotwic, dzięki który będzie można odnieść się z innych części dokumentacji do wybranego fragmentu rozdziału.
Znacznik wygląda następująco: {#kotwica}. Umieszcza się go po tekście nagłówka w notacji setext lub na końcu linijki w notacji atx.
Nagłówek {#kotwica}
========
### Nagłówek ### {#kotwica}
##### Nagłówek {#kotwica}
Aby identyfikatory nagłówków były unikalne w obrębie dokumentacji, TypeFriendly dodaje do nich prefiks:
h:id_rodziału:, dlatego odwołanie się bezpośrednio do kotwicy w linku:[odnośnik](#kotwica)nie zadziała.
- 3.4. Składnia pliku
3.4.6. Linki - 3.4.5. Nagłówki
« Poprzedni - 3.4.7. Grafika i obrazki
Następny »
3.4.6. Linki
Markdown pozwala wstawiać linki do innych stron na trzy sposoby: bezpośrednio liniowo w tekście, poprzez referencję oraz automatycznie.
Dwa pierwsze sposoby korzystają z nawiasów kwadratowych [ ] do otoczenia fragmentu tekstu, który ma stać się linkiem.
Bezpośrednio w tekście
By wstawić odnośnik bezpośrednio w tekście wystarczy wstawić zwykłe nawiasy bezpośrednio po kwadratowych. Możesz również podać opcjonalnie tytuł linku (umieszczony zostanie w atrybucie title w HTML-u wyjściowym) po spacji, otoczony cudzysłowami.
TypeFriendly zostało stworzone przez [grupę Invenzzia](http://www.invenzzia.org)
TypeFriendly zostało stworzone przez [grupę Invenzzia](http://www.invenzzia.org "Invenzzia")
TypeFriendly zostało stworzone przez grupę Invenzzia
TypeFriendly zostało stworzone przez grupę Invenzzia
Poprzez referencje
Referencja do odnośnika używa również nawiasów kwadratowych, które umieszczamy tuż po nawiasach nazwy linku. W referencji podaje się nazwę etykiety do której później można się odnieść. Można opcjonalnie oddzielić spacją referencję od nazwy linku.
To jest [przykład][id] linków z referencją.
To jest [przykład] [id] linków z referencją.
Definicja referencji wygląda następująco:
[id]: http://www.example.org/ "Opcjonalny tytuł"
Są to kolejno:
- Nawiasy kwadratowe, w których umieszczona jest nazwa etykiety referencji
- Dwukropek
- Co najmniej jedna spacja lub tabulacja
- Adres URL, do którego odnosi się referencja
- Opcjonalnie, po spacji, bądź w nowej linijce wcięty spacjami lub tabulacją, otoczony cudzysłowami, apostrofami lub nawiasami tytuł linku
Poniższe linijki oznaczają to samo:
[id]: http://www.example.org/ 'Opcjonalny tytuł'
[id]: http://www.example.org/ (Opcjonalny tytuł)
[id]: http://www.example.org/
"Opcjonalny tytuł"
Możesz również opcjonalnie otoczyć link nawiasami kierunkowymi (< >):
[id]: <http://www.example.org/>
Definicje referencji używane są tylko przez parser Markdowna i wycinane z treści wynikowego dokumentu.
Etykiety referencji mogą się składać z liter, cyfr, spacji, znaków interpunkcyjnych, ale nazwa nie zależy od wielkości liter.
Poniższe linijki odnoszą się do tej samej referencji:
[tekst odnośnika][a]
[tekst odnośnika][A]
Można również pominąć nazwę etykiety, poprzez umieszczenie pustych nawiasów klamrowych [] - wtedy za etykietę przyjęta zostaje nazwa odnośnika.
Możesz np. napisać:
[Invenzzia][]
I utworzyć definicję:
[Invenzzia]: http://www.invenzzia.org
W podobny sposób można tworzyć referencje nawet do nazw linków składających się z kilku słów!
[Grupa Invenzzia][]
[Grupa Invenzzia]: http://www.invenzzia.org
Definicje referencji mogą być umieszczone gdziekolwiek w dokumencie, oddzielone od elementów blokowych (akapity, listy..) pustymi linijkami. Można je umieścić np. pod akapitem, w którym zostały użyte referencje, albo na końcu dokumentu.
Przykład użycia referencji:
Mamy 10 razy więcej ruchu z wyszukiwarki [Google][1] niż z [Netsprint][2] lub [Onet][3].
W rzeczywistości, [Google][1] jest najpopularniejszą wyszukiwarką.
[1]: http://www.google.pl
[2]: http://www.netsprint.pl
[3]: http://szukaj.onet.pl
Z użyciem automatycznych etykiet:
Mamy 10 razy więcej ruchu z wyszukiwarki [Google][] niż z [Netsprint][] lub [Onet][].
[google]: http://www.google.pl
[netsprint]: http://www.netsprint.pl
[onet]: http://szukaj.onet.pl
Po co używać referencji?
Tekst źródłowy staje się dzięki temu czytelniejszy. Linki umieszczone są w osobnych linijkach pod akapitami i nie mieszają się z tekstem (szczególnie te bardzo długie).
Automatycznie
Markdown umożliwia również wstawienie bezpośrednio linków do tekstu w bardzo prosty sposób, przy użyciu nawiasów kierunkowych < >, w których umieszczony zostaje link.
Zajrzyj na naszą stronę: <http://www.invenzzia.org/>
Zajrzyj na naszą stronę: http://www.invenzzia.org/
W podobny sposób można postąpić a adresami e-mail. W tym przypadku jednak parser Markdown zamieni je w wyjściowym HTML-u na "sieczkę" HTML-owych encji.
Adres kontaktowy: <kontakt@example.org>
Adres kontaktowy: kontakt@example.org
Odnośniki do pozostałych rozdziałów dokumentacji
TypeFriendly definiuje listę domyślnych referencji do wszystkich rozdziałów generowanej dokumentacji przy użyciu ich identyfikatorów. Jeżeli chcemy odnieść się do rozdziału api.klasy.jakas-klasa wystarczy napisać:
Zajrzyj do [tego rozdziału][api.klasy.jakas-klasa]
Spowoduje to automatyczne utworzenie linku do żądanego rodziału.
Odnośniki do kotwic
Od wersji 0.1.3 TypeFriendly można odnosić się do kotwic w innych rozdziałach.
Składnia jest taka sama jak normalnie do rozdziału, dodaje się tylko po identyfikatorze odnośnik kotwicy: #kotwica:
Zajrzyj do [tego fragmentu rozdziału][api.klasy.jakas-klasa#kotwica]
Aby odnieść się do kotwicy w tym samym rozdziale nadal należy stosować powyższą składnię i nie używać
[odnośnik](#kotwica). Jest tak z powodu tego, że TypeFriendly do każdej kotwicy nagłówka dodaje prefiksh:id_rodziału:, tak, aby kotwice były unikalne w całej dokumentacji.
- 3.4. Składnia pliku
3.4.7. Grafika i obrazki - 3.4.6. Linki
« Poprzedni - 3.4.8. Listy porządkowe
Następny »
3.4.7. Grafika i obrazki
Wstawianie obrazków do tekstu w składni Markdown jest bardzo podobne do wstawiania linków i różni się tylko tym, że zaczyna się od znaku wykrzyknika !. Składnia wstawiania obrazków również umożliwia używanie referencji.


Tekst alternatywny jest tym, co znajdzie się w atrybucie alt w wyjściowym kodzie HTML.
Referencja w obrazkach wygląda analogicznie do linków:
![Tekst alternatywny][id]
gdzie "id" jest etykietą referencji. Definicja referencji jest identyczna z linkami:
[id]: /sciezka/do/obrazka.jpg "Opcjonalny tytuł"
Więcej informacji na temat referencji znaleźć można w rozdziale o linkach.
Grafika i obrazki w TypeFriendly
Odnoszenie się do obrazków znajdujących się w internecie w przypadku dokumentacji nie ma najmniejszego sensu. Dlatego TypeFriendly umożliwia umieszczenie obrazków w folderze media/ znajdującym się w katalogu z rozdziałami dokumentacji w danym języku (/input/JĘZYK/media). Podczas procesu budowania dokumentacji, katalog ten zostanie przeniesiony do folderu output/.

**Przykład wstawienia obrazka**
Przykład wstawienia obrazka
W naszej dokumentacji powyższy plik graph.png znajduje się w katalogu /input/en/media/.
Zobacz także:
- 3.4. Składnia pliku
3.4.8. Listy porządkowe - 3.4.7. Grafika i obrazki
« Poprzedni - 3.4.9. Bloki kodu
Następny »
3.4.8. Listy porządkowe
Markdown wspiera listy wypunktowane oraz numeryczne. Listy są elementami blokowymi, należy je więc poprzedzać i kończyć co najmniej jedną pustą linijką.
Dodanie listy numerowanej jest niezwykle proste:
Tekst
1. Element 1
2. Element 2
3. Element 3
Tekst
Tekst
- Element 1
- Element 2
- Element 3
Tekst
Wpisane numery nie mają znaczenia - mogą być w innej kolejności, mogą się powtarzać, tworzą jedynie walor estetyczny podczas przeglądania kodu dokumentu. Poniższa lista da taki sam efekt jak podana wyżej:
3. Element 1
3. Element 2
68. Element 3
Do tworzenia listy wypunktowanej, linijka musi zaczynać się od znaku gwiazdki *, plusa + lub minusa (pauzy) -:
+ Element 1
+ Element 2
+ Element 3
tekst
* Element 1
* Element 2
* Element 3
tekst
- Element 1
- Element 2
- Element 3
- Element 1
- Element 2
- Element 3
To, którego znaku użyjemy, nie ma znaczenia - może to być którykolwiek z nich.
Znaczniki list mogą być oddzielone od tekstu jedną, bądź więcej spacją lub tabulacją. Znaczniki list powinny zaczynać się na początku linijek, można jednak odsunąć je od brzegu maksymalnie trzema spacjami.
Linijki w elementach listy można przełamywać, możesz je również odsunąć dla estetyki na tą samą odległość co pierwsza linijka:
* Litwo! Ojczyzno moja! ty jesteś jak zdrowie.
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
* Panno Święta, co jasnej bronisz Częstochowy
I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
Jeśli jesteś jednak leniwy, nie musisz tego robić:
* Litwo! Ojczyzno moja! ty jesteś jak zdrowie.
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
* Panno Święta, co jasnej bronisz Częstochowy
I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
- Litwo! Ojczyzno moja! ty jesteś jak zdrowie. Ile cię trzeba cenić, ten tylko się dowie, Kto cię stracił. Dziś piękność twą w całej ozdobie Widzę i opisuję, bo tęsknię po tobie.
- Panno Święta, co jasnej bronisz Częstochowy I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
Jeśli elementy listy oddzielone są jedną pustą linijką, Markdown ich treść zawrze w znacznikach akapitu <p>.
Gdy wpiszesz:
* Element 1
* Element 2
* Element 3
Otrzymasz:
- Element 1
- Element 2
- Element 3
Ale oddzielenie elementów pustymi linijkami:
* Element 1
* Element 2
* Element 3
Da efekt w postaci:
Element 1
Element 2
Element 3
Możesz w elementach listy zawrzeć kolejne akapity. Muszą być one otoczone pustymi linijkami oraz zaczynać się czterema spacjami bądź tabulacją.
* Litwo! Ojczyzno moja! ty jesteś jak zdrowie.
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
* Panno Święta, co jasnej bronisz Częstochowy
I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
Litwo! Ojczyzno moja! ty jesteś jak zdrowie. Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie Widzę i opisuję, bo tęsknię po tobie.
Panno Święta, co jasnej bronisz Częstochowy I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
System wstawiania akapitów niesie ze sobą pewne konsekwencje. Niemożliwe jest umieszczenie bezpośrednio pod sobą osobnych list, gdyż zamienione zostają one w jedną:
1. Element 1 2. Element 2 3. Element 3 1. Element 1 2. Element 2 3. Element 3
- Element 1
- Element 2
- Element 3
- Element 1
- Element 2
- Element 3
Sprawa ta nadal dyskutowana jest podczas opracowywania specyfikacji języka Markdown. Jedynym zalecanym rozwiązaniem jest skorzystanie z HTML-owego komentarza
<!-- # -->i wstawienie go między listami, co spowoduje ich rozdzielenie.
Zagnieżdżone listy
Kolejne poziomy zagnieżdżonych list należy poprzedzać spacjami bądź tabulacjami.
Wpisanie:
1. Element 1
- Element 1.1
- Element 1.2
1. Element 1.2.1
- Element 1.3
2. Element 2
* Element 2.1
* Element 2.2
3. Element 3
Da nam:
- Element 1
- Element 1.1
- Element 1.2
- Element 1.2.1
- Element 1.3
- Element 2
- Element 2.1
- Element 2.2
- Element 3
Listy z innymi elementami składni Markdown
W listach można umieścić inne elementy składni Markdown. Tak jak akapity, muszą one być poprzedzone czterema spacjami bądź tabulacją. W przypadku bloku kodu należy pamiętać o tym, że prócz konieczności jego poprzedzenia przez cztery spację lub tabulację, trzeba jeszcze dodać wcięcie listy.
1. Litwo! Ojczyzno moja! ty jesteś jak zdrowie.
Ile cię trzeba cenić, ten tylko się dowie,
przykładowy blok kodu
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
* Element 1
przykładowy blok kodu
* Element 2
Panno Święta, co jasnej bronisz Częstochowy
I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
2. Cośtam dalej.
Litwo! Ojczyzno moja! ty jesteś jak zdrowie. Ile cię trzeba cenić, ten tylko się dowie,
przykładowy blok koduKto cię stracił. Dziś piękność twą w całej ozdobie Widzę i opisuję, bo tęsknię po tobie.
Element 1
przykładowy blok koduElement 2
Panno Święta, co jasnej bronisz Częstochowy I w Ostrej świecisz Bramie! Ty, co gród zamkowy...
Cośtam dalej.
Należy uważać na ilość spacji przed każdym elementem.
Zobacz także:
- 3.4. Składnia pliku
3.4.9. Bloki kodu - 3.4.8. Listy porządkowe
« Poprzedni - 3.4.10. Tabelki
Następny »
3.4.9. Bloki kodu
Parser Markdown udostępnia dwa sposoby wstawiania dużej partii kodu. Pierwszy z nich wymaga, aby przed każdą linią kodu umieścić 4 spacje, bądź jeden znak tabulacji.
To jest jakiś paragraf.
<?php
$fragment = "naszego kodu źródłowego";
if($warunek)
{
skryptu('który piszemy');
}
?>
To jest jakiś następny paragraf.
Drugim sposobem jest wstawienie co najmniej trzech tyld ~ przed i za wstawioną partią kodu.
Ważne jest, aby ilość znaków na początku i na końcu była taka sama.
To jest jakiś paragraf.
~~~
<?php
$fragment = "naszego kodu źródłowego";
skryptu('który piszemy');
?>
~~~
To jest jakiś następny paragraf.
Ta metoda wstawiania kodu nie umożliwia jednak wstawiania nam kodu do ramek informacyjnych lub list wypunktowanych.
Kolorowanie składni
TypeFriendly dodaje nam możliwość włączenia kolorowania składni wstawionego kodu. Obsługiwane jest ono przez GeSHi. Lista obsługiwanych języków dostępna jest na stronie tego parsera.
Włączenie kolorowania składni realizowane jest poprzez wstawienie w pierwszej linijce bloku kodu znacznika: [język]. W nawiasach kwadratowych zawarta jest nazwa języka, której odpowiada plik kolorowania GeSHi znajdujący się w katalogu /vendor/geshi/geshi.
Przykładowe użycie
~~~
[php]
<?php
$fragment = "naszego kodu źródłowego";
skryptu('który piszemy');
?>
~~~
Rezultat
<?php $fragment = "naszego kodu źródłowego"; skryptu('który piszemy'); ?>
Dodatkowym dostępnym "kolorowaniem" jest console, który upodabnia ramkę z kodem do widoku z konsoli systemowej (ciemne tło, biała czcionka).
php typefriendly.php build "./docs/"
Wyłączanie kolorowania
Mogą wystąpić konflikty z pewnymi rodzajami składni, jak choćby w plikach INI. Jednak wystarczy poprzedzić znacznik backslashem
\i kod nie będzie kolorowany:\[grupa] klucz = "pliku ini"Oczywiście tyczy się to tylko pierwszej linijki bloku kodu.
- 3.4. Składnia pliku
3.4.10. Tabelki - 3.4.9. Bloki kodu
« Poprzedni - 3.4.11. Listy definicji
Następny »
3.4.10. Tabelki
Możliwe jest wstawienie do kodu tabelki. Prosta tabelka wygląda w następujący sposób:
Pierwszy nagłówek | Drugi nagłówek
----------------- | -----------------
Zawartość komórki | Zawartość komórki
Zawartość komórki | Zawartość komórki
Pierwszy nagłówek Drugi nagłówek Zawartość komórki Zawartość komórki Zawartość komórki Zawartość komórki
Pierwsza linijka zawiera nagłówki tabelki. Druga, to linie (----) oddzielające nagłówki od kolejnych wierszy tabeli. Kolumny tabeli oddzielane są pionową kreską |.
Opcjonalnie możesz dodać pionowe kreski przed i po każdej linijce tabelki:
| Pierwszy nagłówek | Drugi nagłówek |
| ----------------- | ----------------- |
| Zawartość komórki | Zawartość komórki |
| Zawartość komórki | Zawartość komórki |
Zawartość komórek tabeli może przyjmować jedynie elementy liniowe takie jak: wyróżnienia, linki, obrazki, wstawki kodu.
Wyrównywanie do lewej lub prawej krawędzi
W tabelkach można określić do której strony ma być wyrównany tekst w komórkach danej kolumny. Realizuje się to poprzez dodanie znaku dwukropka : po lewej, prawej bądź obu stronach linii oddzielającej nagłówek od wierszy kolumny. W poniższym przykładzie również optycznie przesunięto spacjami zawartość komórek lecz nie jest to konieczne.
| Nagłówek | Nagłówek | Nagłówek | Nagłówek |
| --------- |:-------- | ---------:|:------------:|
| Domyślne | Do lewej | Do prawej | Oraz |
| położenie | strony | strony | wycentrowane |
Nagłówek Nagłówek Nagłówek Nagłówek Domyślne Do lewej Do prawej Oraz położenie strony strony wycentrowane
Domyślny styl CSS wyjścia (xhtml i xhtml_single) automatycznie centruje dane wpisane do komórek.
- 3.4. Składnia pliku
3.4.11. Listy definicji - 3.4.10. Tabelki
« Poprzedni - 3.4.12. Przypisy
Następny »
3.4.11. Listy definicji
Składnia obsługuje specjalny format list, nazywany listą definicji. Składa się na nią termin i wyjaśnienia, coś podobnego do słownika.
Typowa lista definicji składa się z jednolinijkowego terminu, po którym w nowej linijce znajduje się dwukropek : oraz objaśnienie.
Jabłko
: Owoc drzewa jabłoni, z rodziny różowatych.
Pomarańcza
: Owoc cytrusowy, zwykle o pomarańczowej skórce i włóknistym miąższu.
- Jabłko
- Owoc drzewa jabłoni, z rodziny różowatych.
- Pomarańcza
- Owoc cytrusowy, zwykle o pomarańczowej skórce i włóknistym miąższu.
Listy definicji mogą mieć więcej wyjaśnień do jednego terminu, lub kilka terminów do jednego objaśnienia:
Jabłko
: Owoc drzewa jabłoni, z rodziny różowatych.
: Złocista kula z krzyżem na wierzchu, jedno z insygniów władzy królewskiej i cesarskiej.
Oranż
Pomarańczowy
: Kolor pomiędzy żółcią i czerwienią, pochodzi od koloru owocu pomarańczy.
- Jabłko
- Owoc drzewa jabłoni, z rodziny różowatych.
- Złocista kula z krzyżem na wierzchu, jedno z insygniów władzy królewskiej i cesarskiej.
- Oranż
- Pomarańczowy
- Kolor pomiędzy żółcią i czerwienią, pochodzi od koloru owocu pomarańczy.
Oddzielenie definicji od terminów jedną pustą linijką zawrze je w akapity.
Jabłko
: Owoc drzewa jabłoni, z rodziny różowatych.
Pomarańcza
: Owoc cytrusowy, zwykle o pomarańczowej skórce i włóknistym miąższu.
- Jabłko
Owoc drzewa jabłoni, z rodziny różowatych.
- Pomarańcza
Owoc cytrusowy, zwykle o pomarańczowej skórce i włóknistym miąższu.
Tak jak zwykłe listy porządkowe, listy definicji również mogą zawierać inne elementy blokowe: akapity, listy porządkowe, bloki kodu. Muszą być one poprzedzone czterema spacjami bądź tabulacją.
Termin 1
: To jest definicja z dwoma akapitami. Lorem ipsum
dolor sit amet, consectetuer adipiscing elit. Aliquam
hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet
vitae, risus.
: Druga definicja dla terminu 1., również w akapicie, gdyż
poprzedzona jest pustą linijką.
Termin 2
: Ta definicja posiada blok kodu i listę wypunktowaną.
jakiś kod
1. element pierwszy
2. element drugi
- Termin 1
To jest definicja z dwoma akapitami. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
Druga definicja dla terminu 1., również w akapicie, gdyż poprzedzona jest pustą linijką.
- Termin 2
Ta definicja posiada blok kodu i listę wypunktowaną.
jakiś kod
- element pierwszy
- element drugi
Należy uważać na ilość spacji przed każdym elementem.
- 3.4. Składnia pliku
3.4.12. Przypisy - 3.4.11. Listy definicji
« Poprzedni - 3.4.13. Bloki cytatu i ramki informacyjne
Następny »
3.4.12. Przypisy
Przypisy działają w podobny sposób do referencji odnośników. Na przypis składają się dwie rzeczy: odnośnik w tekście, którzy otrzyma indeks górny oraz objaśnienie przypisu, które wyląduje na końcu dokumentu.
To jest trochę tekstu z przypisem[^1].
[^1]: I to jest przypis.
To jest trochę tekstu z przypisem1.
Objaśnienia przypisów mogą znaleźć się w dowolnym miejscu w dokumencie, ale i tak będą wyświetlone na końcu dokumentu w kolejności dodania odnośników.
Nie da się stworzyć dwóch odnośników do jednego przypisu. Jeśli to zrobisz, kolejne odnośniki nie będą po prostu zamieniane.
Każdy przypis musi mieć unikalną nazwę, którą nie musi być wcale liczba - może być to też etykieta tekstowa.
Nazwa odnośnika służy tylko do adresów i nie ma wpływu na numerację przypisów w tekście.
Nazwa odnośnika musi być prawidłową nazwą atrybutów ID w HTML-u.
TypeFriendly do nazw odnośników dodaje identyfikator rozdziału.
Przypisy również mogą zawierać elementy blokowe, co oznacza, że mogą zawierać akapity, listy, bloki kodu itd. Wystarczy poprzedzić je czterema spacjami bądź tabulacją.
To jest trochę tekstu z przypisem[^1].
[^1]: I to jest przypis.
A to jest kolejny akapit.
Dla celów estetycznych, pierwszą linijkę przypisu można pozostawić pustą:
To jest trochę tekstu z przypisem[^1].
[^1]:
I to jest przypis.
A to jest kolejny akapit.
-
I to jest przypis. ↩
- 3.4. Składnia pliku
3.4.13. Bloki cytatu i ramki informacyjne - 3.4.12. Przypisy
« Poprzedni - 3.4.14. Wstawki HTML
Następny »
3.4.13. Bloki cytatu i ramki informacyjne
Bloki cytatu ze specyfikacji składni Markdown mają trochę inne znaczenie, od tych, które wprowadzone zostały w TypeFriendly. Przyjrzyjmy się jednak najpierw, jak one wyglądają.
Jeżeli korzystałeś trochę z tekstowych maili, musiałeś spotkać się z cytowaniem treści poprzednich maili przy użyciu nawiasu kierunkowego > przed każdą linijką. W taki sam sposób robi się do w Markdownie.
> To jest cytat z dwoma akapitami. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.
To jest cytat z dwoma akapitami. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
Oczywiście, nie musisz ręcznie łamać każdej linjki:
> To jest cytat z dwoma akapitami. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
Ten "leniwy" sposób wstawiania cytatów uniemożliwia proste oddzielenie dwóch osobnych cytatów od siebie, gdyż niezależnie od ilości pustych linijek pomiędzy blokami, zostaną one połączone w jeden. Sprawa cały czas jest dyskutowana podczas opracowywania specyfikacji języka i - póki co - zalecanym rozwiązaniem jest skorzystanie z HTML-owego komentarza
<!-- # -->pomiędzy blokami.
Bloki można zagnieżdżać w sobie, dodając kolejne nawiasy >:
> To jest pierwszy poziom cytatu.
>
> > A to zagnieżdżony cytat.
>
> I tu wracamy do pierwszego poziomu.
To jest pierwszy poziom cytatu.
A to zagnieżdżony cytat.
I tu wracamy do pierwszego poziomu.
Bloki cytatu mogą zawierać również inne elementy składni Markdown, jak nagłówki, listy, bloki kodu itd.
> ### To jest nagłówek ###
>
> 1. To jest pierwszy element listy.
> 2. A to drugi element.
>
> Przykład kodu źródłowego:
>
> return shell_exec("echo $input | $markdown_script");
Należy uważać na ilość spacji przed każdym elementem.
Ramki informacyjne
Ramki informacyjne już wielokrotnie spotkałeś w tej dokumentacji. (- Tak, te jasnożółte pola z ikonką po lewej stronie.) Możesz tam zawrzeć przeróżne informacje, ważne lub konieczne do przekazania dla czytelnika dokumentacji.
Ramki te korzystają ze składni bloków cytatu. Różnią się tylko tym, że w pierwszej linijce znajduje się specjalny znacznik, podobny do do tych z kolorowania składni bloków kodu: [rodzaj]. Przykładowa ramka informacyjna może wyglądać tak:
> [information]
> ### Informacja ###
>
> To jest jakaś ważna informacja dla czytelnika dokumentacji.
Informacja
To jest jakaś ważna informacja dla czytelnika dokumentacji.
Rodzaje ramek informacyjnych
[error]
[help]
[important]
[information]
[steps]
[stop]
[warning]
Wyłączanie ramek
Jeśli z jakichś powodów potrzebujesz wstawić w pierwszej linijce tekst, który wygląda jak znacznik ramki, wystarczy poprzedzić go backslashem
\.> \[important]Oczywiście tyczy się to tylko pierwszej linijki bloku cytatu.
- 3.4. Składnia pliku
3.4.14. Wstawki HTML - 3.4.13. Bloki cytatu i ramki informacyjne
« Poprzedni - 3.4.15. Zaawansowane użycie
Następny »
3.4.14. Wstawki HTML
Jeśli składnia Markdowna nie wystarcza do osiągnięcia zamierzonego efektu, można bez problemu korzystać ze znaczników HTML, bezpośrednio w tekście. Nie trzeba stosować żadnej specjalnej składni, przełączników - po prostu używasz znaczników.
Jedynym ograniczeniem jest to, że HTML-owe znaczniki blokowe - takie jak: <div>, <table>, <pre>, <p> itd. - muszą być oddzielone pustą linijką od pozostałego tekstu i muszą zaczynać się bezpośrednio od krawędzi - nie mogą być poprzedzone tabulacjami lub spacjami. Parser jest na tyle sprytny, że nie otoczy wtedy HTML-a znacznikami akapitu.
Jeśli np. potrzeba było wstawić bardziej rozbudowaną tabelkę można po prostu napisać:
To jest normalny akapit
<table>
<tr>
<td>Coś</td>
</tr>
</table>
To jest kolejny normalny akapit.
W takim jednak przypadku, składnia Markdown nie jest w znacznikach parsowana. Trzeba więc używać np. <strong> zamiast **wyróżnienia**.
Znaczniki liniowe - jak: <span>, <del>, <sup> - mogą być użyte gdziekolwiek w akapitach, listach, nagłówkach. Ba, możesz normalnie zamienić znacznikami HTML składnię Markdown, np. jeśli wolisz używać znaczników <a> lub <img> zamiast odnośników i obrazków.
W znacznikach liniowych - w przeciwieństwie do blokowych - składnia Markdown jest parsowana.
Formatowanie Markdown w elementach blokowych
Oryginalna składnia Markdown wyklucza parsowanie składni w HTML-owych znacznikach blokowych. Została jednak rozszerzona o możliwość opcjonalnego włączenia tego parsowania poprzez dopisanie do znacznika atrybutu markdown o wartości 1, co daje markdown="1":
<div markdown="1">
To jest *prawdziwy* tekst Markdownowy.
</div>
Co wygeneruje:
<div>
<p>To jest <em>prawdziwy</em> tekst Markdownowy.</p>
</div>
Parser jest bardzo sprytny i prawidłowo zachowuje się do różnych znaczników. Jeśli np. włączysz formatowanie dla znaczników <p>, spowoduje to sformatowanie jedynie elementów liniowych, nie dopuszczając list, bloków cytatu itd.
Są jednak sytuacje, gdy jest to niejednoznaczne. Spójrzmy na przykład:
<table>
<tr>
<td markdown="1">To jest *prawdziwy* tekst Markdownowy.</td>
</tr>
</table>
Komórka tabeli może przyjmować i elementy liniowe, i elementy blokowe. W takich jak ta sytuacjach Markdown zawsze włącza parsowanie jedynie elementów liniowych. Gdy potrzebujesz włączyć składnię blokową, zmień wartość atrybutu na markdown="block".
- 3.4. Składnia pliku
3.4.15. Zaawansowane użycie - 3.4.14. Wstawki HTML
« Poprzedni - 3.5. Tagi plików
Następny »
3.4.15. Zaawansowane użycie
W Markdownie bezwzględnie należy przestrzegać ilości spacji, których używamy do formatowania rozbudowanych, zagnieżdżonych elementów blokowych, jak powyższa listy wypunktowania z blokami kodu, czy ramki.
Jeśli nadal masz problemy z prawidłowym sformatowaniem jakiegoś fragmentu tekstu, upewnij się, czy wstawiłeś odpowiednią liczbę spacji, czy dałeś przejścia do nowej linii.
Dobrą wprawką jest również kod źródłowy tej dokumentacji.
Rozdzielanie list, bloków cytatu i kodu
Może zdarzyć się sytuacja, gdy chcemy mieć np. dwie osobne listy porządkowe albo dwa przykłady kodu źródłowego bezpośrednio pod sobą. Praser Markdown połączy jednak je jednak, co wynika ze specyfikacji. Nie zostało jeszcze opracowane "ładne" rozwiązanie tego problemu i zaleca się stosowanie HTML-owego komentarza, np. w postaci <!-- # --> (taką stosujemy w naszej dokumentacji). Oczywiście może to być dowolny inny, prawidłowy komentarz.
1. Element 1
2. Element 2
3. Element 3
<!-- # -->
1. Element 1
2. Element 2
3. Element 3
> cytat
<!-- # -->
> cytat
- Element 1
- Element 2
- Element 3
- Element 1
- Element 2
- Element 3
cytat
cytat
Wyłączanie formatowania
Jeśli w jakiejś sytuacji nie chcemy, aby wpisane znaki zamieniane były przez parser Markdown, można je escape'ować w powszechny w językach programowania sposób, przy użyciu backslasha \. Poniżej przedstawiamy kilka przykładów:
To jest nasz paragraf \[ a w nim \]() znaczniki odnośników, które nie zostaną sparsowane.
~~~
\[sekcja]
pliku = "ini"
; również nie zostanie pokolorowana
~~~
1410\. - to rok bitwy pod Grunwaldem, a nie początek listy numerowanej.
\> również nam nie zacznie cytatu
To jest nasz paragraf [ a w nim ]() znaczniki odnośników, które nie zostaną sparsowane.
[sekcja] pliku = "ini" ; również nie zostanie pokolorowana1410. - to rok bitwy pod Grunwaldem, a nie początek listy numerowanej.
> również nam nie zacznie cytatu
Oczywiście, backslashe są wtedy usuwane z tekstu wyjściowego.
Lista znaków, które można escape'ować:
\ backslash
` odwrócony apostrof
* gwiazdka
_ podkreślenie
{} nawiasy klamrowe
[] nawiasy kwadratowe
() nawiasy zwykłe
> nawias kierunkowy w prawo
# hash
+ plus
- minus (pauza)
. kropka
! wykrzyknik
~ tylda
: dwukropek
| kreska
3.5. Tagi plików
W rozdziale tym opisane są wszystkie dostępne tagi, jakich można używać w plikach rozdziałów. Większość z nich przyjmuje wartość tekstową, lecz niektóre mogą także obsługiwać zespół wartości (tablicę), którą podajemy w następujący sposób:
NazwaTagu:
- Wartość 1
- Wartość 2
- Wartość 3
Pola podstawowe
- Title
- pełny tytuł danego rozdziału
- ShortTitle
-
Alternatywna wersja tytułu, wbrew nazwie wcale nie musi być krótsza. Tag ten przez TypeFriendly używany jest w następujących sytuacjach:
- W tytule dokumentu i "okruchach chleba" (breadcrumbs),
- W tagach: SeeAlso, Extends, Implements, ExtendedBy, ImplementedBy, Throws, MultiExtends i Arguments,
- Jako HTML-owy atrybut "title" w odnośnikach do innych rozdziałów.
Jeżeli ShortTitle nie jest ustawiony, brana jest wartość z Title.
- SeeAlso
- tablica identyfikatorów rozdziałów na potrzeby rubryki "Zobacz także".
- SeeAlsoExternal
- jak wyżej, lecz umożliwia podanie zewnętrznych odnośników. Po spacji można wpisać tekst odnośnika
- Author
- autor dokumentu
Przykład:
Title: Funkcja foo()
ShortTitle: foo()
SeeAlso:
- reference.functions.bar
SeeAlsoExternal:
- http://www.example.com/ Przykładowa strona
Status dokumentu
- Status
- wyświetla pole
Statusw dokumencie wynikowym wraz z towarzyszącą treścią, które można wykorzystać do różnych celów. - FeatureInformation
- dokleja na początek rozdziału szablon treści. Więcej o szablonach treści możesz dowiedzieć się z tego rozdziału. Znajdziesz tam także przykład użycia tego tagu.
Opis interfejsu programistycznego
Poniższe tagi są użyteczne w tworzeniu opisów interfejsów programowania aplikacji (ang. API) zawierających klasy, funkcje, interfejsy itd.
- Construct
- konstrukcja programistyczna opisywana przez rozdział. Możesz wpisać tutaj zarówno swoją własną nazwę, jak i jedną z predefiniowanych przez TypeFriendly (wykaz znajduje się niżej). W tym drugim przypadku, TF automatycznie przetłumaczy ich nazwy na wybrany język dokumentacji i sprawdzi możliwość stosowania pozostałych tagów.
- Użycie tego tagu nie jest obowiązkowe. Jeśli nie dodasz go do rozdziału, TypeFriendly nie będzie wykonywać żadnych dodatkowych czynności związanych z użytymi tagami.
- Type
- typ elementu (może być użyty w różnych celach)
- Visibility
- widoczność/dostęp do elementu (np. public, private)
- Namespace
- pozwala określić przestrzeń nazw elementu.
- wymaga podania identyfikatora rozdziału opisującego podaną przestrzeń nazw.
ENamespacewymaga podania nazwy przestrzeni nazw w sytuacji, gdy nasza dokumentacja jej nie opisuje.- Extends
- bazowa klasa.
- tag nie może być używany jednocześnie z
MultiExtendsw tym samym rozdziale. - wymaga podania identyfikatora rozdziału, który opisuje klasę bazową.
EExtendswymaga podania nazwy klasy bazowej w sytuacji, gdy nasza dokumentacja jej nie opisuje.- MultiExtends
- bazowe klasy dla języków wspierających wielokrotne dziedziczenie.
- tag nie może być używany jednocześnie z
Extendsw tym samym rozdziale. - wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne klasy bazowe.
EMultiExtendswymaga podania listy z nazwami klas bazowych, gdy nie obejmuje ich nasza dokumentacja.- Implements
- zaimplementowane interfejsy dla języków, które obsługują tę opcję.
- wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne interfejsy.
EImplementswymaga podania listy z nazwami interfejsów, gdy nie obejmuje ich nasza dokumentacja.- ExtendedBy
- klasy/interfejsy rozszerzające aktualną.
- wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne klasy.
EExtendedBywymaga podania listy z nazwami klas, gdy nie obejmuje ich nasza dokumentacja.- ImplementedBy
- klasy implementujące podany interfejs.
- wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne klasy.
EImplementedBywymaga podania listy z nazwami klas, gdy nie obejmuje ich nasza dokumentacja.- Mixins
- lista domieszek (ang. mixin) używanych w klasie.
- wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne domieszki.
EMixinswymaga podania listy z nazwami domieszek, gdy nie obejmuje ich nasza dokumentacja.- Traits
- lista cech (ang. trait) używanych w klasie.
- wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne cechy.
ETraitswymaga podania listy z nazwami cech, gdy nie obejmuje ich nasza dokumentacja.- Throws
- rzucane wyjątki.
- wymaga podania listy identyfikatorów rozdziałów opisujących poszczególne klasy wyjątków.
EThrowswymaga podania listy z nazwami klas wyjątków, gdy nie obejmuje ich nasza dokumentacja.- PartOf
- używany z konstrukcją
internal classdo określenia klasy zawierającej podaną klasę wewnętrzną. - wymaga podania identyfikatora rozdziału opisującego daną klasę.
EPartOfwymaga podania nazwy klasy, gdy nie obejmuje jej nasza dokumentacja.- Reference
- prototyp funkcji, np.
void foo(int a, int b [, int c]) - Arguments
- lista argumentów funkcji/metody
- spodziewany format pojedynczego argumentu:
Name: nazwa_arg | Type: rozdzial.typu.argumentu | EType: nazwa_typu_argumentu | Desc: opis - tagi
TypeorazETypesą opcjonalne, jeśli jednak decydujesz się na ich użycie, muszą być zastosowane we wszystkich wymienionych argumentach. - Returns
- opis tego, co funkcja zwraca.
- File
- plik zawierający omawiany element.
- Files
- lista nazw plików
- odmiana tagu
Filepozwalająca wymienić kilka plików. - Package
- pakiet zawierający klasę
- wymaga podania identyfikatora rozdziału opisującego dany pakiet.
EPackagewymaga podania nazwy pakietu.- TimeComplexity
- pozwala podać złożoność czasową algorytmu lub funkcji.
- MemoryComplexity
- pozwala podać złożoność pamięciową algorytmu lub funkcji.
Przykładowe użycie:
Title: Class "foo"
Construct: class
Extends: reference.bar
Implements:
- reference.foo-interface
- reference.bar-interface
ExtendedBy:
- reference.joe
Jak widać, tagi wymagają domyślnie podania identyfikatorów rozdziałów opisujących wybraną opcję. Jeśli jednak pochodzi ona z jakiejś zewnętrznej biblioteki i nie jest ujęta w naszej dokumentacji, możemy utworzyć dodatkowe tagi z nazwą poprzedzoną dużą literą E do ich wymienienia:
Title: Klasa "foo"
EExtends: PDO
Implements:
- reference.my-interface
EImplements:
- Countable
- IteratorAggregate
Obie wersje tagów mogą być użyte jednocześnie w obrębie tego samego rozdziału.
Dostępne konstrukcje programistyczne rozpoznawane przez tag Construct:
class- klasainterface- interfejsabstract class- klasa abstrakcyjnafinal class- klasa finalnaexception class- klasa wyjątkuinternal class- zagnieżdżona klasa wewnętrznafunction- funkcjamethod- metodastatic method- metoda statycznaabstract method- metoda abstrakcyjnaaccessor method- metoda dostępowa (np.setSomething(),getSomething()).final method- metoda finalnafinal static method- finalna metoda statycznafinal accessor method- finalna metoda dostępowaoptional method- pusta metoda, która może być opcjonalnie rozszerzona przez programistęconstructor- konstruktor klasydestructor- destruktor klasymagic method- magiczna metoda (np.__call()w PHP)operator- przeciążony operatorvariable- zmiennastatic variable- zmienna statycznamodule- modułpackage- pakietnamespace- przestrzeń nazwdatatype- typ danychstructure- struktura (w stylu C lub C++)macro- makrodefinicjamixin- domieszkatrait- cechaexecutable- plik wykonywalnyscript- skrypt
Tagi opisujące zachowanie
Pozwalają na udokumentowanie spodziewanego zachowania elementu poprzez zdefiniowanie efektów ubocznych, warunków początkowych, końcowych, ograniczeń itd.
- StartConditions
- lista warunków początkowych opisanych słownie.
- EndConditions
- lista warunków końcowych opisanych słownie.
- SideEffects
- lista efektów ubocznych opisanych słownie.
- Limitations
- lista ograniczeń opisanych słownie.
- DataSources
- lista źródeł danych wykorzystywanych przez element.
- wymagana lista identyfikatorów rozdziałów opisujących wybrane źródła danych.
EDataSourceswymaga listy źródeł danych opisanych słownie w sytuacji, gdy nie opisuje ich nasza dokumentacja.
Przykładowe użycie:
Title: Pobranie listy elementów
StartConditions:
- istnieje co najmniej jeden element
SideEffects:
- zwiększenie ilości wyświetleń elementów o 1
EDataSources:
- tabela "Elementy"
----
Opis...
Tagi kontroli wersji
Informacje o wersjach oraz z systemów kontroli wersji.
- VCSKeywords
- miejsce, gdzie system kontroli wersji może rozwijać swoje słowa kluczowe. Są one uwzględniane w dokumencie wynikowym, gdy włączymy opcję
versionControlInfow konfiguracji projektu. - VersionSince
- pierwsza wersja, która zawiera opisywaną opcję.
- VersionTo
- ostatnia wersja, która zawiera opisywaną opcję.
Przykładowe użycie:
Title: Przykładowa strona
VCSKeywords: $Id$
VersionSince: 1.0.2
VersionTo: 1.4.6
Teraz systemy kontroli wersji takie, jak Subversion, mogą rozwijać swoje słowa kluczowe w nagłówku, a ponadto mamy możliwość ich uwzględnienia przy generowaniu dokumentów wynikowych.
Typy rozdziałów
Poniższe tagi pomagają TypeFriendly identyfikować rodzaje poszczególnych rozdziałów.
- Appendix
- akceptuje wartość logiczną (true, false, yes, no). Oznacza dany rozdział jako "Dodatek", co powoduje, że otrzymuje on zamiast tradycyjnej numeracji kolejną literę alfabetu zgodnie z ustawieniami kolejności TypeFriendly. Ponadto tytuł rozdziału zostaje poprzedzony słowem "Dodatek".
- 3. Tworzenie własnej publikacji
3.6. Szablony - 3.5. Tagi plików
« Poprzedni - 4. TypeFriendly
Następny »
3.6. Szablony
TypeFriendly 0.1.2 wprowadza pojęcie szablonów treści. Szablony takie są dodatkowymi plikami tekstowymi z fragmentami tekstu sformatowanego w Markdownie, które mogą zostać doklejone do dowolnego rozdziału. Mogą być stosowane do zapisania w jednym miejscu często wykorzystywanych stałych fragmentów tekstu (np. ostrzeżeń), które można później łatwo modyfikować bez konieczności poprawiania ich z osobna w każdym rozdziale.
Szablony są przechowywane w katalogu /input/JEZYK/templates/ jako zwykłe pliki tekstowe o nazwie identyfikatorSzablonu.txt. Nie zawierają żadnego nagłówka, a jedynie czysty tekst sformatowany Markdownem. Przyjrzyjmy się, jak to działa w praktyce i utwórzmy szablon experimental.txt:
> [warning]
> Ta funkcjonalność ma status eksperymentalny i szczegóły jej działania mogą w przyszłości ulec zmianie.
Następnie możemy dokleić ten szablon do dowolnego rozdziału przy pomocy tagu FeatureInformation:
Title: Przykładowy rozdział
FeatureInformation: experimental
---
Jakiś tekst
TypeFriendly wyprodukuje wtedy następujący rezultat:
Przykładowy rozdział
Ta funkcjonalność ma status eksperymentalny i szczegóły jej działania mogą w przyszłości ulec zmianie.
Jakiś tekst
Obecnie wspierana funkcjonalność
Na dzień dzisiejszy, szablony treści mogą być doklejane wyłącznie do początku rozdziału przy pomocy tagu FeatureInformation. Przekazywanie argumentów do szablonów nie jest obsługiwane.
Przyszłe rozszerzenia
W następnych wersjach implementacja szablonów treści zostanie wzbogacona o możliwość umieszczania szablonów w dowolnym miejscu rozdziału oraz przekazywania dodatkowych argumentów. Znacznie poszerzy to zakres ich stosowania. Dokładna data wprowadzenia tych planów w życie zależy od czasu potrzebnego na odpowiednią rozbudowę parsera Markdown używanego w TypeFriendly.
Zobacz także:
- Spis treści
4. TypeFriendly - 3.6. Szablony
« Poprzedni - 4.1. Interfejs wiersza poleceń
Następny »
4. TypeFriendly
W tym rozdziale opisane zostały różne aspekty samego TypeFriendly.
- 4. TypeFriendly
4.1. Interfejs wiersza poleceń - 4. TypeFriendly
« Poprzedni - 4.2. Interfejs wyjścia
Następny »
4.1. Interfejs wiersza poleceń
TypeFriendly jest obsługiwany wyłącznie z wiersza poleceń systemu operacyjnego. Współpracuje zarówno z rozmaitymi odmianami Uniksa, jak i z systemem Windows. Wywołanie jest następujące:
# Windows oraz systemy uniksowe
php typefriendly.php
# Systemy uniksowe (od wersji TF 0.1.2)
./typefriendly
TypeFriendly 0.1.0 i 0.1.1
Niezbędnym parametrem jest zawsze ścieżka do katalogu, w którym znajduje się dokumentacja (tj. zawierającego plik settings.ini i inne), np.
php typefriendly.php "./docs/"
Dostępne są następujące opcje, które podajemy w kolejności alfabetycznej przed ścieżką:
-c JĘZYK- narzędzie dla dokumentacji wielojęzycznych. Porównuje czas modyfikacji plików źródłowych podanego języka z plikami języka bazowego. Wyświetla wszystkie pliki, które mają wersję bazową nowszą, niż tę w danym języku, a także różnice w rodzaju brakujących plików.
-l JĘZYK- generuje dokumentację w podanym języku (domyślnie wybierany jest język bazowy).
-o WYJSCIE- generuje dokumentację, korzystając jedynie z podanego wyjścia. Musi ono być zdefiniowane na liście dostępnych wyjść dokumentacji.
Przykład:
php typefriendly.php "./docs/" -l en -o xhtml
Aby wyświetlić informacje o TypeFriendly, należy wywołać skrypt bez żadnych parametrów.
TypeFriendly 0.1.2 i nowsze
W TypeFriendly 0.1.2 interfejs linii komend został ulepszony, a jego użycie zmienione. Jako pierwszy argument podajemy zawsze akcję, którą chcemy wykonać. Następnie podajemy ścieżkę do dokumentacji i na końcu ewentualne opcje.
Dostępne komendy:
create - zakłada w podanym (pustym) katalogu nową dokumentację na podstawie szablonu. TypeFriendly zadaje cztery pytania, a odpowiedzi używa do wygenerowania pliku konfiguracyjnego. Użycie
./typefriendly create "/sciezka/do/dokumentacji"build - tworzy wynikowy dokument z plików źródłowych. Dostępne opcje to
-l(język) oraz-o(system wyjścia). Użycie:./typefriendly build "/sciezka/do/dokumentacji" -l pl -o xhtmlcompare - porównuje tłumaczenie dokumentacji z wersją oryginalną. Komenda wymaga podania opcji
-ldo wybrania tłumaczenia../typefriendly compare "/path/to/directory" -l enversion - wyświetla wersję TypeFriendly.
./typefriendly version
- 4. TypeFriendly
4.2. Interfejs wyjścia - 4.1. Interfejs wiersza poleceń
« Poprzedni - 4.3. Dokumentacja wielojęzyczna
Następny »
4.2. Interfejs wyjścia
TypeFriendly pozwala łatwo tworzyć własne systemy wyjścia, które będą mogły być później użyte do generowania dokumentacji. Do ich tworzenia wymagana jest pewna znajomość języka PHP.
Zasada parsowania
TypeFriendly rozpoczyna działanie od utworzenia obiektu projektu, za pomocą którego możliwe są wszelkie manipulacje na dokumentacji. Odczytywana jest konfiguracja, a następnie wszystkie rozdziały są przetwarzane i układane w odpowiedniej kolejności. Na końcu skrypt ładuje wszystkie wyjścia, które będa wykorzystywane i nakazuje każdemu z nich przetwarzać wstępnie obrobione wyniki.
Każde wyjście zapisane jest w niezależnym pliku PHP w katalogu outputs/. Ma postać klasy o takiej samej nazwie, jak nazwa pliku (z pominięciem rozszerzenia) i musi rozszerzać klasę standardOutput definiującą trzy metody opisane niżej. Zadaniem wyjścia jest opakowanie meta-danych w kod HTML lub inny bazujący na nim format. Niestety, obecnie wykorzystywany parser Markdown nie potrafi generować kodu wynikowego w niczym innym, stąd póki co niemożliwe jest napisanie wyjścia np. do formatu LaTeX. Prace nad umożliwieniem tego zostaną podjęte w niedalekiej przyszłości.
Wyjście samo musi dbać o zapisanie wyniku do odpowiednich plików - TypeFriendly nie narzuca tu żadnych ograniczeń i jedynie przekazuje katalog, w którym wszystko ma się znaleźć. Do dyspozycji programisty jest kilka interfejsów skryptu.
API
standardOutput
Jest to klasa abstrakcyjna, którą musi rozszerzać i implementować klasa wyjścia. Zawiera metody:
init($project, $path)- wywoływana przed rozpoczęciem przetwarzania podstron. Jako parametry dostaje obiekt projektu oraz ścieżkę, do której należy zapisać pliki wynikowe.generate($page)- wywoływana dla każdego rozdziału. Wyjście dostaje tablicę$pageze wszystkimi meta-danymi dotyczącymi rozdziału. Indeksy odpowiadają nazwom użytych tagów w pliku. Dodatkowe tagi opisane są niżej.close()- wywoływana na zakończenie przetwarzania danego wyjścia.
Dodatkowe tagi w meta-danych rozdziału
Id- identyfikator rozdziałuContent- przetworzona treść rozdziałuNext- identyfikator następnej strony dokumentacji lub NULLPrev- identyfikator poprzedniej strony dokumentacji lub NULLParent- identyfikator rozdziału nadrzędnego lub NULL
tfTranslate
Obiekt tej klasy służy do tłumaczenia interfejsu dokumentacji na różne języki.
tfTranslate::get()- zwraca obiekt interfejsu tłumaczeń._($group, $id, ...)- pobiera tekst w danym języku o identyfikatorze$idw grupie$group. Opcjonalnie można podać więcej argumentów, które zostaną umieszczone w komunikacie, o ile zawiera on odpowiednie do tego celu pola.
tfProject
Obiekt projektu.
$fs- obiekt klasytfFilesystemobrazujący katalog projektu.$tree- publiczna struktura opisująca drzewo. Jako indeks podajemy identyfikator żądanego rozdziału i otrzymujemy tablicę z pełnymi danymi wszystkich zawartych w nim podstron.getMetaInfo($name[, $exception = true])- zwraca wszystkie meta-informacje dotyczące rozdziału o nazwie$name. Domyślnie w przypadku nieznalezienia generowany jest wyjątek. Jeżeli ostatni argument ustawiony jest na false, wtedy w przypadku braku zwracana jest wartość NULL.
tfFilesystem
Klasa reprezentująca system plików w obrębie podanego katalogu. Umożliwia szybką i prostą manipulację plikami oraz katalogami. W opisie przez ''system plików'' będziemy rozumieć folder, na który został ustawiony obiekt tej klasy i w obrębie którego możemy dokonywać manipulacji.
get($name)- zwraca rzeczywistą ścieżkę do podanego pliku w systemie plików. W razie nieznalezienia generowany jest wyjątekSystemException.read($name)- zwraca zawartość podanego pliku w systemie plików. W razie nieznalezienia generowany jest wyjątek.readAsArray($name)- jw. lecz zwraca tablicę z poszczególnymi linijkami pliku pozbawionymi końcowych białych znaków.write($name, $content)- zapisuje podaną zawartość do podanego pliku w obrębie systemu plików.
- 4. TypeFriendly
4.3. Dokumentacja wielojęzyczna - 4.2. Interfejs wyjścia
« Poprzedni - 5. Dodatki
Następny »
4.3. Dokumentacja wielojęzyczna
W tym rozdziale opiszemy wszystkie aspekty tworzenia dokumentacji wielojęzycznych.
Model wielojęzyczny TypeFriendly zakłada, że w dokumentacji wyróżnimy jeden z języków (tzw. język bazowy), w którym tworzymy oryginalną treść, z której robione są później tłumaczenia do języków pochodnych. Język bazowy wybieramy w konfiguracji projektu, ustawiając opcję baseLanguage. Każdy z języków identyfikowany jest za pomocą dwuliterowego kodu, np. en, de, pl.
Tłumaczenie rozdziałów
Aby utworzyć tłumaczenie naszej publikacji, tworzymy nowy folder wewnątrz /input dla nowego języka. Jako jego nazwę wybieramy dwuliterowy symbol języka. Następnie po prostu zapisujemy tam przetłumaczone wersje oryginalnych rozdziałów. Tłumaczenie musi posiadać identyczną strukturę, jak oryginał i nie jest dozwolone dodawanie do niego dodatkowych rozdziałów (zostaną wtedy zignorowane). Poniżej znajdziesz poprawną strukturę tłumaczenia:
/input/pl/ (główny język publikacji)
preface.txt
chapter1.txt
chapter1.subchapter1.txt
chapter1.subchapter2.txt
chapter2.txt
chapter2.subchapter1.txt
chapter2.subchapter2.txt
/input/de/ (tłumaczenie na niemiecki)
preface.txt
chapter1.txt
chapter1.subchapter1.txt
chapter1.subchapter2.txt
chapter2.txt
chapter2.subchapter1.txt
chapter2.subchapter2.txt
Identyfikatory rozdziałów we wszystkich tłumaczeniach muszą być identyczne, jak w oryginale. Nie ma możliwości ich przetłumaczenia.
Nie musisz tłumaczyć wszystkich rozdziałów naraz. Jeśli TypeFriendly zauważy, że jakiegoś pliku brakuje w tłumaczeniu, wykorzystuje w jego miejscu treść z oryginalnej wersji językowej. Poniżej możesz zobaczyć przykład takiego niedokończonego tłumaczenia na język francuski:
/input/fr/
preface.txt
chapter1.txt
chapter1.subchapter1.txt
chapter2.txt
W tym przykładzie, treść rozdziałów chapter1.subchapter2.txt, chapter2.subchapter1.txt oraz chapter2.subchapter2.txt jest zaczerpnięta z oryginalnej wersji, tj. z /input/pl/. Umożliwia to osobom odpowiedzialnym za główną wersję dodawanie nowych rozdziałów, dzięki czemu są one od razu widoczne także w innych wersjach językowych, zaś opiekunowie poszczególnych wersji mogą dodać odpowiednie tłumaczenia później.
Tłumaczenie plików graficznych
Każda wersja językowa posiada swój własny katalog /media z własnymi grafikami itd. Podobnie jak w przypadku rozdziałów, TypeFriendly uzupełnia brakujące pliki graficzne w tłumaczeniach plikami z podstawowej wersji językowej.
Tłumaczenie szablonów treści
Każda wersja językowa posiada swój własny katalog /templates z szablonami treści. Podobnie jak w przypadku rozdziałów, TypeFriendly uzupełnia brakujące szablony w tłumaczeniach plikami z podstawowej wersji językowej.
Tłumaczenie interfejsu publikacji
TypeFriendly tłumaczy również interfejs nawigacyjny samej publikacji, tj. komunikaty takie jak "Spis treści". Konkretne teksty przypisane do komunikatów zdefiniowane są w plikach w obrębie katalogu globalnego /languages. Podkatalogi reprezentują różne wersje językowe, dla których aktualnie dostępne są tłumaczenia. Każdy komunikat jest częścią jakiejś grupy i posiada swój unikalny identyfikator ułatwiający znalezienie go. Każda grupa zapisana jest w osobnym pliku o składni plików INI:
; komentarz identyfikator1 = "Tekst 1" identyfikator2 = "Tekst 2" identyfikator3 = "Tekst 3" ; itd.
Aby przetłumaczyć interfejs publikacji, utwórz nowy folder wewnątrz /languages, wykorzystując ten sam dwuliterowy kod języka. Następnie skopiuj pliki grup z innego języka i rozpocznij podmianę tekstów. Pamiętaj - jeśli jakiś komunikat nie jest dostępny w danej wersji językowej, TypeFriendly próbuje załadować go z plików podstawowego języka publikacji. Jeśli i tam go nie ma, generowany jest wyjątek.
Na dzień dzisiejszy, TypeFriendly posiada tłumaczenia interfejsu do trzech języków:
- angielskiego
- polskiego
- słowackiego
Jeśli stworzyłeś nowe tłumaczenie, bylibyśmy bardzo wdzięczni, gdybyś opublikował je w Internecie i podesłał, aby można było włączyć je do oficjalnej dystrybucji TypeFriendly tak, aby i inni mogli z niego korzystać.
- Spis treści
5. Dodatki - 4.3. Dokumentacja wielojęzyczna
« Poprzedni - A. Rozwój i wsparcie
Następny »
5. Dodatki
Dodatkowe informacje dotyczące TypeFriendly.
- 5. Dodatki
A. Rozwój i wsparcie - 5. Dodatki
« Poprzedni - B. Licencja i autorzy
Następny »
Dodatek A. Rozwój i wsparcie
Wsparcie dotyczące TypeFriendly znajdziesz na forum dyskusyjnym grupy Invenzzia zarówno w języku polskim, jak i w angielskim. Zachęcamy do nadsyłania uwag i nowych pomysłów. Jeśli znalazłeś jakiś błąd, odwiedź nasz bugtracker - pamiętaj, że błędy dodajemy wyłącznie w języku angielskim!!!
Wersje robocze są do pobrania z repozytorium Subversion. Repozytorium TypeFriendly jest publicznie dostępne do odczytu pod adresem http://svn.invenzzia.org/svn/typefriendly (jest to adres, którego należy użyć w poleceniu ''checkout''). Możesz także obejrzeć repozytorium on-line pod adresem svn.invenzzia.org.
- 5. Dodatki
B. Licencja i autorzy - A. Rozwój i wsparcie
« Poprzedni
Dodatek B. Licencja i autorzy
Skrypt TypeFriendly został stworzony przez grupę Invenzzia. Odpowiedzialne za niego osoby to:
- Tomasz "Zyx" Jędrzejewski - projekt, kod silnika, dokumentacja.
- Jacek "eXtreme" Jędrzejewski - systemy wyjścia, dostosowanie Markdowna, szereg poprawek, dokumentacja.
W projekcie został użyty parser PHP Markdown Extra napisany przez Michela Fortina i bazujący na kodzie Johna Grubera. Dostępny jest on na zmodyfikowanej licencji BSD.
W projekcie został użyty parser GeSHi napisany przez Benny'ego Baumanna i dostępny na licencji GNU GPL.
W szablonie dokumentacji użyto ikonek zestawu Tango Icon Library, części projektu Tango Desktop Project dostępnej na licencji Creative Commons Attribution-ShareAlike 2.5.
Opis składni markdown jest adaptacją oryginalnego dokumentu Markdown Syntax page napisanego przez Daringa Fireballa oraz opisu składni PHP Markdown Extra Michela Fortina.
TypeFriendly dostępny jest na zasadach licencji GNU General Public License 3. Treść tej licencji dołączona jest do pakietu w katalogu info/COPYING, a w razie jej braku możesz zapoznać się z nią pod adresem http://www.gnu.org/licenses/gpl.html.
Niniejsza dokumentacja dostępna jest na zasadach licencji GNU Free Documentation License 1.2. Treść tej licencji dołączona jest do pakietu w katalogu info/COPYING_DOCS, a w razie jej braku możesz zapoznać się z nią pod adresem http://www.gnu.org/licenses/fdl.html.
Licencje te w żaden sposób nie stosują się do dokumentacji stworzonych przez Ciebie i przetwarzanych przez TypeFriendly tak samo, jak grafika stworzona w programie na licencji GNU GPL nie jest automatycznie obejmowana tą samą licencją.
