El macroprocesador del Wiki
El Wikiuv de la Universitat de València

El macroprocesador

El macroprocesador es la parte del sistema del WikiUv que analiza los patrones y ficheros de estilo ".ini" para sustituir recursivamente las variables que va encontrando por sus valores.

Estas variables las puedes haber definido tú (ver el TutorWiki) o pueden ser variables predefinidas cuyo valor es calculado automáticamente por el macroprocesador.

Las variables predefinidas

Las variables predefinidas pueden utilizarse libremente en los patrones, ficheros de estilo y textos wiki.

En la traza de procesamiento de un fichero wiki (usualmente accesible con un enlace al final de la página) se pueden ver (prácticamente) todas las variables definidas y su valor concreto para ese fichero.

Las variables que se modifican habitualmente en estilos y cabeceras:

  • TEMPLATE : plantilla a usar
  • ESTILO : Por defecto o según cabecera Wiki "#STYLE"
  • TITULO : Título de la página. Por defecto o según cabecera Wiki "#TITLE"
  • INDEX : Activa el indice y define título del índice (no se usa en patrones)
  • INDICETIT : Título del índice (lateral o no). Definido por la cabecera Wiki "#INDEXTIT". Por defecto es igual a INDEX si está o a TITULO sino.

Variables para incluir objetos

Las variables "comodín", que permiten incluir "adornos" o funcionalidades son:

  • CONTADOR : Contador de las veces que se ha accedido a la página (no muy de fiar).
  • RELOJ : Reloj digital.
  • ARROBA : Carácter @ (imagen) para escribir e-mails a prueba de spammers.
  • BUSCADOR : Incluye un buscador que busca por palabras en la carpeta actual y subcarpetas. Ver apartado correspondiente.
  • INDEXDIR: Incluye un índice del directorio actual, con posibilidad de ordenarlo y/o presentarlo como tabla en texto preformateado o html.
    Esta variable permite opciones de la forma "###INDEXDIR opciones###".
       Opciones de INDEXDIR: (p.e. "Shi")
       S M T N    Selecciona ordenación inicial (¡poner sólo una!)
                  S=Tamaño(Size) M=fecha_de_Modificación T=Tipo N=Nombre
       i          orden inverso                    
       h          Presenta el índice como una tabla HTML

Información avanzada

Más variables

De utilidad principalmente para desarrolladores de estilos y plantillas son las variables:

  • FECHA : fecha de última modificación del fichero fuente
  • DATA : fecha de última modificación del fichero fuente (valenciano)
  • DATE : fecha de última modificación del fichero fuente (inglés)
  • DIRTRA : Directorio de trabajo
  • CONTENIDO : Fichero procesado
  • INDICE : Indice del texto en CONTENIDO
  • TITULO_SINACENTOS : titulo sin acentos para la ventana (tag title)
  • URLCAT : URL de la página en catalán
  • URLCAS : URL de la página en castellano
  • URLSUP : URL de la página superior
  • URLDEBUG : URL de la página de traza
  • DIRWIKIBASE : Directorio wiki base de la instalación
  • URLWIKIBASE : URL del directorio wiki base de la instalación
  • URLESPACIO : URL del espacio web
  • DIRESPACIO : Directorio del espacio web
  • URLEDIT : URL para edición de la página
  • DIRBASE2 : Directorio base del espacio del usuario
  • URLBASE2 : URL del directorio base del espacio del usuario
  • LANG : La lengua del documento
  • URLWIKIDOC : URL de la documentación del wiki
  • URLDOC : URL del documento procesado
  • URLTRA : URL del directorio donde está la página wiki
  • URLREFERER : URL de la página llamante, proporcionada por el servidor web
  • URISERV : URI del servidor
  • BASEURL : Si es redirección, el BASEURL necesario para calcular los URL relativos de la página
  • HTMLLANG : Lengua en formato estándar (p.e.: LANG="cas" implica HTMLLANG="es-es")

Existen algunas variables más (ver las trazas) que son utilizadas internamente por el wiki y, desde luego, una plantilla puede definir sus propias variables.

Instrucciones del Macroprocesador

Las cadenas de caracteres que están entre "###" son consideradas por el macroprocesador del wiki como instrucciones a ejecutar (p.e., sustuir la variable por su valor).

