Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.97 and 1.47.2.98

version 1.47.2.97, 2008/09/02 12:00:06 version 1.47.2.98, 2008/09/03 11:13:44
Line 728  class MPIWGProject(CatalogAware,Folder): Line 728  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)
         return pt()          return pt()
             
     def getGetNeighbourhood(self,wordStr, length=100,tagging=True):  
         """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte  
         alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden   
         case insensitive gesucht  
         @param wordStr: string mit Worten getrennt durch Leerzeichen, Phrasen sind mit " gekennzeichnet  
                         "eine phrase", "*"  bezeichnet wildcards und wird ignoriert"  
         @param length: optional, default wert 100, 2*length ist die groesse der Umgebung  
         @param tagging: optional default wert true, kein span tag wird erzweugt falls tag=false  
         """  
           
         ret=[] # nimmt das Array auf, dass spaeter zurueckgegeben wird  
         ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt  
           
         def isInRanges(nr,length):  
             """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck,   
             -1, wenn kein Treffer  
               
             @param nr: Position die geprueft werden soll  
             @param length: Laenge des Wortes das geprueft werden soll  
             """  
             for x in ranges:  
                 if (x[0]<=nr) and (nr < (x[1]-length)):  
                     return ranges.index(x)  
             return -1  
                   
         # deal with phrases, in Phrasen werden die Leerzeichen durch "_" ersetzt.  
         def rep_empty(str):  
             x= re.sub(" ","_",str.group(0))  
             return re.sub("\"","",x)  
               
         wordStr=re.sub("\".*?\"", rep_empty,wordStr)#ersetze leerzeichen in " " durch "_" und loesche "  
           
         #deal with wildcards, for our purposes it is enough to delete the wildcard   
         wordStr=wordStr.replace("*","")  
           
         words=wordStr.split(" ")  
         #if not words is ListType:  
         #   words=[words]  
               
         txt=self.harvest_page()  
         if not txt:  
             return ret  
         txt=re.sub("<.*?>", "", txt) # loesche alle Tags  
         for word in words:  
             word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "  
             pos=0  
               
             n=txt.lower().count(word.lower()) # wie oft tritt das Wort auf  
   
             for i in range(n):  
                 pos=txt.lower().find(word.lower(),pos)  
   
                 if pos > 0:  
                     x=max(0,pos-length)  
                     y=min(len(txt),pos+length)  
                     
                       
                     #is word already in one of the results  
                     nr=isInRanges(pos,len(word))  
                     if nr >=0:# word ist in einer schon gefunden Umgebung, dann vergroessere diese  
                         x=min(ranges[nr][0],x)  
                         y=max(ranges[nr][1],y)  
                 
                     str=txt[x:y]  
                   
                     if nr >=0: # word ist in einer schon gefunden Umgebung  
                         ranges[nr]=(x,y) # neue Position der Umgebung  
   
                         ret[nr]=str # neue Umgebung  
                     else: # andernfalls neue Umgebung hinzufuegen  
                         ranges.append((x,y))  
   
                         ret.append(str)  
                       
                     pos=pos+len(word)  
                 else:  
                     break;  
                   
         # now highlight everything          
         if tagging:  
             for x in range(len(ret)):  
                 for word in words:  
                     repl=re.compile(word,re.IGNORECASE)  
                     ret[x]=repl.sub(""" <span class="found">%s</span>"""%word.upper(),ret[x])  
   
         return ret  
                                                                   
     def harvest_page(self,context=None):      def harvest_page(self,context=None):
         """seite fuer harvesting fuer die Projektsuche"""          """seite fuer harvesting fuer die Projektsuche"""

Removed from v.1.47.2.97  
changed lines
  Added in v.1.47.2.98


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>