<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [

  <!ENTITY kappname "&rocs;">
  <!ENTITY package "kdeedu">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % Catalan  "INCLUDE">
]>
<book id="rocs" lang="&language;">

<bookinfo>
<title
>El manual de &rocs;</title>
<authorgroup>
<author
><personname
> <firstname
>Tomaz</firstname
> <surname
>Canabrava</surname
> </personname
> <email
>tomaz.canabrava@gmail.com</email
> </author>
<author
><personname
> <firstname
>Andreas</firstname
> <surname
>Cord-Landwehr</surname
> </personname
> <email
>cordlandwehr@googlemail.com</email
> </author>

&traductor.Antoni.Bella; 
</authorgroup>

<copyright
><year
>2009</year
><holder
>Tomaz Canabrava</holder
></copyright>
<copyright
><year
>2011-2012</year
><holder
>Andreas Cord-Landwehr</holder
></copyright>

<date
>02-12-2012</date>
<releaseinfo
>1.8.0 &kde; 4.10</releaseinfo>

<legalnotice
>&FDLNotice;</legalnotice>

<abstract>
<para
>&rocs; és una eina de teoria de grafs per al KDE. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdeedu</keyword>
<keyword
>matemàtiques</keyword>
<keyword
>matemàtica</keyword>
<keyword
>grafs</keyword>
<keyword
>node</keyword>
<keyword
>aresta</keyword>
</keywordset>

</bookinfo>

<chapter id="introduction">
<title
>Introducció</title>
<para
>En aquest capítol oferim una visió general de les principals característiques i el flux de treball de &rocs;. Per al lector impacient, que vol començar a utilitzar immediatament &rocs;, li suggerim que almenys llegeixi <xref linkend="introduction-nutshell"/> i que utilitzi <xref linkend="scripting"/> com a referència a l'hora d'escriure algorismes. </para>

<sect1 id="introduction-goals">
<title
>Objectius, destinataris i flux de treball</title>
<para
>&rocs; és un IDE per a la teoria de grafs per a tothom interessat en el disseny i anàlisi d'algorismes de graf. Això inclou explícitament</para>
<itemizedlist>
    <listitem
><para
>professors, que volen demostrar algorismes als seus estudiants,</para
></listitem>
    <listitem
><para
>estudiants, que volen entendre i veure com es realitza el seu algorisme,</para
></listitem>
    <listitem
><para
>i tothom, que està interessat en les estructures de dades i algorismes.</para
></listitem>
</itemizedlist>

<para
>Per a tots aquests usuaris, &rocs; ofereix una manera fàcil d'utilitzar l'editor d'estructura de dades per a crear estructures de dades, un motor per crear scripts de gran abast per executar algorismes i diverses eines d'ajuda per a les vostres simulacions i experiments. </para>

<para
>El flux de treball típic quan s'utilitza &rocs; és començar creant un graf amb l'editor visual de grafs. Ho podeu fer ja sigui a mà, afegint elements de dades i la seva connexió, o utilitzant un dels generadors d'estructura de dades (si estan disponibles per al dorsal d'estructura de dades actualment seleccionat). Els generadors d'estructura de dades es poden trobar a <menuchoice
><guimenu
>Document de graf</guimenu
> <guimenuitem
>Eines</guimenuitem
> <guimenuitem
>Genera el graf</guimenuitem
></menuchoice
>. A més, podeu assignar valors als elements de l'estructura de dades, ja sigui a mà o utilitzant <menuchoice
><guimenu
>Document de graf</guimenu
> <guimenuitem
>Eines</guimenuitem
> <guimenuitem
>Assigna valors</guimenuitem
></menuchoice
>. Finalment, podeu escriure el vostre algorisme en JavaScript i executar-lo amb l'estructura de dades que acabeu de crear. Tots els canvis que realitzi el vostre l'algorisme a l'estructura de dades seran directament visibles en l'editor visual de grafs. </para>

<screenshot>
<screeninfo
>Una captura de pantalla de &rocs;.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Una captura de pantalla de &rocs;</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect1>

<sect1 id="introduction-nutshell">
<title
>&rocs; en poques paraules</title>
<para
>En aquesta secció proporcionem una visió general compacta dels elements centrals de &rocs;. Expliquem els conceptes importants de les estructures de dades, dorsals de les estructures de dades i tipus d'elements. La comprensió d'aquests conceptes és útil per entendre com es creen i es modifiquen les estructures de dades en &rocs;. </para>
<para
>En general &rocs; treballa amb projectes: En obrir &rocs; es crea un projecte buit i el podeu substituir carregant o important un altre projecte. En sí, un projecte consisteix en <emphasis
>documents de graf</emphasis
> i <emphasis
>scripts</emphasis
>. </para>

