Pandoc y las maravillas desconocidas

La última vez que mencione a Haskell fue en un artículo acerca de XMonad. Sin embargo no es la única cosa reseñable del mundillo que les presento.

Seguramente ya conoce todo mundo a Markdown, y si no se los presento. Es un lenguaje de marcas ligero que nos permite ser más rápidos y productivos a la hora de redactar un texto. Suficiente por ahora.

Bien, Markdown no está sólo y existen multitud de lenguajes allá afuera para realizar la misma función. Normalmente todos van con la idea de tomar un texto plano con algunas marcas y pasarlo hasta darle forma como HTML, LaTex y demás. Todo bien hasta ahí.

Esto trae varios problemas a relucir. Primero, y más importante, es que algunas implementaciones no disponen de todas las características que deseamos. O un lenguaje de marcas que ya ha implementado esto no nos gusta.

Y antes de que nos enfrasquemos en los caprichos hay que pensar y darse cuenta de que hay una mejor solución. Algo que convierta cualquier lenguaje de marcas en otra cosa. Cualquiera.

Aquí es donde entra Haskell en escena. La maravilla de la que les hablo existe, está viva, tiene nombre, funciona y es asombrosa. Se hace llamar pandoc y vino de la mano de un filósofo de la Universidad de Berkeley, John MacFarlane. Agárrense, por que comienza lo bueno.

Todos contra todos

Podríamos esperar que pandoc ofreciera una cobertura mediocre de todo, por no concentrarse. Pero no. Está excelentemente trabajado y tiene funcionalidades asombrosas.

Para hacerlo simple, le pasas a pandoc un archivo fuente cualquiera (ya sea en Markdown o en reStructuredText o otros que soporte pandoc) y lo pasa a un formato terminado, como -¿preparado todo el mundo?-

LaTex, HTML simple, PDF, DocBook, OpenDocument, docx, rtf, man, texto plano y hasta tres tipos diferentes de presentaciones en HTML; y mi lista se queda corta, cortísima. Aquí hay un diagrama ilustrando su poder:

Y por si fuera poco, es una biblioteca (o librería, llamenla como quieran) de Haskell; que puede integrarse en el código de otros programas. Hakyll es uno de los que más lo explota, siendo éste un generador de páginas estáticas que al usar pandoc puede convertir desde inofensivo Markdown y algo de LaTex a puro HTML.

Aquí una lista de sitios que ya lo usan como sitio personal, al estilo de un blog.

Y es bastante rápido, para acabarla. Y aún con todas estas ventajas, parece que sólo se expande en países de lengua anglosajona y aquí apenas y hay información disponible, como -y duele- presentaciones de este tipo. Quizá sea por que la guía del usuario está en inglés.

Los contras

Por supuesto que tiene que haber. Aparte de la relativamente corta expansión que tiene, la mayoría de los editores no lo soportan completamente.

Vim dispone de resaltado de sintáxis para Markdown y poco más por defecto, así que nos perdemos de algunas de las cosas más interesantes de pandoc: su sintaxis extendida.

Cosas jamás planteadas en el Markdown original y que nos hacen la vida más sencilla, como son tablas, citas, notas al pie, HTML y LaTex dentro del código, metadatos y carácteristicas más avanzadas.

Por cierto, Emacs tiene ventaja en esto. Dispone de un modo Markdown que nos da resaltado de sintáxis y unos cuantos comandos útiles, pero ahí si existe un pandoc-mode hecho y derecho, cuyo equivalente en Vim todavía no puede competir con él.

Si todavía les interesa meterlo en Vim, por aquí está el archivo de sintáxis. Para emacs hay que instalar los modos markdown y pandoc, como ya había mencionado.

Al grano

Yo descubrí pandoc cuando buscaba el paquete de text2tags (otro conversor pero más limitado) en Crunchbang y ahora sé que está disponible en Debian estable con el nombre, adivinen, pandoc. Un aptitude install basta para esto. Pero los que usamos ArchLinux tenemos que sufrir un par de contratiempos antes.

