Pergunte aqui
0

Macro writer: como transferir conteúdo de seleção para variável?

perguntadas 2013-07-14 03:18:59 +0200

imagem do gravatar de Valdir Dala

Tento eliminar quebras de parágrafo incorretas (como as que aparecem em textos do projeto gutenberg), para corrigir a formatação (parágrafos verdadeiros justificados).

Como não é possível selecionar o sinal paragraph-break e eliminá-lo, quero chegar ao fim da linha e, se ali não tiver um ponto final, é sinal de que essa linha deve incorporar a próxima linha. Posso fazer isto deletando a última posição, depois de desmarcar o último caractere.

Mas o programa precisa se informar qual é o último caractere da linha. E para isto, é preciso transportar esse caractere para uma variável.

Isto feito, pretendo lançar um If do tipo: "se a variável não contiver um ponto-final, delete".

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

0

respondidas 2020-05-14 18:55:41 +0200

imagem do gravatar de kaduleite

updated 2020-05-14 19:03:37 +0200

Talvez seja legal conhecer essa extensão:Alternative dialog Find & Replace for Writer Vamos ver se eu entendi corretamente o que você quer. Pelo que eu entendi você tem um texto como o que fica quando copiamos e colamos de um PDF, com um parágrafo para cada linha e nas linhas onde não termina por ponto você quer que a quebra de parágrafo seja eliminada e que fique somente uma linha. Mas nas linhas onde finalizar por ponto é para manter a quebra. Se for isso o código abaixo deverá resolver.

Function LimpaQuebrasLinhas()
Dim oReplace, oSearch, oResult as Object
Dim oViewCursor, oCursor as Object
Dim oDocument, oDispatcher as Object
' Primeiro tira todos os parágrafos corretos mas com espaço no final
oReplace = ThisComponent.createReplaceDescriptor()
oReplace.setSearchString( "\. $" )
oReplace.setReplaceString( "." )
oReplace.SearchRegularExpression = True
ThisComponent.replaceAll( oReplace )

' Depois tira todas as marcas de parágrafo que a linha terminha por espaço
' Configura o cursor para chegar na posição dos espços no fim de parágrafo
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oCursor = oViewCursor.getText().createTextCursorByRange(oViewCursor)
oViewCursor.gotoStart(False)
oSearch = ThisComponent.createSearchDescriptor()
oSearch.SearchString = " $" ' busca primeiro parágrafos corretos mas que terminam em espaços
oSearch.SearchRegularExpression = True
' Definição dos argumentos do Dispatcher
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
args1(1).Value = true
'Executa enquanto a busca retornar resultado
Do 
    oResult = ThisComponent.findFirst(oSearch) ' encontra a ocorrência
    if isNull(oResult) Then Exit Do ' se for nula sai
    oViewCursor.gotoRange(oResult, False) ' move o cursor para o resultado
            ' colocar o cursor de texto na posição do cursor de visão
    oCursor = oViewCursor.getText().createTextCursorByRange(oViewCursor)
    oCursor.String = " "  ' escreve um espaço sobre o espaço selecionado
    oDocument = ThisComponent.CurrentController.Frame
    oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
                    ' Estende a seleção em um caractere para pegar a marca de parágrafo
        oDispatcher.executeDispatch(oDocument, ".uno:GoRight", "", 0, args1()) 
        oDispatcher.executeDispatch(oDocument, ".uno:Delete", "", 0, Array()) ' deleta a seleção
Loop Until isNull(oResult)
oViewCursor.gotoStart(False) ' move o cursor para o início
End Function

Espero ter ajudado.

Abraço,

Kadu Leite

editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2013-07-14 03:18:59 +0200

Lidas: 186 vezes

Última atualização: May 14