<sect2>
<title
>Documents de graf i dorsals d'estructura de dades</title>
<para
>Un document de graf representa el contingut d'una pissarra en blanc a l'editor visual de grafs. En sí, un document de graf pot contenir diverses estructures de dades alhora, però només un dorsal d'estructura de dades. Els dorsals d'estructura de dades estan presents en diversos tipus de graf (grafs en general, llistes enllaçades, arbres arrelats) i proporcionen característiques addicionals als seus tipus de graf específic. Això pot posicionar automàticament els elements, jocs d'icones especials o un conjunt ampliat de funcions d'script per utilitzar en els vostres algorismes. (Per a més detalls veure la secció corresponent del manual). És possible canviar el dorsal de l'estructura de dades d'un document de graf, tot i que es pot perdre la informació (&pex;, les arestes d'un cercle en un graf general no seran afegides a un d'arbre, si canvieu al dorsal d'arbre arrelat). </para>
<para
>Els documents de graf també formen la base per a definir tipus de punter i tipus de dades. </para>
</sect2>

<sect2>
<title
>Estructures de dades</title>
<para
>Les estructures de dades són la base de tot el treball en &rocs;. Podeu afegir una o diverses a un document de graf, afegir elements de dades (nodes, dades) i punters a elles i modificar-los mitjançant scripts. Per això, cada estructura de dades té el seu nom únic pel qual es pot accedir des dels scripts. Segons el dorsal de l'estructura de dades triat, pot passar que no es puguin modificar arbitràriament les estructures de dades (&pex;, un arbre mai podrà contenir un cicle). El dorsal de l'estructura de dades està determinat pel dorsal d'estructura de dades associat amb el document de graf corresponent que conté l'estructura de dades. </para>
</sect2>

<sect2>
<title
>Tipus de punters</title>
<para
>Amb els tipus de punter podeu definir diferents tipus de punters que s'utilitzaran en les vostres estructures de dades. És a dir, un tipus de punter pot obtenir un disseny individual (essencialment un color), de manera que serà fàcil accedir als punters només d'un tipus específic des dels vostres scripts. Els casos típics d'ús de punters poden ser la implementació dels meta-arestes a les vostres estructures de dades que visualitzen les relacions entre els elements de dades (&pex;, visualitzar els interessos de comunicació). Però, a més, si els vostres scripts han d'identificar tipus específics d'arestes (&pex;, les arestes dels arbres i la creu en l'algorisme de cerca de primera profunditat), els tipus de punter poden ser una manera elegant d'implementar-ho. </para>
</sect2>

<sect2>
<title
>Tipus de dades</title>
<para
>En diversos problemes d'estructura de dades, un conjunt d'elements de dades s'han de separar en grups de diferents tipus (&pex;, problemes d'agrupament o de cobertura). O és útil per a l'execució d'un algorisme per especificar un tipus d'element de dades per expressar un tipus específic (&pex;, per a la cerca primer en amplada). Per als casos d'ús d'aquest tipus podeu definir tipus de dades. Cada tipus de dades té la seva pròpia icona i podeu accedir als tipus de dades d'algun tipus fàcilment des dels vostres scripts. </para>
</sect2>

<sect2>
<title
>Propietats dinàmiques</title>
<para
>Cada element de dades i el punter pot tenir moltes propietats. Algunes d'aquestes propietats són per omissió del dorsal d'estructura de dades. Per a més detalls consulteu la documentació del dorsal d'estructura de dades. Per afegir propietats addicionals als elements de dades i punters, hi podeu afegir <emphasis
>propietats dinàmiques</emphasis
>. Cada propietat dinàmica s'identifica pel seu nom i pot contenir qualsevol valor associat amb ella. El nom ha de començar amb una lletra (a-z o A-Z) i només pot contenir lletres, nombres i «_». Si intenteu utilitzar qualsevol caràcter no vàlid en el nom de la propietat, la propietat no serà canviada. </para>
<para
>Per afegir propietats dinàmiques, utilitzeu els diàlegs <guilabel
>Propietats de les dades</guilabel
> i <guilabel
>Propietats del punter</guilabel
> des dels menús contextuals dels respectius elements o les funcions de l'script, com s'explica a <xref linkend="scripting-data-structure"/>. </para>
<para
>També podeu utilitzar els scripts. Només necessitareu utilitzar la <literal
>add_property</literal
> amb el nom i el valor de la vostra propietat. Després d'això, podreu utilitzar el node/pointer.propertyName per establir/obtenir els valors. </para>
<para
>Heus aquí un exemple de com utilitzar les propietats dinàmiques amb el dorsal d'estructura de dades «Graf». <programlisting
>nodes = myGraph.list_nodes()
for (var i = 0; i &lt; nodes.length; ++i ){
    nodes[i].add_property("MyProperty", 0)
}
nodes[0].MyProperty = 2
nodes[1].MyProperty = nodes[0].MyProperty + 2
    </programlisting>
</para>
</sect2>
</sect1>

<sect1 id="introduction-tutorial">
<title
>Guia d'aprenentatge</title>
<para
>En aquesta secció volem crear un projecte d'exemple per explorar algunes de les característiques més importants de &rocs;. L'objectiu és crear un graf i un script que il·lustri un algorisme d'aproximació a 2 simple per al problema <emphasis
>cobertura de vèrtexs mínima</emphasis
>. En aquest problema s'han de trobar un subconjunt de nodes del graf C de mida mínima, de manera que cada aresta del graf estarà connectada a almenys un node de C. Se sap que aquest problema és NP-complex i volem il·lustrar com trobar una aproximació de factor 2 cercant una coincidència en el graf donat (en el que segueix utilitzarem la terminologia comuna per als algorismes de graf: un graf és l'estructura de dades, els nodes són els elements de dades i les arestes són els punters). </para>
<para
>El nostre objectiu és visualitzar la correspondència de les coincidències i la cobertura de vèrtexs mínima. Per això, volem especificar dos tipus de punters, un per mostrar les arestes coincidents i un per mostrar arestes comunes, així com dos tipus de dades que utilitzarem per distingir els nodes continguts en C i els que no estan continguts en C. </para>

