Linguaggio di markup OML

Sintassi

La sintassi dei bbCodes è la seguente:

[tag]testo[/tag]
Tag semplice, ad esempio il tag [B] per un testo in grassetto

[tag="valore"]testo[/tag]
Tag con un parametro, ad esempio il tag [URL] per generare un link.

[tag opzione1="valore1" opzione2="valore2"]testo[/tag]
Tag con più parametri, ad esempio il tag [DIV] per la creazione di layout.

Un tag può contenere altri tag, ad esempio
[center][b]Testo in grassetto centrato[/b][/center]


Se si intende riportare il carattere [ (parentesi quadra) come carattere e non come apertura di un tag, è necessario scrivere \[ (oppure racchiuderlo in un tag [noparse]).

Il carattere di doppio apice per racchiudere un valore non è obbligatorio, ma è necessario se nel valore sono presenti degli spazi.
Per rappresentare un carattere di doppio apice in un valore, utilizzare " al posto di " per quel carattere nel valore.

Alcuni tag non possono contenere altri tag, o comunque il testo specificato nel tag viene interpretato diversamente, ad esempio i tag [code], [noparse] etc.

Elenco dei tags disponibili

Una guida rapida dei principali tag e degli esempi d'uso è disponibile direttamente all'interno del software Osiris quando viene creato un contributo.

Se conoscete già la sintassi HTML, potete consultare direttamente la pagina delle equivalenze tra i tag OSML e i tag HTML.

(qui riporto nome tag + piccola descrizione, poi realizzo una pagina specifica per ogni tag.)

- Tags di formattazione

- Tags di gestione dei links

- Tags per la gestione multilingua

Tags equivalenti all' HTML

Molti tag HTML sono presenti in OSML (variando solamente la sintassi). Ad esempio:

<div style="border:1px solid blue;width:150px"> <span style="color:blue">body</span></div>

può essere scritto come
[div style="border:1px solid blue;width:150px"] [span style="color:blue"]body[/span][/div]

in pratica utilizzando [ e ] al posto di < e >.

Avanzato:
Da notare che il motore di Osiris potrebbe effettuare delle modifiche, anche per evitare XSS (cross-side scripting, javascript injection) .
Ad esempio, il codice
[a href="http://www.google.com"]link to google[/a]

non genererà l'equivalente esatto in html, dato che i link vengono trasformati per le conferme, le pagine di redirect etc.

Di seguito è riportata una tabella di comparazione dei tags HTML e i loro equivalenti in OSML.

Tabella di comparazione con i tag HTML

Html tagHtml descriptionOsiris supportOsiris notes
<!--...-->Defines a commentYes, Tag [!]
<!DOCTYPE>?Defines the document typeNot need.
<a>Defines an anchorYes, Tag [url], [iurl], [mail]
<abbr>Defines an abbreviationYes, Tag [abbr]
<acronym>Defines an acronymYes, Tag [acronym]
<address>Defines an address elementNoUse other tag instead.
<applet>Deprecated. Defines an appletDeprecated.
<area>Defines an area inside an image mapNoMaybe in future.
<b>Defines bold textYes, Tag [b]Attributes not supported.
<base>Defines a base URL for all the links in a pageNot need.
<basefont>Deprecated. Defines a base fontDeprecated.
<bdo>Defines the direction of text displayYes, Tag [bdo]
<big>Defines big textYes, Tag [big]
<blockquote>Defines a long quotationNoUse [quote] instead.
<body>Defines the body elementNot need.
<br>Inserts a single line breakYes, Tag [br]
<button>Defines a push buttonNo
<caption>Defines a table captionNo
<center>Deprecated. Defines centered textYes, Tag [center]Attributes not supported.
<cite>Defines a citationNoUse [quote] instead.
<code>Defines computer code textYes, Tag [code] Behiavour different and attributes not supported.
<col>Defines attributes for table columns?No
<colgroup>Defines groups of table columnsNo
<dd>Defines a definition descriptionYes, Tag [dd]
<del>Defines deleted textYes, Tag [del]
<dir>Deprecated. Defines a directory listDeprecated.
<div>Defines a section in a documentYes, Tag [div]
<dfn>Defines a definition termNoUse other tag instead.
<dl>Defines a definition listYes, Tag [dl]
<dt>Defines a definition termYes, Tag [dt]
<em>Defines emphasized text?NoUse [highlight] or other tag instead.
<fieldset>Defines a fieldsetNo
<font>Deprecated. Defines text font, size, and colorPartially, Tag [size]Attributes not supported.
<form>Defines a form?Not need.
<frame>Defines a sub window (a frame)No
<frameset>Defines a set of framesNo
<h1> to <h6>Defines header 1 to header 6Yes, Tag [h1]..[h6]
<head>Defines information about the documentNot need.
<hr>Defines a horizontal ruleYes, Tag [hr]
<html>Defines an html documentNot need.
<i>Defines italic textYes, Tag [i]Attributes not supported.
<iframe>Defines an inline sub window (frame)NoMaybe in future.
<img>Defines an imageYes, Tag [img]Behiavour different and attributes not supported.
<input>Defines an input fieldNo
<ins>Defines inserted textYes, Tag [ins]
<isindex>Deprecated. Defines a single-line input fieldDeprecated.
<kbd>Defines keyboard textNoUse [code] instead.
<label>Defines a label for a form controlNo
<legend>Defines a title in a fieldsetNo
<li>Defines a list itemYes, Tag [li] or Tag [*] in [list] tag.
<link>Defines a resource referenceNo
<map>Defines an image map?NoMaybe in future.
<menu>Deprecated. Defines a menu listDeprecated.
<meta>Defines meta informationNot need.
<noframes>Defines a noframe sectionNot need.
<noscript>Defines a noscript sectionNot need.
<object>Defines an embedded objectNo, for security and privacy reasons.
<ol>Defines an ordered listYes, Tag [ol] or tag [list]Html Attributes supported only in tag [ol]
<optgroup>Defines an option groupNo
<option>Defines an option in a drop-down listNo
<p>Defines a paragraphYes, Tag [p]
<param>Defines a parameter for an objectNo, for security and privacy reasons.
<pre>Defines preformatted textYes, Tag [pre
<q>Defines a short quotationNo because uselessUse [quote] instead.
<s>Deprecated. Defines strikethrough textYes, Tag [s]
<samp>Defines sample computer codeNo because useless
<script>Defines a scriptNo, for security and privacy reasons.
<select>Defines a selectable listNo
<small>Defines small textYes, Tag [small]
<span>Defines a section in a documentYes, Tag [span]
<strike>Deprecated. Defines strikethrough textYes, Tag [s] Attributes not supported.
<strong>Defines strong textYes, Tag [b]Attributes not supported.
<style>Defines a style definitionNoMaybe in future.
<sub>Defines subscripted textYes, Tag [sub]
<sup>Defines superscripted textYes, Tag [sup]
<table>Defines a tableYes, Tag [table]
<tbody>Defines a table bodyYes, Tag [tbody]
<td>Defines a table cellYes, Tag [td]
<textarea>Defines a text areaNo
<tfoot>Defines a table footerYes, Tag [tfoot]
<th>Defines a table headerYes, Tag [th]
<thead>Defines a table headerYes, Tag [thead]
<title>Defines the document titleNo
<tr>Defines a table rowYes, Tag [tr]
<tt>Defines teletype textYes, Tag [tt]
<u>Deprecated. Defines underlined textYes, Tag [u]
<ul>Defines an unordered listYes, Tag [ul] or tag [list]Html Attributes supported only in tag [ul]
<var>Defines a variableNoUse other tags.
<xmp>Deprecated. Defines preformatted textDeprecated.

Sintassi avanzata

Generalmente, ove è possibile specificare il valore di un parametro senza specificarne il nome, è perchè è il parametro di default.Ad esempio nel tag [quote] il parametro di default è "title", per cui scrivere
[quote title="mytitle"] mybody [/quote]
oppure
[quote="mytitle"]mybody[/quote]
è identico.
Alcuni tag possono contenere altri tag anche nei valori, come ad esempio i tag [quote], [lang], [popup] etc.Ad esempio:
[quote title="Da [url="http://www.wikipedia.it"]wikipedia[/url]:"] corpo [/quote]
(si noti come è stato necessario usare il carattere \ prima degli apici, altrimenti sarebbero stati interpretati come la chiusura del parametro 'title' del tag [quote]).
E' possibile anche specificare il valore di un parametro di un tag all'interno del corpo del tag, utilizzando il tag [?], tipicamente utile ove il valore del parametri è particolamente lungo o complesso; nell' esempio
[tag opzione1="valore1" opzione2="valore2"]testo[/tag]
il parametro "opzione2" è possibile specificarlo nel corpo del tag, scrivendo
[tag opzione1="valore1"]  [?=opzione2]valore2[/?]  testo[/tag]

E' possibile scrivere un tag senza corpo chiudendolo direttamente (come in HTML), ad esempio
[img src="http://www.mysite.com/myimage.gif" /]
Anche se alcuni tag non richiedono la chiusura, si consiglia di specificarla sempre. Ad esempio la riga orizzontale, si può scrivere semplicemente [hr], ma si consiglia di scrivere [hr /].

Differenze bbcodes Osiris e bbcodes tradizionali

Vengono qui elencate le differenze di interpretazione tra i bbcodes di Osiris e quelle di board tradizionali.
Viene preso come riferimento, per le board tradizionali, Invision 2.3.0.

Tecnicamente, alcune interpretazioni sono diverse in quanto Osiris possiede un vero e proprio parser (comprensivo di tracing di errori di sintassi, report etc.), mentre le board tradizionali generalmente applicano delle espressioni regolari per la trasformazione.

  • Caso 1:
    BBCode
    [i][b]alfa[/i][/b]

    Output invision
    alfa

    Output Osiris
    alfa[/i]

    Note

    Osiris notifica due errori:
    • Tag [i] not opened.
    • Tag [i] not closed.

    Il primo è perchè la quando incontra [i] non c'è allo stesso livello il tag di apertura.
    Il secondo è perchè al termine dell'analisi, notifica che l'apertura [i] è rimasta senza chiusura.

    Da notare che le board tradizionali, anche se visivamente mostrano un contenuto corretto, hanno in realtà generato codice Html invalido.


  • Caso 2:
    BBCode
    alfa[b]beta

    Output invision
    alfa[b]beta

    Output Osiris
    alfabeta

    Note

    Osiris notifica un errore:
    • Tag [b] not closed.



  • Caso 3:
    BBCode
    [quote=alfa beta]test[/quote]

    Output invision
    alfa beta
    test

    Output Osiris
    alfa
    test

    Note

    Osiris non notifica alcun errore. Ha però considerato "alfa" come valore del parametro di default del tag quote, e "beta" come secondo parametro, poi inutilizzato. In Osiris è sufficiente racchiudere l'intero valore tra doppi apici:
    [quote="alfa beta"]test[/quote]


Modalità di output

I testi scritti in OML vengono mostrati in diverse modalità, a seconda del contesto.
E' possibile sperimentare i vari contesti, selezionando le modalità dal pulsante "Avanzate" dell'editor OML.

Short Mode



I testi possono venire mostrati in modalità "short" o "full".
Ad esempio, nei risultati di ricerca vengono mostrati in modalità "short".

Chi scrive un testo, può specificare che parte di esso sia visibile in una delle modalità sopra-citate, usando i due tag [less] e [more].

Un esempio tipico, è scrivere una notizia scrivendo la prima parte del testo normalmente, e la seconda parte del testo racchiusa dal tag .
In questo modo, nei risultati di ricerca comparirà solo la prima parte del testo, e un link per leggere il restante testo.

Secore Mode



Modalità sicura.
In questa modalità, i testi vengono mostrati con delle varianti, generalmente tag ignorati.

Ad esempio, il testo di un messaggio privato è visualizzato con questa modalità, e tutte le immagini esterne non verranno visualizzate (similmente a come si comporta un client di posta quando sono presenti immagini esterne nella mail).

Internal / Plain / External



Modalità avanzate, che definiscono come un testo OML viene convertito in HTML.

Internal significa che il testo viene renderizzato in HTML per essere mostrato in una pagina Osiris. Ad esempio, contiene link relativi.
Plain significa che il testo viene renderizzato come testo semplice. Internamente viene usata questa modalità per stabilire quale testo finisce negli indici della ricerca full-text.
External significa che il testo viene renderizzato in HTML per essere visualizzato esternamente da un portale osiris. Ad esempio, i feed RSS usano questa modalità, e l'html conterrà link assoluti e stili CSS generali compatibili per essere mostrati nei lettori di feed RSS:

Row Mode


Alcuni testi vengono visualizzati in una modalità chiamata "Row Mode".

Significa che sono ammessi solo un sottoinsieme di tags:
  • lang
  • url
  • b
  • i
  • s
  • strike
  • strong
  • u
  • o
  • color
  • highlight
  • small
  • ins
  • del
  • sub
  • sup
  • abbr
  • acronym


Alcuni esempi:
  • I nomi dei portali
  • I titoli degli oggetti
  • I nomi utente


Report Mode


Dall'editor OML di Osiris, abilitando il "Report mode", è possibile visionare informazioni su come il testo OML è stato interpretato, quando viene generata l'anteprima.

Introduzione

In Osiris i contenuti vengono scritti utilizzando il linguaggio a tag (simile all'html) chiamato

OML (O-siris M-arkup L-anguage).


E' un linguaggio molto simile come sintassi ai bbCodes.

I bbCodes sono nati principalmente nei forums per permettere agli utenti di applicare degli stili di formattazione (grassetto su un testo, pubblicare un link etc) cercando comunque di lasciare la sintassi semplice e immediata anche agli utenti non esperti.

Osiris supporta tutti i bbCodes più comuni presenti nella maggior parte dei forums, più altri tag specifici di Osiris per permettere funzionalità avanzate, ed anche la maggior parte dei tag HTML.

Non è possibile scrivere un contenuto in linguaggio HTML 'puro', poichè non sarebbe possibile filtrare il contenuto per evitare violazioni di sicurezza (ad esempio l'apertura di un link esterno senza autorizzazione dell'utente), una delle caratteristiche fondamentali di Osiris.