Opis
Projekt zakończony
Michał Kotra, mkotra@student.agh.edu.pl
GraphViz plugin dla Dokuwiki, renderowanie diagramow z zamieszczonego w wiki kodu DOT oraz plikow umieszczanych w wiki.
Spotkania
08.02.26
co jest/czego brakuje w http://wiki.ioslo.net/dokuwiki/graphviz/
znaleziony plugin został przetestowany z dokuWiki i działa poprawnie. Wersja zapewnia podstawową funkcjonalność, tj. renderowanie diagramów z zamieszczonego w wiki kodu DOT (kod musi byc obłożony tagami:
</code>
uzyskany zostanie następujący efekt:
* istnieje możliwość wczytania pliku DOT zamieszczonego w wiki, np.
<code><graphviz file=„pl:miw:plik.dot”></graphviz></code>
* można również wczytać plik DOT znajdujący się pod wskazanym adresem URL (do odczytania zawartości pliku plugin wykorzystuje narzędzie Curl).
<code><graphviz url=„http://.../plik.dot”></graphviz></code>
* istnieje możliwość wyboru stylu grafu (domyślnie dot) spośród dostępnych opcji: dot, neato, twopi, circo, fdp
<code> <graphviz neato>KOD DOT</graphviz> </code>
* można ustalić rozmiar renderowanej bitmapy ustawiając odpowiednie wartości parametrów width i height:
<code><graphviz height=„300” width=„800”>KOD DOT</graphviz></code>
* Bardziej rozbudowany przykład użycia:
<code><graphviz neato file=„pl:miw:plik.dot” width =„100” height=„50”></graphviz></code>
===== Prolog plugin dla DokuWiki=====
Kolejnym celem było zbudowanie pluginu dla DokuWiki umożliwiającego uruchamianie kodu prologu. Plugin miał umożliwić podanie bazy wiedzy w postaci, kodu, adresu url, lub pliku zamieszczonego w wiki, oraz celu. Po zapisaniu strony miał zostać wyświetlony efekt działania. Dodatkowo należało umożliwić cache'owanie kodu prologu zgromadzonego na stronach DokuWiki, oraz zadawanie przestrzeni nazw (również w postaci wyrażeń regularnych), która miała zostać przeszukana.
===== Instalacja pluginu=====
* plugin dostarczony jest w postaci archiwum TAR. Instalacja polega na wskazaniu odpowiedniej lokalizacji w managerze pluginów Dokuwiki. Dalszy proces instalacji przebiega automatycznie.
===== Sposób działania =====
* aby kod Prologu został przetworzony należy umieścić go pomiędzy odpowiednimi tagami, oraz zadać goal i określić co chcemy wypisać:
<code xml>
<prolog goal=„kobieta(X),write(X),nl,fail”>
kobieta(kasia).
mezczyzna(jasiu).
</prolog>
</code>
* istnieje również możliwość podania pliku w wiki:
<code xml>
<prolog goal=„kobieta(X),write(X),nl,fail” file=„pl:miw:test.pl”>
</prolog>
</code>
* lub adresu url:
<code xml>
<prolog goal=„kobieta(X),write(X),nl,fail” url=„http://costam.org/test.pl”>
</prolog>
</code>
* dodatkowa funkcjonalność to możliwość cache'owania zgromadzonego na poszczególnych stronach kodu prologu, i określenie przestrzeni która ma zostać przeszukana. Przy podawaniu scope można stosować wyrażenia regularne, tak jak w przypadku grepa. PRzy czym „.*” określa całą przestrzeń wiki:
<code xml>
<prolog goal=„kobieta(X),write(X),nl,fail” scope=„pl:miw:proj.*08”>
</prolog>
</code>
* jeżeli chcemy jedynie zapamiętać w cache kod należy zastosować następującą składnię:
<code xml>
<prolog cache=„true”>
kobieta(anna).
</prolog>
</code>
===== Zasadzki =====
W związku ze sposobem działania mechanizmu cache w Dokuwiki istnieje możliwość, że plugin nie zadziała poprawnie. Nie wgłębiając się w szczegóły mechanizm cache w Dokuwiki wywołuje plugin podczas zapisywania dokumentu. Sam plugin renderuje diagramy w przypadku, gdy natrafi na kod, którego nigdy wcześniej nie renderował. W przeciwnym przypadku zostanie załadowany obrazek przechowywany w pamięci cache. Może się zatem zdarzyć, że renderując diagram z zewnętrznego pliku który ulegnie zmianie, plugin tych zmian nie wykryje gdyż podany kod:
„<graphviz url=”..„></graphviz>”
będzie w obu przypadkach identyczny. W razie wystąpienia tego typu problemów pomóc powinno wyczyszczenie zawartości katalogu:
wiki/data/media/graphviz
Można również użyć opcji NOCACHE → http://wiki.splitbrain.org/wiki:caching
==== Testy ====
testyprolog
testyprolog2
====== Materiały ======
* http://wiki.ioslo.net/dokuwiki/graphviz
* http://wiki.splitbrain.org/wiki:plugins:syntax
* http://wiki.splitbrain.org/wiki:plugins:syntax_tutorial