Editoração com software livre: aplicando estilos automaticamente no Scribus

Folha de estilos é um recurso presente em todo programa moderno de desenho ou edição de texto. Com um estilo pré-definido, a gente ganha alta produtividade na formatação de texto ou gráficos: o estilo guarda todas as características que a gente quer aplicar, e a formatação é feita em segundos.

O novo Scribus já está com recursos de folha de estilo bastantes avançados e evoluindo num ritmo lento mas constante. E com a programação em Pyhton presente no Scribus, a facilidade da folha de estilos é ampliada para um novo patamar, aumentando os ganhos de produtividade em diagramação.

O comando Scribus-Python scribus.setStyle() aplica um estilo a um quadro selecionado, ou a um texto selecionado dentro de um quadro:

scribus.setStyle(estilo, quadro)

Para ajudar a aplicar este comando dentro de um script de uso geral, criei a função aplicaEstilo() para criar um nome de estilo, se não existir na folha de estilos.

def aplicaEstilo(estilo,quadro):
 # Tenta aplicar estilo
 try:
    scribus.setStyle(estilo, quadro)
 except: # Se dá erro (o estilo não existe), cria um estilo.
    scribus.createParagraphStyle(estilo)
    scribus.setStyle(estilo, quadro)
  return quadro

Dentro de um quadro de texto, deve-se selecionar o texto para aplicar o estilo. No caso de estilos de parágrafo, basta qualquer parte do parágrafo estar selecionada para o parágrafo inteiro se formatar. Isto funciona em todos os programas.

No Scribus, existe o comando scribus.selectText() para selecionar texto em quadros.

scribus.selectText(inicio, comprimento, quadro)

Mas como se saber qual parágrafo do texto iniciar e qual o comprimento do parágrafo para selecionar? Eu usei um método Python para strings de texto, .splitlines(), que devolve uma lista com as linhas do texto. Cada linha ou parágrafo termina com marca de fim-de-parágrafo. Com argumento zero, .splitlines(0) devolve a lista sem incluir a marca de fim-de-parágrafo. Com argumento 1, .splitlines(1) devolve as linhas com a marca incluída.

Agora eu uso o comando scribus.getAllText() do Scribus para pegar todo o texto e separar em uma lista de linhas. Depois, uso comandos Python len () para calcular o tamanho de cada linha (junto com a marca de fim-de-parágrafo) e assim obter a posição inicial de cada parágrafo, somando os comprimentos de cada parágrafo anterior.

No trecho de código abaixo, eu pego os tamanhos dos parágrafos até o quarto: o título de uma matéria, o subtítulo, o autor da matéria e o primeiro parágrafo. Ao manipular as atrings de texto, é necessário usar a função Python unicode() para contar como um caracter todos os caracteres acentuados, que ocupam mais de um byte.

alltext = scribus.getAllText(quadroDeTexto)
linhas = alltext.splitlines(1)
tit = len(unicode(linhas[0]))
subtit = len(unicode(linhas[1]))
aut = len(unicode(linhas[2]))
prim = len(unicode(linhas[3]))

Agora eu já posso formatar os parágrafos com estilos apropriados. Primeiro, seleciono todo o texto de um quadro ou sequência de quadro e aplico o estilo “Normal”. Aproveito para hifenizar todo o texto.

inicioTitulo = 0
comprTexto = len(unicode(alltext))
scribus.deselectAll()
scribus.selectText(inicioTitulo, comprTexto-1, quadroDeTexto)
aplicaEstilo(estiloNormal, quadroDeTexto)
scribus.hyphenateText()
scribus.deselectAll()

Repare que antes de selecionar o texto eu precisei desselecionar tudo. É uma idiossincrasia do Scribus. Se eu não fizer isto, a função scribus.selectText() não funciona corretamente.

Para calcular o próximo ponto de início da seleção, somo os valores de comprimento de cada parágrafo. Na operação, aproveito para des-hifenizar os textos que não precisam de hífen.

# Formata o título
 inicioTitulo = 0
 scribus.deselectAll()
 scribus.selectText(inicioTitulo, tit-1, quadroDeTexto)
 aplicaEstilo(estiloDoTitulo, quadroDeTexto)
 scribus.dehyphenateText()

 # Formata o subtítulo
 inicioSubTitulo = tit
 scribus.deselectAll()
 scribus.selectText(inicioSubTitulo, subtit-1, quadroDeTexto)
 aplicaEstilo(estiloDoSubtitulo, quadroDeTexto)
 scribus.dehyphenateText()

 # Formata a assinatura
 inicioAutor = tit + subtit
 scribus.deselectAll()
 scribus.selectText(inicioAutor, aut-1, quadroDeTexto)
 aplicaEstilo(estiloDoAutor, quadroDeTexto)
 scribus.dehyphenateText()

 # Formata o primeiro parágrafo
 inicioTexto = tit + subtit + aut
 scribus.deselectAll()
 scribus.selectText(inicioTexto, prim-1, quadroDeTexto)
 aplicaEstilo(estiloDoPrimeiroParagrafo, quadroDeTexto)
 scribus.deselectAll()

Com este script, posso carregar um texto em quadros e aplicar todos os estilos que me interessam em poucos segundos. Observe que título, subtítulo, autor e primeiro parágrafo já devem estar na ordem. O texto também é “limpo” de parágrafos vazios e de dois ou mais espaços entre os caracteres, no início e no final das linhas.

Baixe o script Aplica estilos 1 (2009-06-14a) para aplicar estilos. Modifique-o conforme suas necessidades, mudando o nomes dos estilos ou as medidas gráficas no início do código.

Na sequência abaixo, veja a script em ação. Observe que a formatação dos estilos já deve estar feita antecipadamente conforme o projeto gráfico do veículo. O script não faz isto.

About José Antonio Meira da Rocha

Jornalista, professor das áreas de Editoração e de Mídias Digitais na Universidade Federal de Santa Maria, campus cidade de Frederico Westphalen, Rio Grande do Sul, Brasil. Doutor em Design pelo Programa de Pós-Graduação em Design (PGDesign)/Universidade Federal do Rio Grande do Sul (UFRGS), Porto Alegre, Brasil, 2023. Mestre em Mídias pela UNISINOS, São Leopoldo, RS, Brasil, 2003. Especialista em Informática na Educação, Unisinos, 1976.