[RESUELTO]Estructuración código python

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Satsuki
Mensajes: 32
Registrado: Mar Sep 15, 2009 5:07 pm

[RESUELTO]Estructuración código python

Mensaje por Satsuki »

Hola
Quería simplificar y poner el código python de manera más sencilla, pero a la hora de declarar "class" me da fallos y establecer por "def" no se hacerlo muy bien.

Una parte del código sería el siguiente:

Código: Seleccionar todo


import uno
import string
import socket
from com.sun.star.awt.FontWeight import BOLD

def div( ):

	
	oDoc = XSCRIPTCONTEXT.getDocument()
	oCC = oDoc.getCurrentController()   
  	oSels = oCC.getSelection()           
  	Selection = oSels.getByIndex(0)
  	strTmp = Selection.getString()
        oText = oDoc.Text

	HOST = ''    # The remote host
	PORT = 8001           # The same port as used by the server

	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((HOST, PORT))
	
	div = strTmp.split();
  	for i in range(len(div)):		
	    part=div[i]	
            s.send(part.encode('utf_8'))
   	    data = s.recv(1024)
            convert=int(data)

	#Se realiza una divisón por los puntos
        punto = strTmp.split(".");
        for i in range (len(punto)):
	    if punto[i] != "":
              blancos=punto[i].split(); # Se descompone la frase en palabras
              #Parte de código para dividir 2 en 2
              algo=len(blancos)-1 #Longitud de la frase -1 
	      for k in range(algo):			  
                 part2= '"' + blancos[k] + " " + blancos[k+1] + '"' #Actual más siguiente (2 en 2)
                 s.send(part2.encode('utf_8'))
	   	 data2 = s.recv(1024)
                 convert2=int(data2)
           	
              #Parte de código para dividir 3 en 3
              algo3=len(blancos)-2 #Longitud de la frase -3 
              for k in range(algo3):			  
                 part3= '"' + blancos[k] + " " + blancos[k+1] + " " + blancos[k+2] + '"' #Actual más siguiente (3 en 3)
                 s.send(part3.encode('utf_8'))
	   	 data3 = s.recv(1024)
                 convert3=int(data3)

              #Parte de código para dividir 4 en 4
              algo4=len(blancos)-2 #Longitud de la frase -4
              for k in range(algo4):			  
                 part4= '"' + blancos[k] + " " + blancos[k+1] + " " + blancos[k+2] + " " + blancos[k+3] + '"' #Actual más siguiente (3 en 3)
                 s.send(part4.encode('utf_8'))
	   	 data4 = s.recv(1024)
                 convert4=int(data4)
	s.close()
    	return None
Lo que quiero es llamar dentro de cada parte donde divido el texto al siguiente código dentro de una función, para no tener que pegar en cada parte el mismo código

Código: Seleccionar todo

if convert < 1000:
              RDesc = oDoc.createSearchDescriptor()
              RDesc.SearchString = part
              Ranges = oDoc.findAll(RDesc)
              for i in range(Ranges.Count):
                Range = Ranges.getByIndex(i)
                Starts = oText.compareRegionStarts(Range, Selection)
                Ends = oText.compareRegionEnds(Range, Selection)
                if (Starts < 1) and (Ends > -1):
                   Range.CharWeight = BOLD
		   Range.setPropertyValue( "CharColor", 16711680)   
Gracias
Última edición por Satsuki el Mar Dic 15, 2009 9:58 pm, editado 1 vez en total.
OpenOffice 3.1.0 en Ubuntu 8.04
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Estructuración código python

Mensaje por FJCC-ES »

Por ejemplo

Código: Seleccionar todo

import uno
from com.sun.star.awt.FontWeight import BOLD 

def Main():
  oDoc = XSCRIPTCONTEXT.getDocument()
  part2 = "test"
  MakeBoldandColor(oDoc, part2)

def MakeBoldandColor(Doc, part):
  oCC = Doc.getCurrentController()
  oSels = oCC.getSelection()
  Selection = oSels.getByIndex(0)
  RDesc = Doc.createSearchDescriptor()
  RDesc.SearchString = part
  oText = Doc.Text
  Ranges = Doc.findAll(RDesc)
  for i in range(Ranges.Count):
    Range = Ranges.getByIndex(i)
    Starts = oText.compareRegionStarts(Range, Selection)
    Ends = oText.compareRegionEnds(Range, Selection)
    if (Starts < 1) and (Ends > -1):
      Range.CharWeight = BOLD
      Range.setPropertyValue("CharColor", 16711680)

FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Estructuración código python

Mensaje por FJCC-ES »

Usando un "class"

Código: Seleccionar todo

import uno
from com.sun.star.awt.FontWeight import BOLD 

def Main():
  oDoc = XSCRIPTCONTEXT.getDocument()
  oCC = oDoc.getCurrentController()
  oSels = oCC.getSelection()
  Selection = oSels.getByIndex(0)
  part2 = "test"
  TargetText = BoldColor(oDoc, Selection, part2)
  TargetText.makebold()

class BoldColor():
  def __init__(self, Doc, Select, part):
    self.target = part
    self.select_rng = Select
    self.Doc = Doc

  def makebold(self):
    RDesc = self.Doc.createSearchDescriptor()
    RDesc.SearchString = self.target
    oText = self.Doc.Text
    Ranges = self.Doc.findAll(RDesc)
    for i in range(Ranges.Count):
      Range = Ranges.getByIndex(i)
      Starts = oText.compareRegionStarts(Range, self.select_rng)
      Ends = oText.compareRegionEnds(Range, self.select_rng)
      if (Starts < 1) and (Ends > -1):
        Range.CharWeight = BOLD
        Range.setPropertyValue("CharColor", 16711680)
Satsuki
Mensajes: 32
Registrado: Mar Sep 15, 2009 5:07 pm

Re: Estructuración código python

Mensaje por Satsuki »

Muchas gracias
Me ha venido muy bien el código con class
OpenOffice 3.1.0 en Ubuntu 8.04
Responder