Ese infierno de dependencias

Lo primero que pensamos es en hacer un pacman -S pandoc. Pues no. No hay paquete ni en los repositorios oficiales y el del AUR no funciona, por la masiva cantidad de dependencias que requiere. Si ya conoces algo de Haskell, pensaras ahora que cabal lo solucionará. Y sí, pero con reservas. Para hacerlo hay que correr lo siguiente:

sudo pacman -S ghc cabal-install
cabal update
cabal install pandoc

Esto debería de funcionar pero no lo recomiendo. Sobre todo si quieres adentrarte en el mundo de Haskell, por que esto te traerá horripilantes problemas a futuro.

Seguramente suena extraño oír una queja de ArchLinux y de su filosofía, pero a mí me parece un completo despropósito haber eliminado el paquete haskell-platform de los repositorios, que proveía del último entorno suficientemente desarrollado y compatible entre sí; por qué ghc y cabal-install se actualizaron.

Si quieres instalar otros paquetes usando cabal lo mejor es que descargues los paquetes antiguos de ghc y cabal-install desde la Arch Rollback Machine.

Los instalamos con un simple pacman -U ruta-del-paquete y hacemos que pacman los ignore al actualizar el sistema, en el archivo /etc/pacman.conf; dentro de la sección IgnorePkg.

Ahora sí, somos capaces de usar cabal para instalar pandoc y para que funcione como debe, ponemos esta línea en nuestro archivo .bashrc:

export PATH=~/.cabal/bin:$PATH

Y ya. Algo rebuscado, pero nos evitamos problemas. Si quieren empezar con otros paquetes, en vez de instalarlos localmente, pueden usar hsenv para crear entornos aislados y evitarse el quebradero de cabeza que es instalar, por ejemplo, Hakyll.

Y de una vez les advierto que es horrible. Todo esto por que Haskell y Cabal no resuelven todavía el infierno de dependencias del que ya se han librado otros lenguajes, como Ruby con su Bundle y las gems. Como sea, esta pequeña solución se la debo a Ian Ross del grupo de Hakyll.

Tengan paciencia. Es una instalación larga, por que lo compila para nosotros.

Uso y conclusiones

Tomas una terminal y mandas una orden así:

pandoc -o archivo-de-salida.ext -i archivo-original.md

Donde Markdown (*.md, es la extensión que yo uso) puede ser sustituido por cualquier otro formato y .ext por cualquier otro disponible en la salida.

Para mí, que prácticamente hago esto todos los días me ha servido mucho, sobre todo para exportar a OpenDocument.

Y el ecosistema es increíble. El mismo MacFarlane ha desarrollado un wiki en Haskell, que usa Pandoc para convertir sus páginas, pero eso es para otra historia. Por cierto, este post fue orgullosamente escrito con Pandoc, como la mayoría de los que he escrito hasta el momento,


4 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Gadi dijo

    Yo también uso Markdown. A Kate y a Gedit se les puede instalar un complemento para resaltar la sintaxis. Luego para convertirlo a ODT yo opto por MultiMarkdown, es el que más, cómo decirlo, «respeta el texto» para que a la hora de copiarlo a un documento con estilos de párrafo sea más cómodo. Pandoc no me ha dado los mismos resultados, o al menos yo no supe cómo hacerlo 😛

    1.    anti dijo

      Puedes hacer que Pandoc tome solamente el Markdown estándar, activando la opción –strict; si eso es a lo que te refieres. Sin embargo, su principal ventaja es la versatilidad entre formatos.
      Recomendarlo, con lo poco que he visto que lo usan, no se me hacía malo.

  2.   ErunamoJAZZ dijo

    Yo lo he usado para pasar de LaTeX a reStructuredText. Lo hace muy bien (la mayor parte del tiempo xD)

  3.   msx dijo

    Interesante, gracias por compartir.