Las posibles instrucciones del macroprocesador, en la versión 2 del Wikiuv, son:

  • ###vvvv###
    Sustitución de variable, búsqueda de imagen/css, inclusión de fichero.
    Sustituye:
    • Si el valor está definido, se sustituye por:
      1. El URL del fichero del ese nombre si el valor termina en .gif, .jpg, .png, .jpeg, .css (URL de la imagen buscada)
      2. Si no termina con estos sufijos, por el valor de la variable
    • Por el contenido del fichero procesado por el traductor del lenguaje wiki, si es .wiki o existe con sufijo .wiki
    • Por el "body" del fichero html, si es .html o existe con sufijo .html.
    • Por la página traída del web con WGET y extrayendo el body, si es http: Se procesan los URL relativos del fichero, por lo que seguirán funcionando normalmente.
  • ###vvvv?###
    Sustitución de variable OPCIONAL
    Idéntico al anterior, pero no produce un error en la traza si la variable no está definida.
  • ###vvvv?oooo###
    Sustitución de variable con valor por DEFECTO
    Idéntico al anterior, pero si la variable no está definida se sustituye por el valor dado "oooo".
  • ###SET var=val###
    Asignación a variable
    Asignar valor. Sustituye por vacío.
    • var=val
  • ###VALORa!!!VARIABLE2!!!VALORb###
    Sustitución de variables dentro de instrucción.
    Sustituye por ("+" quiere decir "concatenar"):
    • ###VALORa+VALOR_VARIABLE2+VALORb###
  • ###DEF var=var2###
    Redefinición/renombrado de variable
    Asigna a "var" el valor "###var2###", de forma que cuando se sustituya "###var###" se pondrá en su lugar ""###var2###". En la siguiente recursión, el wiki encontrará pues "var2" en todos los sitios en los que había "var".
    El valor de var es "###var2###", sustituye por vacío.
    • var="###var2###"
  • ###SET var=WIKISTRING val###
    Asignación de valor wiki
    Asignar valor a una variable, tras procesamiento por el traductor wiki. Sustituye por vacío.
    • var=wiki(val)
  • ###PREFORMATO ffff###
    Inclusión de fichero o url http: sin procesar
    FICHERO fff con sufijo cualquiera preparado para incluir en bloque preformato. Sirve para evitar procesamiento de fichero incluido. Sustituye por el contenido del fichero o URL http: indicado (no .txt):
    • "ffff"
  • ###PATRON patron###
    Fichero inicial
    Equivale a poner ###patron###. Utilizado como semilla en los ficheros de estilo (.ini).
  • ###WEBLOGCON###
    Weblog
    Sustituye por un weblog, generado a partir de variables y ficheros presentes en la misma carpeta.
  • ###SEARCHFORM###
    Inserta buscador
    Sustituye por un formulario para llamar al buscador. La primera vez que se use, generará los índices (puede tardar).

Variables en cabecera y .conf

Observar que, al leer las cabeceras, el wiki sustituye toda definición similar a:

  #VARIABLE valor

por

  ###SET VARIABLE=valor###

y deja tal cual, los "DEF" y "SET" que pudiera haber.

Asimismo, al leer las cabeceras, sustituye TITLE por "TITULO" y STYLE por "ESTILO".

Variables en ficheros de estilo (.ini)

El macroprocesador, al leer los ficheros de estilo, rodea cada línea por "###" y "###", convirtiéndolas así en intrucciones del macroprocesador.

Las instrucciones provenientes de las cabeceras (primero wiki.conf, seguidas de las del fichero) se añaden a continuación.

Luego, se inicia un proceso recursivo de sustituciones, al ejecutar el macroprocesador la instrucción ###PATRON patron### del .ini como si fuera ###patron###.

Wiki como Proxy para "vestir" aplicaciones o sitios web

Sea la aplicación web http://postor.uv.es/cgi-bin/Archivo que genera páginas web muy sencillas (código HTML sin estilos).

Es posible "vestirla" con la apariencia (plantilla) de una página wiki dada, escribiendo simplemente esta sencillo texto wiki:


#SET PROXYEREG=Archivo
#TITLE Archivo del Usuario

= Archivo del Usuario

###http://postor.uv.es/cgi-bin/Archivo###

El macroprocesador del wiki, al visualizar esta página, incluirá en ella el body de la página html generada por la aplicación.

Además, sustituirá todos los enlaces que cumplan con la expresión regular definida en "PROXYEREG" por enlaces que pasen a través de la misma página wiki.

Es decir, si la aplicación ha generado un enlace

   /cgi-bin/Archivo?tabla

el wiki lo reescribirá como

  ?http://postor.uv.es/cgi-bin/Archivo?tabla

(que es un URL relativo a la página wiki que se está viendo).

Hay que tener en cuenta que estos enlaces

  ?http://xxx.uv.es/ 

cuando se utilizan al final de cualquier URL de wiki, el wiki, en vez de mostrar la página wiki pedida, mostrará

  http://xxx.uv.es/

con el estilo y título de la susodicha página wiki... y aplicará la transformación de URL indicada por PROXYEREG. Esto garantiza que las sucesivas llamadas a la aplicación remota sigan pasando por la página wiki original y sigan recibiendo el procesado (apariencia) del wiki.

Ejemplo

Aplicación sin "vestir":

Aplicación "vestida" por el wiki:

tornar