{"id":779,"date":"2009-06-13T18:12:39","date_gmt":"2009-06-13T21:12:39","guid":{"rendered":"http:\/\/meiradarocha.jor.br\/news\/?p=779"},"modified":"2009-06-15T08:56:48","modified_gmt":"2009-06-15T11:56:48","slug":"editoracao-com-software-livre-aplicando-estilos-automaticamente-no-scribus","status":"publish","type":"post","link":"https:\/\/meiradarocha.jor.br\/news\/2009\/06\/13\/editoracao-com-software-livre-aplicando-estilos-automaticamente-no-scribus\/","title":{"rendered":"Editora\u00e7\u00e3o com software livre: aplicando estilos automaticamente no Scribus"},"content":{"rendered":"<p><strong>Folha de estilos<\/strong> \u00e9 um recurso presente em todo programa moderno de desenho ou edi\u00e7\u00e3o de texto. Com um estilo pr\u00e9-definido, a gente ganha alta produtividade na formata\u00e7\u00e3o de texto ou gr\u00e1ficos: o estilo guarda todas as caracter\u00edsticas que a gente quer aplicar, e a formata\u00e7\u00e3o \u00e9 feita em segundos.<\/p>\n<p>O novo <strong>Scribus <\/strong>j\u00e1 est\u00e1 com recursos de folha de estilo bastantes avan\u00e7ados e evoluindo num ritmo lento mas constante. E com a programa\u00e7\u00e3o em <strong>Pyhton <\/strong>presente no <strong>Scribus<\/strong>, a facilidade da folha de estilos \u00e9 ampliada para um novo patamar, aumentando os ganhos de produtividade em diagrama\u00e7\u00e3o.<!--more--><\/p>\n<p>O comando Scribus-Python <strong>scribus.setStyle() <\/strong>aplica um estilo a um quadro selecionado, ou a um texto selecionado dentro de um quadro:<\/p>\n<pre>scribus.setStyle(estilo, quadro)<\/pre>\n<p>Para ajudar a aplicar este comando dentro de um <em>script <\/em>de uso geral, criei a fun\u00e7\u00e3o <strong>aplicaEstilo() <\/strong>para criar um nome de estilo, se n\u00e3o existir na folha de estilos.<\/p>\n<pre>def aplicaEstilo(estilo,quadro):\r\n # Tenta aplicar estilo\r\n try:\r\n    scribus.setStyle(estilo, quadro)\r\n except: # Se d\u00e1 erro (o estilo n\u00e3o existe), cria um estilo.\r\n    scribus.createParagraphStyle(estilo)\r\n    scribus.setStyle(estilo, quadro)\r\n  return quadro<\/pre>\n<p>Dentro de um quadro de texto, deve-se selecionar o texto para aplicar o estilo. No caso de estilos de par\u00e1grafo, basta qualquer parte do par\u00e1grafo estar selecionada para o par\u00e1grafo inteiro se formatar. Isto funciona em todos os programas.<\/p>\n<p>No Scribus, existe o comando <strong>scribus.selectText()<\/strong> para selecionar texto em quadros.<\/p>\n<pre>scribus.selectText(inicio, comprimento, quadro)<\/pre>\n<p>Mas como se saber qual par\u00e1grafo do texto iniciar e qual o comprimento do par\u00e1grafo para selecionar? Eu usei um m\u00e9todo Python para strings de texto, <strong>.splitlines()<\/strong>, que devolve uma lista com as linhas do texto. Cada linha ou par\u00e1grafo termina com marca de fim-de-par\u00e1grafo. Com argumento zero, <strong>.splitlines(0) <\/strong>devolve a lista sem incluir a marca de fim-de-par\u00e1grafo. Com argumento 1, <strong>.splitlines(1)<\/strong> devolve as linhas com a marca inclu\u00edda.<\/p>\n<p>Agora eu uso o comando <strong>scribus.getAllText()<\/strong> do Scribus para pegar todo o texto e separar em uma lista de linhas. Depois, uso comandos Python <strong>len ()<\/strong> para calcular o tamanho de cada linha (junto com a marca de fim-de-par\u00e1grafo) e assim obter a posi\u00e7\u00e3o inicial de cada par\u00e1grafo, somando os comprimentos de cada par\u00e1grafo anterior.<\/p>\n<p>No trecho de c\u00f3digo abaixo, eu pego os tamanhos dos par\u00e1grafos at\u00e9 o quarto: o t\u00edtulo de uma mat\u00e9ria, o subt\u00edtulo, o autor da mat\u00e9ria e o primeiro par\u00e1grafo. Ao manipular as atrings de texto, \u00e9 necess\u00e1rio usar a fun\u00e7\u00e3o Python <strong>unicode() <\/strong>para contar como <em>um <\/em>caracter todos os caracteres acentuados, que ocupam mais de um byte.<\/p>\n<pre>alltext = scribus.getAllText(quadroDeTexto)\r\nlinhas = alltext.splitlines(1)\r\ntit = len(unicode(linhas[0]))\r\nsubtit = len(unicode(linhas[1]))\r\naut = len(unicode(linhas[2]))\r\nprim = len(unicode(linhas[3]))<\/pre>\n<p>Agora eu j\u00e1 posso formatar os par\u00e1grafos com estilos apropriados. Primeiro, seleciono todo o texto de um quadro ou sequ\u00eancia de quadro e aplico o estilo &#8220;Normal&#8221;. Aproveito para hifenizar todo o texto.<\/p>\n<pre>inicioTitulo = 0\r\ncomprTexto = len(unicode(alltext))\r\nscribus.deselectAll()\r\nscribus.selectText(inicioTitulo, comprTexto-1, quadroDeTexto)\r\naplicaEstilo(estiloNormal, quadroDeTexto)\r\nscribus.hyphenateText()\r\nscribus.deselectAll()<\/pre>\n<p>Repare que antes de selecionar o texto eu precisei <strong>desselecionar tudo<\/strong>. \u00c9 uma idiossincrasia do Scribus. Se eu n\u00e3o fizer isto, a fun\u00e7\u00e3o <strong>scribus.selectText() <\/strong><em> <\/em>n\u00e3o funciona corretamente.<\/p>\n<p>Para calcular o pr\u00f3ximo ponto de in\u00edcio da sele\u00e7\u00e3o, somo os valores de comprimento de cada par\u00e1grafo. Na opera\u00e7\u00e3o, aproveito para des-hifenizar os textos que n\u00e3o precisam de h\u00edfen.<\/p>\n<pre># Formata o t\u00edtulo\r\n inicioTitulo = 0\r\n scribus.deselectAll()\r\n scribus.selectText(inicioTitulo, tit-1, quadroDeTexto)\r\n aplicaEstilo(estiloDoTitulo, quadroDeTexto)\r\n scribus.dehyphenateText()\r\n\r\n # Formata o subt\u00edtulo\r\n inicioSubTitulo = tit\r\n scribus.deselectAll()\r\n scribus.selectText(inicioSubTitulo, subtit-1, quadroDeTexto)\r\n aplicaEstilo(estiloDoSubtitulo, quadroDeTexto)\r\n scribus.dehyphenateText()\r\n\r\n # Formata a assinatura\r\n inicioAutor = tit + subtit\r\n scribus.deselectAll()\r\n scribus.selectText(inicioAutor, aut-1, quadroDeTexto)\r\n aplicaEstilo(estiloDoAutor, quadroDeTexto)\r\n scribus.dehyphenateText()\r\n\r\n # Formata o primeiro par\u00e1grafo\r\n inicioTexto = tit + subtit + aut\r\n scribus.deselectAll()\r\n scribus.selectText(inicioTexto, prim-1, quadroDeTexto)\r\n aplicaEstilo(estiloDoPrimeiroParagrafo, quadroDeTexto)\r\n scribus.deselectAll()<\/pre>\n<p>Com este <em>script<\/em>, posso carregar um texto em quadros e aplicar todos os estilos que me interessam em poucos segundos. Observe que t\u00edtulo, subt\u00edtulo, autor e primeiro par\u00e1grafo j\u00e1 devem estar na ordem. O texto tamb\u00e9m \u00e9 &#8220;limpo&#8221; de par\u00e1grafos vazios e de dois ou mais espa\u00e7os entre os caracteres, no in\u00edcio e no final das linhas.<\/p>\n<p>Baixe o <em>script <\/em><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/Aplica-estilos-1-2009-06-14a.py\"><\/a><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/Aplica-estilos-1-2009-06-14a.py\">Aplica estilos 1 (2009-06-14a)<\/a> para aplicar estilos. Modifique-o conforme suas necessidades, mudando o nomes dos estilos ou as medidas gr\u00e1ficas no in\u00edcio do c\u00f3digo.<\/p>\n<p>Na sequ\u00eancia abaixo, veja a <em>script <\/em>em a\u00e7\u00e3o. Observe que a formata\u00e7\u00e3o dos estilos j\u00e1 deve estar feita antecipadamente conforme o projeto gr\u00e1fico do ve\u00edculo. O <em>script <\/em>n\u00e3o faz isto.<\/p>\n<div class=\"gallery\"><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-antes-de-estilos.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"101\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-antes-de-estilos-150x101.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-792\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-antes-de-estilos-150x101.jpg 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-antes-de-estilos-300x202.jpg 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-antes-de-estilos-768x516.jpg 768w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-antes-de-estilos.jpg 920w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-792'>\n\t\t\t\tMat\u00e9ria antes da aplica\u00e7\u00e3o dos estilos\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-793\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos-150x150.jpg 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos-300x300.jpg 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos-36x36.jpg 36w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos-115x115.jpg 115w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/script-de-aplicar-estilos.jpg 438w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-793'>\n\t\t\t\tScript de aplicar estilos\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-com-estilos.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"106\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-com-estilos-150x106.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-794\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-com-estilos-150x106.jpg 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-com-estilos-300x212.jpg 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-com-estilos-768x543.jpg 768w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2009\/06\/materia-com-estilos.jpg 868w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-794'>\n\t\t\t\tMat\u00e9ria com estilos aplicados\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Folha de estilos \u00e9 um recurso presente em todo programa moderno de desenho ou edi\u00e7\u00e3o de texto. Com um estilo pr\u00e9-definido, a gente ganha alta produtividade na formata\u00e7\u00e3o de texto [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,25,15,14,16],"tags":[],"class_list":["post-779","post","type-post","status-publish","format-standard","hentry","category-design-grafico","category-diagramacao","category-editoracao","category-python","category-scribus"],"_links":{"self":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/comments?post=779"}],"version-history":[{"count":0,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/779\/revisions"}],"wp:attachment":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/media?parent=779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/categories?post=779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/tags?post=779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}