<sect2>
<title
>Generar un graf</title>
<para
>Per al dorsal d'estructura de dades «Graf», &rocs; ofereix una eina d'ajuda que pot generar grafs. Anem a <menuchoice
><guimenu
>Document de graf</guimenu
> <guisubmenu
>Eines</guisubmenu
> <guimenuitem
>Genera el graf</guimenuitem
></menuchoice
>. Cal que generem un «Graf aleatori» amb 30 nodes, 90 arestes i amb 1 llavor (la llavor és la llavor inicial per al generador de grafs aleatoris; si s'utilitza la mateixa llavor diverses vegades es tornaran a reproduir els mateixos grafs). Finalment, modificarem el nom del graf en el plafó de l'estructura de dades i cridarem al graf <literal
>testgraph</literal
>. </para>
</sect2>

<sect2>
<title
>Crear els tipus</title>
<para
>Utilitzarem el botó <guibutton
>Propietats del document</guibutton
> en el plafó de l'estructura de dades per obrir el diàleg de propietats per als tipus de dades i de punter del document de graf actual. Per al tipus de dades afegirem un nou tipus anomenat «C», el qual obtindrà automàticament l'ID <literal
>1</literal
>. Per aquest tipus seleccionarem la imatge del servidor com a icona. A més, canviarem a la pàgina tipus de punter i afegirem un nou tipus de punter anomenat «coincident». Això ens durà automàticament a l'ID <literal
>1</literal
> i establirem el color a blau. </para>
</sect2>

<sect2>
<title
>L'algorisme</title>
<para
>Per acabar, hem d'implementar l'algorisme d'aproximació. Per això utilitzarem la següent implementació: </para>
<programlisting
>var E = testgraph.list_edges(); // conjunt d'arestes sense processar
var C = new Array();            // arestes coincidents
while (E.length 
> 0) {
    var e = E[0];        // prenem la primera aresta e={u,v}
    var u = e.start();
    var v = e.end();
    e.set_type(1);       // establim l'aresta com a coincident
    E.shift();           // eliminem «e» (és a dir, E[0]) des de la llista d'arestes
    C.push(u);           // afegim «u» a «C»
    C.push(v);           // afegim «v» a «C»

    // marquem «u,v» com a nodes en «C»
    u.set_type(1);
    v.set_type(1);

    // eliminem de «E» totes les arestes adjacents a «u» o «v»
    var adjacent = u.adj_edges();
    for (var i=0; i &lt; adjacent.length; i++) {
        var index = E.indexOf(adjacent[i]); // troba l'índex
        if (index!=-1) {
            E.splice(index, 1); // l'elimina si ja s'ha trobat
        }
    }
    var adjacent = v.adj_edges();
    for (var i=0; i &lt; adjacent.length; i++) {
        var index = E.indexOf(adjacent[i]); // troba l'índex
        if (index!=-1) {
            E.splice(index, 1); // l'elimina si ja s'ha trobat
        }
    }
}
output("Vertex Cover conté " + C.length + " nodes.");
</programlisting>
</sect2>

<sect2>
<title
>Executar l'algorisme</title>
<para
>Finalment volem executar l'algorisme. Per això podem iniciar l'execució amb el botó <guibutton
>Executa</guibutton
> al plafó de control de l'script. </para>
</sect2>
</sect1>
</chapter>

<chapter id="user-interface">
<title
>La interfície d'usuari de &rocs;</title>

<sect1 id="user-interface-all">
<title
>Elements generals de la interfície d'usuari</title>
<para
>La interfície d'usuari es divideix en diverses parts lògiques que es presenten en la següent captura de pantalla. </para>
<screenshot>
    <screeninfo
>Elements de la &IGU; de la interfície de &rocs;.</screeninfo>
    <mediaobject>
    <imageobject>
    <imagedata fileref="rocs-interfaces.png" format="PNG"/>
    </imageobject>
    <textobject>
    <phrase
>Elements de la &IGU; de la interfície de &rocs;.</phrase>
    </textobject>
    </mediaobject>
</screenshot>
<variablelist>
<varlistentry>
    <term
>Selector de documents</term>
    <listitem
><para
>En aquesta barra de menú superior haureu de seleccionar el document actual i l'estructura de dades. Des d'on també és possible crear i eliminar estructures de dades així com accedir a les propietats de l'estructura de dades. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Editor visual de grafs</term>
    <listitem
><para
>Aquesta és la pissarra en blanc on es poden crear i modificar les estructures de dades. Feu clic dret a la pissarra, en els elements de dades, o en els punters per obrir els menús contextuals. Podeu utilitzar les eines de la <emphasis
>barra d'eines Editor visual de grafs</emphasis
> per modificar els elements a la pissarra de l'editor visual de grafs.</para
></listitem>
</varlistentry>
<varlistentry>
    <term
>La barra d'eines Editor visual de grafs</term>
    <listitem
><para
>Aquesta barra d'eines proporciona totes les eines per a l'editor visual de grafs. Utilitzeu l'eina <guibutton
>Afegeix dades</guibutton
> o <guibutton
>Afegeix connexió</guibutton
> per crear nous elements o per connectar elements, respectivament. S'afegeixen nous elements de dades a l'estructura de dades que es troba seleccionada al <emphasis
>Selector de documents</emphasis
>. Recordeu que tant <guibutton
>Afegeix dades</guibutton
> i <guibutton
>Afegeix connexió</guibutton
> tenen menús contextuals per seleccionar el tipus dels elements que seran creats. Per a més detalls, veure <xref linkend="user-interface-toolbars"/>. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Barra lateral</term>
    <listitem
><para
>A la dreta, trobareu la barra lateral que proporciona diverses eines per al vostre flux de treball: <itemizedlist>
        <listitem
><para
>Tipus d'element: Aquest estri us permet accedir directament al punter i tipus de dades disponibles.</para
></listitem>
        <listitem
><para
>Diari: Cada projecte disposa del seu propi diari que es pot utilitzar per, &pex;, anotar tasques, resultats o observacions.</para
></listitem>
        <listitem
><para
>Documentació: Podeu obrir aquest estri per obtenir accés directe al manual i a través seu a la documentació dels scripts.</para
></listitem>
        </itemizedlist>
    </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Editor d'scripts</term>
    <listitem
><para
>En aquest editor de text podeu escriure algorismes com s'explica en detall en <xref linkend="scripting"/>. Podeu treballar sobre diversos documents d'script simultàniament utilitzant diverses pestanyes. Si l'script conté canvis sense desar a la pestanya apareixerà el símbol d'un disc. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Sortida de l'script</term>
    <listitem
><para
>Aquesta àrea de text bé mostra informació de depuració o la sortida de l'script del vostre algorisme, depenent de la preferència indicada a la part superior d'aquest estri. Si l'script retorna un error, automàticament es presentarà la sortida de depuració. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Controls</term>
    <listitem
><para
>Aquí trobareu els controls per a l'execució d'scripts. Podeu executar l'script que està obert a l'editor d'scripts prement <guiicon
>Executa</guiicon
>. Mentre s'executa l'script, és possible aturar l'execució prement el botó <guiicon
>Atura</guiicon
>. Tingueu en compte que l'execució amb <guibutton
>Un pas</guibutton
> sols s'aturarà a les paraules clau específiques (veure <xref linkend="scripting"/>). </para
></listitem>
</varlistentry>
</variablelist>
</sect1>

<sect1 id="user-interface-toolbars">
<title
>Barres d'eines</title>
<para
>Hi ha diferents barres d'eines per a l'editor visual de grafs que us permeten accedir a les funcions amb un sol clic. Per omissió, es mostren les següents barres d'eines:</para>
<itemizedlist>
    <listitem
><para
>Barra d'eines principal</para
></listitem>
    <listitem
><para
>Barra d'eines d'alineació</para
></listitem>
</itemizedlist>
<!--  -->
<sect2 id="user-interface-toolbars-main">
<title
>Barra d'eines principal</title>
<para
>La <emphasis
>barra d'eines principal</emphasis
> es compon de les següents accions. El fer clic sobre una acció significa que el punter del ratolí aplica aquesta acció a la pissarra de l'editor visual de grafs:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsselectmove.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Moure</guilabel
>: Per a seleccionar elements, o bé feu clic sobre l'espai sense utilitzar a la pissarra, manteniu premut el ratolí i dibuixeu un rectangle que contingui alguns elements de dades i/o punters per a seleccionar aquests elements o en cas contrari feu clic directament sobre un element sense seleccionar per seleccionar-lo. Si feu clic sobre un element o conjunt d'elements seleccionats, respectivament, els podreu moure mantenint premut el ratolí i movent-lo. També és possible moure els elements seleccionats amb les tecles del cursor.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsadddata.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Afegeix dades</guilabel
>: Feu clic sobre una posició arbitrària a la pissarra de l'editor visual de grafs per crear un nou element de dades que pertanyi a l'estructura de dades actualment seleccionada. Si manteniu premut el punter del ratolí sobre el botó, es mostrarà un menú contextual des d'on es podran seleccionar (només si hi ha diferents tipus de dades) els tipus de dades dels nous elements de dades creats.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaddedge.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Afegeix connexió</guilabel
>: Feu clic sobre un element de dades, manteniu premut el ratolí i dibuixeu una línia cap a un altre element de dades al qual assenyali el punter/aresta. Aquesta acció només té èxit si el graf actual permet afegir aquesta aresta (&pex;, en un graf no dirigit no podreu afegir múltiples arestes entre dos elements de dades). Si manteniu premut el punter del ratolí sobre el botó, es mostrarà un menú contextual des d'on es podran seleccionar (només si hi ha diferents tipus de punter) els tipus de punter dels nous elements de dades creats.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsdeletedata.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Elimina</guilabel
>: Feu clic sobre un element per eliminar-lo. Si elimineu un node, totes les arestes adjacents també s'eliminaran.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocszoom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Zoom</guilabel
>: Feu clic sobre la pissarra, manteniu premut el &BER; i dibuixeu un rectangle. La pissarra s'ampliarà a la zona seleccionada. Utilitzant també la roda del ratolí per apropar o allunyar. Un doble clic amb el &BER; restaura el zoom original.</para
></listitem>
</itemizedlist>
</sect2>

<sect2 id="user-interface-toolbars-alignment">
<title
>Barra d'eines d'alineació</title>
<para
>Podeu afegir l'opcional <emphasis
>barra d'eines d'alineació</emphasis
>. En prémer sobre una acció en aquesta barra d'eines tindrà un efecte directe en els nodes seleccionats:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Dalt</guilabel
>: Alinea els elements de dades a la posició vertical de l'element de dades més superior. Això només afecta a les posicions verticals.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Centre</guilabel
>: Alinea els elements de dades a la posició vertical donada pel centre de totes les posicions verticals dels elements de dades seleccionats. Això només afecta a les posicions verticals.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Base</guilabel
>: Alinea els elements de dades a la posició vertical de l'element de dades més inferior. Això només afecta a les posicions verticals.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Esquerre</guilabel
>: Alinea els elements de dades a la posició horitzontal de l'element de dades més a l'esquerra. Això només afecta a les posicions horitzontals.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Centre</guilabel
>: Alinea els elements de dades a la posició horitzontal de l'element de dades més superior. Això només afecta a les posicions horitzontals.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Dreta</guilabel
>: Alinea els elements de dades a la posició horitzontal de l'element de dades més a la dreta. Això només afecta a les posicions horitzontals.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Cercle</guilabel
>: Alinea els elements de dades en un cercle de diàmetre igual que la distància màxima entre els elements de dades. Els elements de dades estan col·locats en la mateixa seqüència que la proposta per vista des del centre de gravetat d'aquests elements de dades.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Minimitza els creuaments d'arestes</guilabel
>: Torna a organitzar els elements de dades seleccionats per a minimitzar el nombre de connexions creuades (aplicació de l'algorisme Fruchterman-Reingold).</para
></listitem>
</itemizedlist>
</sect2>
</sect1>

<sect1 id="user-interface-documents">
<title
>Treballar amb documents de graf</title>
<para
>Un projecte de &rocs; conté un o múltiples documents de graf que es poden editar amb l'editor visual de grafs. A més, cada document pot contenir un nombre arbitrari d'estructures de dades. En aquest cas, totes les estructures de dades d'un document utilitzen el mateix dorsal per a l'estructura de dades. En aquesta secció explicarem com canviar entre els documents i la manera de crear-ne de nous. </para>

<sect2 id="user-interface-documents-selector">
<title
>La barra selector de documents</title>
<para
>La barra selector de documents s'utilitza per seleccionar el document de graf i també l'estructura de dades. Quan utilitzeu les eines de l'editor visual de grafs per crear elements d'estructures de dades, els nous elements creats s'afegiran automàticament a l'estructura de dades actual. A més, aquesta barra ofereix accés directe a eliminar els ja existents o crear noves estructures de dades dins del document actual. </para>

<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsnew.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Nou</guilabel
>: Aquesta acció crea una nova estructura de dades utilitzant un patró de nomenclatura automàtica proposta pel dorsal de l'estructura de dades. L'estructura de dades creada s'afegirà al document de graf seleccionat. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsdelete.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Elimina</guilabel
>: Aquesta acció elimina l'estructura de dades que es troba seleccionada en el selector d'estructura de dades per al document actual. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsproperties.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Propietats de l'estructura de dades</guilabel
>: Obre un diàleg que permet accedir a les propietats de l'estructura de dades. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsproperties.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Propietats del document</guilabel
>: Obre un diàleg que permet accedir a les propietats del document, així com als tipus de dades i punter del document. </para
></listitem>
</itemizedlist>

<screenshot>
<screeninfo
>La barra d'eines principal</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="document-selector.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>La barra selector de documents.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>

<sect2 id="user-interface-documents-menu">
<title
>Crear i importar documents de graf</title>
<para
>Per crear un document nou gràfic o afegir un d'existent per al projecte, utilitzi Projecte → Nou document de gràfic o <menuchoice
><guimenu
>Projecte</guimenu
> <guimenuitem
>Nou document de graf</guimenuitem
></menuchoice
> o <menuchoice
><guimenu
>Projecte</guimenu
> <guimenuitem
>Importa un graf del &rocs;</guimenuitem
></menuchoice
>. També podreu importar documents de graf des d'aplicacions de tercers (per a això, veure <xref linkend="import-export"/>). </para>
</sect2>

</sect1>
</chapter>

<chapter id="scripting">
<title
>Escriure i executar algorismes en &rocs;</title>

<para
>&rocs; utilitza internament el motor per a la creació d'scripts QtScript, el qual és un motor específic de JavaScript. Això significa que tots els algorismes que implementeu hauran d'utilitzar JavaScript. Com funciona JavaScript i com escriure codi no està cobert per aquest manual, encara que s'explica com accedir a les estructures de dades, elements de dades i punters de les estructures de dades del motor per crear scripts. Atès que mai utilitzareu l'objecte d'estructura de dades bàsica, sinó el proporcionat pel dorsal d'estructura de dades utilitzat actualment, la funcionalitat de l'estructura de dades s'estén pel dorsal corresponent i haureu de fer una ullada a la funcionalitat especialitzada. Sobretot, els dorsals d'estructura de dades utilitzant la terminologia comuna del vostre domini (nodes i arestes en els grafs, les fulles i les arrels en els arbres, &etc;) </para>
<para
>És important saber que els canvis fets pel motor per a la creació d'scripts es reflecteixen directament en les propietats a la pissarra de l'editor visual de grafs. Per tant, els scripts en realitat modifiquen les estructures de dades. </para>

<sect1 id="scripting-data-structure">
<title
>Els elements de l'estructura de dades base</title>
<para
>Cada dorsal proporciona un conjunt especial de funcions i propietats de les seves estructures de dades i els seus elements. Però cada dorsal també proporciona les propietats i funcions definides per l'estructura de dades base. Per tant, tot el que s'explica en aquesta secció està disponible per a cada dorsal d'estructura de dades. </para>
<sect2
><title
>Propietats de l'estructura de dades base</title>
<para
>Les estructures de dades s'identifiquen pel seu nom. Assumint que heu creat una estructura de dades amb el nom <literal
>testgraph</literal
>, llavors podreu accedir a l'estructura de dades simplement escrivint aquest identificador. Per exemple, per obtenir una matriu amb tots els elements de dades en l'estructura de dades donada, podeu escriure <literal
>testgraph.list_nodes();</literal
> a l'script. </para>

<sect3>
<title
>Propietats i funcions de l'estructura de dades base</title>
<para
>Cada estructura de dades <literal
>testgraph</literal
> té les següents propietats que es poden llegir o escriure per <literal
>testgraph.property</literal
>: </para>
<programlisting
>string name  // identificació de l'estructura de dades
</programlisting>
</sect3>
</sect2>

<sect2>
<title
>Propietats i funcions dels elements de les dades base</title>
<para
>Cada element de dades té les següents propietats que es poden llegir o escriure: </para>
<programlisting
>double x      // coordenada «x» de la posició actual
    double y      // coordenada «y» de la posició actual
    double width  // mida
    string value  // valor
    int id        // identificador únic de l'element de dades
    string name   // nom
    string color  // color en hexadecimal
</programlisting>
<para
>A més, es pot accedir a cada propietat dinàmica d'un element de dades pel seu nom. </para>

<para
>Cada objecte d'element de dades proporciona els següents mètodes: </para>
<programlisting
>int type();                         // tipus de dades de l'element de dades
    int set_type(int);                  // assigna el tipus de dades de l'element de dades
    void add_property(string name,      // afegeix la propietat dinàmica a l'element de dades amb el nom i valor especificats
                      string value);
    array adj_data();                   // llista de dades adjacents
    array adj_pointers();               // llista de punters adjacents
    array input_pointers();             // llista de punters d'entrada
    array output_pointers();            // llista de punters de sortida
    array loop_pointers();              // llista de punters que formen un bucle automàtic
    array connected_pointers(target);   // llista de punters que apunten a l'«objectiu»
    void  remove();                     // elimina aquest element de dades
</programlisting>
</sect2>

<sect2>
<title
>Propietats i funcions de l'apuntador base</title>
<para
>Cada punter té les següents propietats que es poden llegir o escriure: </para>
<programlisting
>string color  // color en hexadecimal
    string value  // valor
    string name   // nom
    double width  // amplada
    string style  // un dels valors: «dot», «dash», «dash dot», «solid»
</programlisting>
<para
>A més, es pot accedir a cada propietat dinàmica d'un punter pel seu nom. </para>

<para
>Cada objecte punter proporciona els següents mètodes: </para>
<programlisting
>int type();                         // tipus de punter
    int set_type(int);                  // assigna el tipus del punter
    void add_property(string name,      // afegeix propietat dinàmica a l'element de dades amb el nom i valor especificats
                      string value);
    node start();                       // node d'inici del punter
    node end();                         // node objectiu del punter
    void remove();                      // elimina aquest punter
</programlisting>
</sect2>
</sect1>

<sect1 id="scripting-backend-graph">
<title
>El dorsal del graf</title>
<sect2>
<title
>Propietats i funcions del graf</title>



<sect3>
<title
>Propietats específiques del dorsal del graf</title>
<para
>El diàleg de propietats de l'estructura de dades permet accedir als ajustaments de configuració específics per al dorsal del graf. Allà, amb <guilabel
>Tipus de graf</guilabel
> podreu seleccionar el tipus del graf. El significat d'aquests tipus és el següent: </para>
<itemizedlist>
    <listitem
><para
><guilabel
>Graf</guilabel
>: Graf en el que és possible que no existeixin varies vegades les mateixes arestes (pel que fa als punts d'inici i final). </para
></listitem>
    <listitem
><para
><guilabel
>Multigraf</guilabel
>: Graf en el que és possible que existeixin varies vegades les mateixes arestes (pel que fa als punts d'inici i final). </para
></listitem>
</itemizedlist>
</sect3>

<sect3>
<title
>L'estructura del graf</title>
<para
>Tenint en compte un objecte d'estructura de dades del tipus «Graf», podeu cridar a les següents funcions membre: </para>
<programlisting
>array list_nodes();                   // llista de tots els nodes del graf
    array list_nodes(int type);           // llista de tots els nodes del tipus indicat
    array list_edges();                   // llista de totes las arestes del graf
    array list_edges(int type);           // llista de totes les arestes del tipus indicat
    node add_node(name);                  // afegeix un nou node i el retorna
    edge add_edge(node from, node to);    // afegeix nova aresta de «from» a «to» i la retorna
    array overlay_edges(int overlayID);   // llista de totes les arestes de la capa indicada
    edge add_overlay_edge(node from,
                          node to,
                          int overlayID); // afegeix aresta del tipus de punter indicat a la capa especificada
</programlisting>
</sect3>

<sect3>
<title
>Nodes del graf</title>
<para
>Tenint en compte un objecte d'estructura de dades del tipus «Graf», podeu cridar a les següents funcions membre en els nodes del graf, a més de les propietats proporcionades pels elements de dades: </para>
<programlisting
>array adj_nodes();                    // llista de tots els nodes adjacents
    array adj_edges();                    // llista de les arestes connectades
    array input_edges();                  // llista de les arestes d'entrada
    array output_edges();                 // llista de totes les arestes de sortida
    array loop_edges();                   // llista de totes les arestes que retornen al node
    array connected_edges(node target);   // totes les arestes que connecten aquest node amb el node «objectiu»
</programlisting>
</sect3>

<sect3>
<title
>Arestes del graf</title>
<para
>Tenint en compte les arestes d'una estructura de dades del tipus «Graf», només estaran disponibles les propietats de l'estructura de dades base. </para>
</sect3>
</sect2>

<sect2>
<title
>Algorismes de l'estructura del graf</title>
<para
>El dorsal de grafs proporciona algunes funcions especials que es poden utilitzar des del motor per a crear scripts.</para>
<variablelist>
<varlistentry>
<term
>Calcular el camí més curt</term>
<listitem>
    <para
>Calcula el camí més curt entre els nodes <emphasis
>inici</emphasis
> i <emphasis
>final</emphasis
>. Ambos nodes han de ser del mateix graf. Aquest càlcul respecta si el graf és dirigit o no dirigit.</para>
    <funcsynopsis>
    <funcprototype
><funcdef
>array <function
>dijkstra_shortest_path</function
></funcdef
> <paramdef
>node <parameter
><replaceable
>inici</replaceable
></parameter
></paramdef
> <paramdef
>node <parameter
><replaceable
>final</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
</listitem>
</varlistentry>
<varlistentry>
<term
>Distàncies del camí més curt</term>
<listitem>
    <para
>Calcula les distàncies del camí més curt entre el node <emphasis
>inici</emphasis
> i tots els altres nodes del graf. Aquest càlcul respecta si el graf és dirigit o no dirigit.</para>
    <funcsynopsis>
    <funcprototype
><funcdef
>array <function
>distances</function
></funcdef
> <paramdef
>node <parameter
><replaceable
>inici</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

<sect1 id="scripting-backend-linkedlist">
<title
>El dorsal de llista enllaçada</title>
<sect2>
<title
>Propietats i funcions de la llista enllaçada</title>

<sect3>
<title
>L'estructura de la llista enllaçada</title>
<para
>Tenint en compte un objecte d'estructura de dades del tipus «Llista enllaçada», podeu cridar a les següents funcions membre: </para>
<programlisting
>node begin();                           // proporciona el node de capçalera per a la llista enllaçada
    setBegin(node begin):               // assigna el node inici com a inici de la llista i torna a ordenar la llista
    createNode();                       // crea un nou node de llista
</programlisting>
</sect3>

<sect3>
<title
>Nodes de la llista enllaçada</title>
<para
>Tenint en compte un objecte d'estructura de dades del tipus «Llista enllaçada», podeu cridar a les següents funcions membre en els nodes del graf, a més de les propietats proporcionades pels elements de dades: </para>
<programlisting
>node front();                           // retorna predecessor del node
</programlisting>
</sect3>

<sect3>
<title
>Arestes de la llista enllaçada</title>
<para
>Tenint en compte les arestes d'una estructura de dades del tipus «Llista enllaçada», només estaran disponibles les propietats de l'estructura de dades base. </para>
</sect3>
</sect2>
</sect1>

<sect1 id="scripting-backend-rootedtree">
<title
>El dorsal de l'arbre arrelat</title>
<sect2>
<title
>Propietats i funcions de l'arbre arrelat</title>

<sect3>
<title
>Dorsal de l'arbre arrelat</title>
<para
>El diàleg de propietats de l'estructura de dades permet accedir als ajustaments de configuració específics per al dorsal del graf. Allà, marcant la propietat <guilabel
>Mostra tots els punters</guilabel
>, es mostraran els punters entre els nodes de l'arbre. Si no es marca, els múltiples punters entre els mateixos nodes es plegaran en un. </para>
</sect3>

<sect3>
<title
>L'estructura de l'arbre arrelat</title>
<para
>Tenint en compte un objecte d'estructura de dades del tipus «Arbre arrelat», es poden llegir o escriure les següents propietats: </para>
<programlisting
>ShowAllPointers     // estableix a «true» per a mostrar totes les arestes; a «false» si s'han de plegar múltiples arestes
</programlisting>
<para
>Tenint en compte un objecte d'estructura de dades del tipus «Arbre arrelat», podeu cridar a les següents funcions membre: </para>
<programlisting
>node add_data(string name);         // afegeix un node a l'arbre amb el nom indicat
    void set_root_node(node root);  // estableix l'arrel com node arrel de l'arbre
    node root_node();               // retorna el node arrel de l'arbre
</programlisting>
</sect3>

<sect3>
<title
>Nodes de l'arbre arrelat</title>
<para
>Tenint en compte un objecte de node del tipus «Arbre arrelat», es poden llegir o escriure les següents propietats: </para>
<programlisting
>int numberOfChilds                  // estableix el nombre (permès) de fills per aquest node
    node left_child                 // sols lectura: el node que és el fill de l'esquerra
    node right_child                // sols lectura: el node que és el fill de la dreta
    node node_parent                // sols lectura: el node que és el pare
</programlisting>
<para
>Tenint en compte un objecte de node del tipus «Arbre arrelat», podeu cridar a les següents funcions membre: </para>
<programlisting
>node add_left_child(node child);    // afegeix fill a l'esquerra
    node add_right_child(node child);   // afegeix fill a la dreta
    node add_child(node child, int i);  // afegeix un fill com a enèsim fill del node
    node add_node_parent(node child);   // afegeix pare (sols tindrà èxit si encara no s'ha assignat un pare)
    node left_child();                  // retorna el fill de la dreta
    node right_child();                 // retorna el fill de l'esquerra
    node child_at(int i);               // retorna l'enèsim fill del node
    node node_parent();                 // retorna el pare del node
</programlisting>
</sect3>

<sect3>
<title
>Arestes de l'arbre arrelat</title>
<para
>Tenint en compte les arestes d'una estructura de dades del tipus «Arbre arrelat», només estaran disponibles les propietats de l'estructura de dades base. </para>
</sect3>
</sect2>
</sect1>

<sect1 id="scripting-controls">
<title
>Controlar l'execució de l'script</title>
 

<sect2>
<title
>Incloure fitxers</title>
<para
>Els vostres documents d'script poden incloure altres scripts. Això pot ser útil per reduir la mida dels documents d'script i millorar la llegibilitat. Utilitzant <menuchoice
><guimenu
>Document d'script</guimenu
> <guimenuitem
>Inclusions possibles</guimenuitem
></menuchoice
> obtindreu una llista de fitxers d'script que ja vénen amb &rocs; i que podeu incloure. Podeu incloure un fitxer d'script amb la següent ordre: </para>
<programlisting
>include_script(string path);            // camí relatiu o absolut a un fitxer d'script
</programlisting>
</sect2>

<sect2 id="scripting-output">
<title
>Sortida de l'script</title>
<para
>Durant l'execució d'un algorisme, la sortida de depuració i del programa es mostren a la <emphasis
>depuració i sortida de l'script</emphasis
>. Si el motor per a la creació d'scripts detecta un error de sintaxi, l'error també es mostrarà com a missatge de depuració. Tingueu en compte que tots els missatges del programa també es mostraran a la sortida de depuració (com a text en negreta). </para>
<para
>Podeu controlar el text que es mostrarà a la sortida de l'script mitjançant les següents funcions: </para>
<programlisting
>output(string message);            // mostra el missatge com a sortida de l'script
    debug(string message);         // mostra el missatge com a sortida de depuració
</programlisting>
</sect2>

<sect2 id="scripting-controlling">
<title
>Controlar l'execució de l'script</title>
<para
>Hi ha diferents modes d'execució per als vostres scripts. </para>
<para
>Podeu controlar el text que es mostrarà a la sortida de l'script mitjançant les següents funcions: </para>
<itemizedlist>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-run.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Inicia</guilabel
>: Executa l'script fins finalitzar.</para
></listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-stop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Atura</guilabel
>: Atura l'execució de l'script (sols disponible si s'executa un script).</para
></listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-step.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Un pas</guilabel
>: Executa l'script fins que finalitza un pas. Un pas finalitza quan l'script crida la funció <literal
>interrupt()</literal
>:</para>
    <programlisting
>interrupt();    // finalitza un pas
    </programlisting>
    </listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-debug.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Depura</guilabel
>: Executa l'script en mode de depuració. Això obre el diàleg de depuració de QtScript.</para
></listitem>
</itemizedlist>
</sect2>
</sect1>
</chapter>

<chapter id="import-export">
<title
>Importar i exportar</title>
<sect1 id="import-export-projects">
    <title
>Intercanviar projectes del &rocs;</title>
    <para
>Els projectes del &rocs; es poden importar i exportar com fitxers d'arxiu <literal
>.tar.gz</literal
>. Aquests arxius es poden utilitzar per a intercanviar projectes. Podeu importar i exportar amb <menuchoice
><guimenu
>Fitxer</guimenu
> <guimenuitem
>Importa un projecte</guimenuitem
></menuchoice
> i <menuchoice
><guimenu
>Fitxer</guimenu
> <guimenuitem
>Exporta el projecte</guimenuitem
></menuchoice
>, respectivament. </para>
</sect1>

<sect1 id="import-export-graphs">
    <title
>Importar i exportar documents de graf</title>
    <para
>&rocs; actualment suporta la importació i exportació dels següents formats de fitxer:</para>
    <itemizedlist>
        <listitem
><para
>Fitxers DOT, també coneguts com fitxers Graphviz</para
></listitem>
        <listitem
><para
>Fitxers GML</para
></listitem>
        <listitem
><para
>Fitxers en el format de grafs trivial</para
></listitem>
    </itemizedlist>

<sect2 id="format-specification-tgf">
<title
>Format de grafs trivial</title>
<para
>El <emphasis
>format de grafs trivial</emphasis
> (TGF) és un format de fitxer basat en text simple per a la descripció dels grafs. Un fitxer TGF consta d'una llista de definicions de node, que assignen els identificadors dels nodes a les etiquetes, seguits per una llista de les arestes. En aquest format, és possible tenir més d'una etiqueta per node i un valor per a cada aresta. &rocs; interpreta grafs importats com a grafs no dirigits. Els grafs exportats contindran dues arestes per connexió si les connexions són bidireccionals. </para>

<sect3>
<title
>Especificació del format</title>
    <itemizedlist>
        <listitem
><para
>El fitxer comença amb una llista de nodes (un node per línia), seguit per una línia amb el caràcter únic «#», seguit per una llista d'arestes (una aresta per línia).</para
></listitem>
        <listitem
><para
>Un node consisteix d'un nombre enter (identificador), seguit d'un espai, seguit per una cadena arbitrària.</para
></listitem>
        <listitem
><para
>Un aresta es compon de dos nombres enters (identificadors) separats per un espai, seguit per un espai, seguit per una cadena arbitrària. Se suposa que l'aresta dirigida apunta des del primer identificador fins al segon.</para
></listitem>
    </itemizedlist>
</sect3>
<sect3>
<title
>Exemple</title>
<programlisting
>1 node inicial
2 transmissor
3 pila
#
1 2 blau
2 1 vermell
2 3 verd
</programlisting>
</sect3>
</sect2>

<sect2 id="format-specification-dot">
<title
>Llenguatge DOT / Format de fitxer de grafs Graphviz</title>
<para
>El llenguatge DOT és un llenguatge de descripció de grafs de text pla, que permet, tant una representació de grafs llegible, així com un processament eficient pels programes de disseny de grafs. DOT és el format de fitxer predeterminat per a la suite de visualització de grafs Graphviz, però també és àmpliament utilitzat per altres eines de graf. Les extensions de fitxer habituals per a DOT són <emphasis
>.gv</emphasis
> i <emphasis
>.dot</emphasis
>. </para>

<sect3>
<title
>Característiques no implementades</title>
<para
>&rocs; pot analitzar cada fitxer de grafs que contingui un graf especificat d'acord amb l'especificació del llenguatge DOT<footnote
><para
>http://www.graphviz.org/content/dot-language</para
></footnote
>. La implementació de les característiques del llenguatge és completa, tot i les següents excepcions: </para>
    <itemizedlist>
        <listitem
><para
>subgraf: A causa de la manca d'un concepte de subgraf en &rocs;, els subgrafs només s'importen com un conjunt d'elements de dades i connexions. En especial, no s'importaran les connexions cap o des dels subgrafs.</para
></listitem>
        <listitem
><para
>Els atributs &HTML; i &XML;: Els atributs (com les etiquetes) que contenen la sintaxi &HTML; o &XML; es llegeixen sense canvis. En especial, no es llegeix cap atribut com el tipus de lletra i estil.</para
></listitem>
    </itemizedlist>
</sect3>
<sect3>
<title
>Exemple</title>
<programlisting
>digraph myGraph {
    a -> b -> c;
    b -> d;
}
</programlisting>
</sect3>
</sect2>

</sect1>
</chapter>

<chapter id="credits">
<title
>Crèdits i llicència</title>

<para
>&rocs; </para>
<para
>Copyright del programa:</para>
<itemizedlist>
	<listitem
><para
>Copyright 2008 Ugo Sangiori (ugorox AT gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2008-2012 Tomaz Canabrava (tcanabrava AT kde.org)</para
></listitem>
	<listitem
><para
>Copyright 2008-2012 Wagner Reck (wagner.reck AT gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2011-2012 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Copyright de la documentació:</para>
<itemizedlist>
	<listitem
><para
>Copyright de la documentació 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
></listitem>
	<listitem
><para
>Copyright de la documentació 2009 Tomaz Canabrava (tcanabrava AT kde.org)</para
></listitem>
	<listitem
><para
>Copyright de la documentació 2011-2012 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Traductor de la documentació: &credits.Antoni.Bella;</para
> 
&underFDL; &underGPL; </chapter>

<appendix id="installation">
<title
>Instal·lació</title>

<sect1 id="getting-rocs">
<title
>Com obtenir el &rocs;</title>
&install.intro.documentation; </sect1>

<sect1 id="compilation">
<title
>Compilació i instal·lació</title>
&install.compile.documentation; </sect1>
</appendix>

&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes: nil
sgml-general-insert-case: lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->
