Prototipo de aplicación para formateado de documentos DocBook

Para facilitar la preparación del formato de salida de un documento de este tipo, mediante un interfaz visual que alivie la necesidad de localizar y dar el valor adecuado a cada parámetro, se ha pensado en diseñar una aplicación cuya interfaz gráfica facilite (y oculte) la asignación de valores a los parámetros que, en el diseño modular de DSSSL, controlan la apariencia de los documentos. Esta aplicación está basada en una serie de apartados que permiten escoger valores para un grupo de parámetros (como ejemplos en la Figura 7-13 se muestra el apartado relativo al diseño del tamaño de la hoja de papel) y, finalmente, un apartado (Figura 7-14) que recoje todos los valores y los escribe en el fichero indicado.

Figura 7-13. captura de la aplicación de formateado de un documento DocBook (en SGML) con DSSL.

Figura 7-14. captura de la aplicación de formateado de un documento DocBook (en SGML) con DSSL.

Detalles de la posible implementación

Veamos algunos detalles de la implementación de esta aplicación en términos de MetaCard. Se abordará sólo la explicación de uno de los apartados, como muestra de los restantes, y del que genera finalemente el fichero resultante por su diferencia de comentido y de implementación con los demás

En el apartado referido a la tajeta que permite la intrucción de valores de dimensiones de la hoja de papel, se puede ver en la Figura 7-15 donde se han remarcado los objetos cuyo código se detalla en Figura 7-16.

Figura 7-15. Detalle de la implementación de uno de los apartados de selección de valores para el formato final del documento.

Figura 7-16. Código asociado al apartado de selección de formato de la hoja de papel.

# button "caracteristiques"
on menuPick novaPestanya vellaPestanya
  if exists( group vellaPestanya ) then hide group vellaPestanya
  if exists( group novaPestanya ) then show group novaPestanya
end menuPick

# button "tamanyPaper"
on menuPick eleccio
  set the label of me to eleccio
end menuPick


# button "Paper"
#
# Estrau la terna de valors de cada linea de les caracteristiques
#tipo i nom de cada objecte, propietat a la que afecta, delimitaor per a eixe valor que conte
#
local valorAux, caracteristicaAux, delimitaorAux

on volcar
  #  put fld "caracteristiques" of group (the short name of me) into varAux
  put fld "parametres" of me into varAux
  repeat with i = 1 to the number of lines of varAux
    #    put the first item of line i of varAux
    do  "put " & the first item of line i of varAux & "of me into valorAux"
    put the second item of line i varAux into caracteristicaAux
    put the third item of line i varAux into delimitaorAux
    
    put "    (define %" & caracteristicaAux & "%" && delimitaorAux & valorAux & delimitaorAux & ")" after\
        fld "contingut"
  end repeat
end volcar
      

En el apartado que vuelca a fichero todos los valores seleccionados se ha pensado en utilizar una estructura flexible que se muestra en la Figura 7-17. Los objetos resaltados són los principales motivos de comentario, por lo que se muestra su código en Figura 7-18.

Figura 7-17. Detalle de la implementación del apartado de generación del fichero DSL.

Figura 7-18. Código asociado al apartado de creación del fichero que contiene las elecciones del usuario para la transformación mediante DSSSL.

#
# button "Tria'l"
#
on mouseUp
  ask file "Nom del fitxer on guardar les característiques asignaes" \
         with "pingui.dsl" with filter "*.dsl"
  if not( the result is "Cancel")
  then
    put it into fld "nomFitxerDSL"
    send "mouseUp" to button "escriureFitxerDSL 0"
  end if
  answer information \
      URL ("file:" & fld "nomFitxerDSL" ) \
      titled "Te sembla correcte?" & " [" & the short name of me & "]"
end mouseUp


# button "escriureFitxerDSL 0"
#
# Este demana als groups que anyadeixquen al camp 'contingut' el que els toca
#
on mouseUp
  put empty into fld "contingut"
  repeat with i = 1 to (the number of lines of button "caracteristiques" - 1 )
    if exists( group (line i button "caracteristiques") ) then \
        send "volcar" to group (line i button "caracteristiques")
  end repeat
  
  put fld "capsaleraDSL" & return &\
      fld "contingut" & return &\
      fld "peuDSL" & return \
      into URL ("file:" & fld "nomFitxerDSL")
end mouseUp