A while ago, I created a 2-page PDF version of the restructured text quickstart
meant to be printed, folded in half and kept handy until you finally remember how to do footnotes (10 years and still waiting, in my case).
It was brought to my attention that the github project
did not mention how to build it. Then I noticed that not only it didn't explain that, it was also missing critical
files.
So, I added the files, fixed a couple of things that were not working perfectly with the latest rst2pdf
and there is now a fresh PDF ready for you!
Just for completeness' sake I have gone over Wikipedia's list of lightweight markup languages
and added support in Nikola (a static site and blog generator) for a couple of them: BBCode and txt2tags, which brings the number of
supported markup formats to 7 (the others are reStructured text, markdown, HTML, textile and Wiki).
Of the list of markup languages, the only missing ones with a Python implementation are AsciiDoc and Markdown Extra.
Why bother with this? It's not as if there was someone asking for BBCode support. However, one of the uses I want to support
is archiving sites. Suppose you have a forum you want to shut down? I want you to be able to archive it (even if it's some
work) and keep the data out there. A wiki? Same thing.
Una cosa que me ha ayudado a ser menos tímido, y poder progresar en la vida, es
hablar en público. Pero este último par de años lo vengo haciendo poco.
Así que, háganme hablar más. Me gustaria hacerlo en lugares en los que nunca estuve.
Si no es horriblemente lejos de Buenos Aires capaz que ni te pido que pagues viaje
y/o estadia, si el evento es interesante o el lugar es copado, lo pago yo.
Puedo hablar de python, software libre en general, o de otras cosas que me sugieran,
en inglés o argentino.
Estoy en un evento de Canonical en San Mateo (al ladito de San Francisco). Llegué ayer,
y hoy es el último día libre, así que hay que pasear.
Para empezar, acá están las fotos del viaje no hay
mucho todavía pero las voy a ir agregando.
El viaje...
Estaba en Mar del Plata visitando a la familia el jueves, y tenía pasajes para Buenos Aires
para la medianoche. A las 9PM ... paro de micros de larga distancia. Corro a la estación para
ver que se podía hacer, no hay pasajes hasta la semana siguiente. Empezmos a considerar hacer 500KM en taxi.
A las 11... se levanta el paro! Agarro a la familia, las valijas, me sub al colectivo... no, no subo porque soy un
paparulo y compré para las 00:05 del jueves en vez de las 00:05 de viernes.
En Mar del Plata a la medianoche sin boletos... bueno, compramos boletos para 15 minutos después.
Si se puede arreglar con plata, lo bueno es que te da una métrica. Soy $780 pelotudo.
Así que tengo pasajes, pero no son para San Isidro, son para Retiro, que está a 25km.
A las 00:30 estamos en el bondi, a las 5:45 estamos en retiro, a las 6:00 estamos en un remise, a las 6:45
estoy en casa, a las 7:00 estoy dormido, a las 9:00 estoy laburando.
Trabajo entrecortado haciendo las valijas y esas cosas, a las 5:30PM estoy en un auto a Ezeiza (35KM). Cuando
estamos entrando al aeropuerto empieza a salir humo del aire acondicionado. Debería mencionar que no funcionaba
y llevábamos 1:30 horas a paso de hombre bajo el sol.
Entonces, el auto está prendido fuego, pero poquito, se apaga, me bajo, lo encuentro a Lucio, checkin, café,
a las 10:00PM estoy en el avión.
Pero hay que esperar 30 minutos en la pista por el tráfico. Además el capitán nos dice que este es el último
vuelo del avión porque es muy viejo y lo van a vender como chatarra. Así que estamos volando en chatarra.
Además la mitad de las pantallas no anda, hay 6 películas para ver y ... tienen funciones. Ponele que
querés ver "Taken 2"? Bueno, o la agarrás 45 mintuos empezada o esperás una hora.
Es mi primer vuelo en American Airlines, es siempre así?
Llegamos a Dallas, pasamos los ventitrés checqueos de seguridad, aduana, etc, y estamos en USA!
Ahí Lucio dice que no estamos en el mismo vuelo a SF pero es que está mirando el boarding pass equivocado.
Nos tomamos el monorriel, cruzamos todo el aeropuerto, y llegamos al avión con 5 minutos de sobra. Como me
perdí la cena en el otro vuelo, el desayuno fué patético, y este vuelo de 3:50 horas no incluye comida
me pido un apple fritter de Dunkin Donuts.
Oh, apple fritter, no sé si realmente sos así de delicioso, o si tengo tanta hambre, pero te amé.
Eras tan dulce y suave, tan azucaroso y manzánico, tu textura tan linda y tu tamaño tan enorme.
Aún si vos fuiste la causa de mi descompostura intestinal, valió la pena, apple fritter, siempre te
recordaré.
Nos subimos a un 757 que estaba completamente mugriento. Sospecho que la fuerza que lo mantenía
unido es la fuerza de voluntad de los ácaros de sus asquerosos asientos. Tiene pantallas CRT
de 14" cada tantas filas, pero la vista por la ventanilla es buenísima, así que miro para afuera y listo.
Llegamos al aeropuerto, otro monorriel (dos en un día!) y buscamos el auto. Dados la opción, por supuesto
que elijo el Blue Nissan Versa! Good Car!
Ya sé que nadie se acuerda, pero la 1ra temporada de Héroes estaba buena.
Tenemos 2.5 horas para llegar al tour en Segway, así que no vamos al hotel, metemos todo en el baúl
y nos divertimos tres horas.
De fondo, Alcatraz. En primer plano, dos nerds divirtiéndose.
Terminamos, vimos los leones marinos, tomamos un café, sanguche de queso, volvimos al auto
no tenemos GPS ni teléfonos que anden, pero tenemos mapas cacheados y 3% de batería!
Y una vaga idea de adonde estaba el hotel! Llegamos, llamo a la argentina y me desmayo
alrededor de la medianoche hora argentina, unos dos días después de subir al colectivo
en Mar del Plata.
[Core]Name=textileModule=compile_textile[Documentation]Author=Roberto AlsinaVersion=0.1Website=http://nikola.ralsina.meDescription=Compile Textile into HTML
The compile_html method takes two arguments, one file from which it reads the markup, and one to write HTML. Example:
defcompile_html(self,source,dest):iftextileisNone:raiseException('To build this site, you need to install the "textile" package.')try:os.makedirs(os.path.dirname(dest))except:passwithcodecs.open(dest,"w+","utf8")asout_file:withcodecs.open(source,"r","utf8")asin_file:data=in_file.read()output=textile(data,head_offset=1)out_file.write(output)
Make sure to use utf8 everyhere.
The create_post function is used to create a new, empty, post with some metadata in it. Example:
defcreate_post(self,path,onefile=False,title="",slug="",date="",tags=""):withcodecs.open(path,"wb+","utf8")asfd:ifonefile:fd.write('<notextile> <!--\n')fd.write('.. title: %s\n'%title)fd.write('.. slug: %s\n'%slug)fd.write('.. date: %s\n'%date)fd.write('.. tags: %s\n'%tags)fd.write('.. link: \n')fd.write('.. description: \n')fd.write('--></notextile>\n\n')fd.write("\nWrite your post here.")
The metadata has to be in the form ".. fieldname: fieldvalue" and usually needs to be wrapped in a comment so that it's not
shown in the output.
The onefile parameter means you have to write that metadata in the post. If it's False, you don't.
In some rare cases (Creole, I am looking at you) comments are not supported and you should raise an exception
if onefile is True.
And that's it, markup support is fairly easy to add as long as there is a python implementation of a function to convert markup
into html.