Homework 04: Rich text processing

Write a Ruby script, which can convert a batch of files containing Textile and LaTeX (optionally also LilyPond) markup into a Web-friendly format, e.g. XHTML+MathML+PNG. You can assume that Ritex library is installed for Ruby, and Lilypond software is installed. The operation on the given dataset will be verified from a Windows machine command line. E.g.

rtconvert input-directory output-directory

We suggest to enclose LaTeX in <math> and </math>, and Lilypond markup in <music> and </music> to enable easier discovery of these things in-between normal Textile markup, so that they may receive their respective processing.

Examples and Demos for input formats

Here is an example of LaTeX markup:

Solution is given by this formula:
<math>x_{1,2}=\frac{-b \pm \sqrt{b^2-4ac}}{2a}</math>
so it follows ...
The same equation.

LaTeX can be tried out in any of the Sandbox areas of the Wikipedia (LaTeX markup is enclosed between tags <math> and </math>). In this homework you will use Ritex to process these snippets of LaTeX and produce islands of MathML.

See the document About LilyPond regarding LilyPond software and its music notation.

Examples and Demos for the produced result

After rtconvert command (rich text conversion) the produced HTML+MathML files (plus some PNG images, if you are also converting LilyPond) should be viewable by regular browser with MathML plugin support. HTML file examples, which also contain MathML markup can be found in the page of the MathPlayer plugin (see http://www.dessci.com/en/products/mathplayer/).

Characteristics of the Application

Code:
A Ruby script (one or more Ruby files), which contains rtconvert utility and a small README.txt file explaining how it should be used (together with a few sample files).
Input:
A directory containing files having extensions *.txt and containing Textile interspersed with snippets of LaTeX (and possibly LilyPond).
Output:
Another directory (if it does not exist, it is created; if it exists, its previous content is erased), which contains the files with the same names as input directory, but with different extensions (*.html), so that they are immediately accessible by the MathML-enabled browser. In case of LilyPond, the output directory also contains PNG images, which are music scores created from the pieces of the LilyPond found in the input documents.

Bibliography

Errata

  • Kādā veidā vajag apstrādāt Textile markup? Vai to arī vajag konvertēt XHTML formatā? Ideālā pasaulē vēlamais rezultāts būtu XML dokuments, kurš atbilstu teiksim XHTML+MathML dokumentu profilam (sk. http://www.w3.org/TR/XHTMLplusMathMLplusSVG/) UN ARĪ būtu redzams, teiksim, ar Internet Explorer, uz kura uzinstalēts MathPlayer plugins. Taču jauktu vārdapgabalu (mixed namespace) XML dokumenta validēšana pret daudzajiem DTD ir grūta un arī nepraktiska, jo nav pārlūkprogrammu, kuras prasītu atbilstošo dokumenta profilu - toties daudzas praksē sastopamas pārlūkprogrammas prasa nestandarta marķējumu inline MathML gabalu iekļaušanai. Tādēļ šajā gadījumā ir labāka pragmatiska pieeja: vajag pārstrādāt Textile+LateX marķējumu ar Ruby skriptu tā, lai pāris praksē biežāk sastopamās pārlūkprogrammas (MSIE un Firefox) to pareizi attēlotu - t.i. tas būtu daudzmaz pareizs HTML vai XHTML ar apzīmētām MathML "saliņām" (piemēram, tas, ko vieglāk dabūt no RedCloth; var arī marķējumu uzlabot par XHTML ar HTML Tidy, ja tas ir viegli un ērti izdarāms). Akūtas nepieciešamības gadījumā, Ruby skriptam var padot parametru, kurš pasaka, kurai pārlūkprogrammai gjenerējams rezultāts. Lai gan, manuprāt, var atrast tādu marķējumu, kurš strādā uz MSIE un uz Firefox vienlaikus.
  • Noteikti var un vajag lietot Ruby moduli "redcloth" (tāpat kā "ritex" un varbūt arī citas bibliotēkas, teiksim, "HTML Tidy") , ja tie atvieglo uzdevumu.
  • Mājasdarba aprakstā ir minēts, ka izejas failu formatam jābūt *.html. Bet vai tas var būt vienkārši *.xml? Ja kādai pārlūkprogrammai ir iespējams atvērt tikai failu ar paplašinājumu XML (bet faktiski tā rāda HTML marķējumu ar MathML formulām), tad man ir vienalga. No otras puses, Internet Explorer šādus dokumentus (HTML un MathML sajaukumu) attēlo pareizi tad, ja faila paplašinājums ir *.html.

    Šajā sakarībā ir vēl cits interesants jautājums: Ja attiecīgais izvadāmais fails (HTML un MathML sajaukums) tiek piegādāts no Web Servera, tad kādam jābūt dokumenta MIME tipam (HTTP "Content-Type" hederim), lai tas pareizi attēlotos uz divām izplatītajām pārlūkprogrammām? Vai servletā ir jāraksta:

    response.setContentType("text/html; charset=utf-8");
    vai 
    response.setContentType("application/xhtml+xml; charset=utf-8");
    vai 
    response.setContentType("text/xml; charset=utf-8");
    vai vēl kā citādi? 
    

    Web Serveris un eksperimentēšana ar to šajā uzdevumā gan vispār nav paredzēti, bet par pareizo MIME tipu varētu padiskutēt. Tas ir līdzīgi atjautības uzdevumam: Ja Web serveris pārlūkprogrammai piegādā baitu plūsmu, kas ir sintaktiski pareizs xhtml (teiksim, UTF-8 kodējumā) ar atbilstošo XHTML 1.0 namespace ("xmlns" deklarāciju), toties HTTP hederī norādītais MIME tips ir "text/xml" - vai Web standartiem atbilstošai pārlūkprogrammai ir tiesības to attēlot kā HTMLu, vai arī tai jāzīmē atklikšķināms koks un/vai citādi jāizliekas, ka tā nezin, kā šo XMLu attēlot?