{"id":1342,"date":"2016-04-12T09:10:51","date_gmt":"2016-04-12T09:10:51","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=1342"},"modified":"2016-04-13T05:50:25","modified_gmt":"2016-04-13T05:50:25","slug":"tribulaciones-con-txt2html","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/04\/12\/tribulaciones-con-txt2html\/","title":{"rendered":"Tribulaciones con txt2html &#8230;"},"content":{"rendered":"<p>&#8230; y programas de gesti\u00f3n antiguos.<\/p>\n<p><!--more--><\/p>\n<p>Como ya dije en la <a href=\"http:\/\/esferas.org\/msqlu\/2016\/04\/05\/probando-conversores-de-texto-a-html\/\">entrada anterior<\/a> mis programas antiguos emplean una suerte de pseudo c\u00f3digos para declarar textos con tipograf\u00edas distintas, para se\u00f1alar t\u00e9rminos que deben indexarse o numeraciones de p\u00e1ginas.<\/p>\n<p>Estos c\u00f3digos son secuencias encerradas entre corchetes y empleo las may\u00fasculas como apertura y las min\u00fasculas como cierre:<\/p>\n<pre> Venexma Europa, S.L.            [CUR]Clientes de Fernando RUIZ[cur]         \r\n Resumen mensual de Ventas                      [CUR][cur]                     \r\n                                  [NEG]TOTALES MENSUALES POR CLIENTE[neg]       \r\n    [NEG]MARZO 2016[neg]                        [NEG][neg]                      \r\n      [NEG]EUROS[neg]                   [CUR]0420250 Zaragoza[cur]       \r\n<\/pre>\n<p>Para definir los t\u00e9rminos a indexar y el n\u00famero de p\u00e1gina utilizo:<\/p>\n<pre> [IDX key=\"C3685\"]430500023 OSSO OUTDOOR SL.[idx] (29\/05\/2015)                \r\n                                                                     \r\n           Meses de  2015  y  2016            Acumulados de  2015  y  2016\r\n\r\n<\/pre>\n<p>y<\/p>\n<pre class=\"\"> -------------------------------------------------------------------------------\r\n  05\/04\/2016 12:31:03  *** = A\u00f1o 2015 sin venta    @@@ = Ambos a\u00f1os sin venta  \r\n                       [NEG][PAG]Pag:     2[pag][neg]  \r\n\r\n<\/pre>\n<p>Cuando quiero hacer referencia a un n\u00famero de p\u00e1gina concreto en otra parte del listado, como en la p\u00e1gina de cabecera, utilizo lo siguiente:<\/p>\n<pre class=\"\">  Sumario \r\n\r\n  Detalle por cada cliente.........................................[A pag]    2[a]\r\n  Totales por ruta y pa\u00eds (y total mensual)........................[A pag]   47[a]\r\n\r\n<\/pre>\n<p>Mirando las opciones de txt2html he visto que no merece la pena enfangarse m\u00e1s y que es mejor utilizar un filtro Perl sencillo para las tipograf\u00edas<\/p>\n<pre class=\"lang:perl decode:true\" title=\"Filtro simple para c\u00f3digos tipogr\u00e1ficos\">while (&lt;&gt;) {\r\n    # Cursiva\r\n    s{\\[CUR\\]\\[cur\\]}{}g;\r\n    s{\\[CUR\\](.+)\\[cur\\]}{$1}g;\r\n\r\n    # Negrita\r\n    s{\\[NEG\\]\\[neg\\]}{}g;\r\n    s{\\[NEG\\](.+)\\[neg\\]}{$1}g;\r\n    print;\r\n}<\/pre>\n<p>Y algo m\u00e1s complejo para los n\u00fameros de p\u00e1gina y los \u00edndices. En ambos casos se trata de definir un <a href=\"http:\/\/www.w3schools.com\/html\/html_links.asp\">anclaje y un enlace interno HTML<\/a> de manera que se pueda navegar por el documento y no quede como un simple muro de texto.<\/p>\n<h5>\u00cdndice de elementos<\/h5>\n<p>El \u00edndice en el listado en papel se crea al final del mismo, ordenando alfab\u00e9ticamente las claves y a dos columnas, junto con el n\u00famero de p\u00e1gina en el que aparecen.<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">[CUR]Indice                                                   Pag    4    [cur]\r\n\r\n                                                                 [NEG]R[neg]\r\n\r\n   Reina Artesanos, S.L.             13  Rodr\u00edguez Herranz, Enrique        18\r\n   Reparaciones Bl\u00e1zquez, C.B.       29  Rodr\u00edguez Juzgado, Vicente        26\r\n   Restrepo Gonzalez, Carlos         14  Romero Carmona, Antonio           30\r\n   Reyes L\u00f3pez, Alvaro Ignacio        7  Romero Molina, Francisco          18\r\n   Rodriguez Herradura, Carlos       31  Romero Nicolalde, Juan            12\r\n   Rodriguez Martin, Juan            20  Rueda Garc\u00eda del Campo,           24\r\n   Rodriguez Martinez, Delmiro       34  Ruiz Ortu\u00f1o, Fernando             20\r\n   Rodr\u00edguez Banda, Jos\u00e9 Luis         6\r\n<\/pre>\n<p>En el caso de convertirlos a HTML necesitamos saltar directamente al elemento que indicamos por lo que primero lo marcamos con un anclaje cambiando la secuencia<\/p>\n<pre class=\"\">[IDX key=\"C1545\"]Reparaciones Crayon, S.L.[idx]<\/pre>\n<p>por la expresi\u00f3n<\/p>\n<pre class=\"lang:default decode:true\">&lt;span id=\"C1545\"&gt;Reparaciones Crayon, S.L.\/span&gt;<\/pre>\n<p>y luego a\u00f1adimos un \u00edndice con enlaces HTML directamente sobre el mismo.<\/p>\n<pre class=\"lang:default decode:true\">&lt;a href=\"#C1545\"&gt;Reparaciones Crayon, S.L.&lt;\/a&gt;<\/pre>\n<p>A\u00f1adiremos esta secuencia Perl al script anterior:<\/p>\n<pre class=\"decode-attributes:false lang:perl decode:true\">s{\\[IDX\\s+key=\"(.+)\"\\](.+)\\[idx\\]}{&lt;span id=\"$1\"&gt;$2&lt;\/span&gt;}g;\r\n<\/pre>\n<h5>N\u00fameros de p\u00e1gina<\/h5>\n<p>Para los n\u00fameros de p\u00e1gina basta con sustituir la expresi\u00f3n<\/p>\n<pre class=\"\">[PAG]Pag:\u00a0\u00a0 34[pag]<\/pre>\n<p>por<\/p>\n<p><noscript><a id\"pag34\">Pag:    34<\/a><\/noscript><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">&lt;span id=\"pag34\"&gt;Pag:    34&lt;\/span&gt;<\/pre>\n<p>El c\u00f3digo Perl para sustituir es el siguiente<\/p>\n<pre class=\"lang:perl decode:true \">s{\\[PAG\\]Pag.+(\\d+)\\[pag\\]}{&lt;span id=\"$1\"&gt;Pag $1&lt;\/span&gt;}g;\r\n<\/pre>\n<p>Pero si quiero que las p\u00e1ginas est\u00e9n correctamente se\u00f1aladas he de cambiar algunas cosas. Un anclaje como el que muestro arriba situar\u00eda la navegaci\u00f3n al final de la p\u00e1gina con la que estoy trabajando y prefiero que sea el comienzo de la misma lo que se muestre en este caso.<\/p>\n<p>Para ello s\u00ed que debo realizar modificaciones en el listado:<\/p>\n<ol>\n<li>Mover la numeraci\u00f3n de p\u00e1ginas del pie a la cabecera<\/li>\n<li>Para la numeraci\u00f3n de p\u00e1ginas simplemente a\u00f1adir una marca y no el n\u00famero que le corresponde. El filtro se encargar\u00e1 de crear la numeraci\u00f3n final.<\/li>\n<li>Dado que no existen las secciones y sus encabezados como tales (ahora nos limitamos a indicar el n\u00famero de p\u00e1gina en el que comienzan) ser\u00eda necesario a\u00f1adir otra marca especial, tipo anclaje, en el comienzo de la p\u00e1gina en la que est\u00e1n.<\/li>\n<li>La p\u00e1gina de cabecera puede crearse al comienzo del listado. Bastar\u00e1 con no hacer referencia a n\u00fameros de p\u00e1gina si no a marcas concretas.<\/li>\n<\/ol>\n<p>Pero todo \u00e9sto es trabajo en segundo plano. Una vez que modifique el filtro podr\u00e9 enviar los listados sin tocar nada m\u00e1s en la aplicaci\u00f3n de gesti\u00f3n antigua.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; y programas de gesti\u00f3n antiguos.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[549,64,551],"class_list":["post-1342","post","type-post","status-publish","format-standard","hentry","category-software","tag-html","tag-impresion","tag-txt2html"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=1342"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1342\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=1342"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=1342"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=1342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}