def highlight(text_parts,match,limit_length=False): ''' Resalta la parte de una cadena que coincide con otra dada ''' separators = u"".join({i for i in match if i in SEPPER or i=="'"}) parts = list(multipartition(match,separators)) parts_type = [0 if part in separators else 1 if slugify(part) in text_parts else -1 for part in parts] parts_type.extend([0, 0]) result = [] strong = False for position, part in enumerate(parts): # abre tag si toca if not strong and parts_type[position]==1: result.append("<strong>") strong = True result.append(escape(part, True)) # cierra tag si toca if strong and parts_type[position+1]<1 and not (parts_type[position+1]==0 and parts_type[position+2]==1): result.append("</strong>") strong = False result = u"".join(result) if limit_length: #si se quiere acortar el nombre del archivo para que aparezca al principio la primera palabra resaltada first_term = result.find("<strong>") first_part = None if first_term>15 and len(match)>25: first_part = result[:first_term] if first_part[-1]==" ": #hace que el ultimo espacio siempre se vea first_part = first_part[:-1]+u" " return (result,"<span>"+first_part+"</span>"+result[first_term:] if first_part else result) else: return result
def highlight(text,match,length=False): ''' Resalta la parte de una cadena que coincide con otra dada ''' t=text.split(" ") result=u"".join("<strong>%s</strong>" % part if slugify(part) in t else part for part in multipartition(match,u"".join({i for i in match if i in SEPPER}))) if length: #si se quiere acortar el nombre del archivo para que aparezca al principio la primera palabra resaltada first_term=result.find("<strong>") return (result,result if first_term<10 or len(text)<50 else result[:5]+"<span>...</span>"+result[first_term:]) else: return result
def choose_filename(f,text=False): ''' Elige el archivo correcto ''' srcs = f['file']['src'] fns = f['file']['fn'] hist= "" chosen="" maxCount = 0 hasText = 0 for hexuri,src in srcs.items(): if 'bl' in src and src['bl']!=0: continue srcfns = src['fn'] for crc,srcfn in srcfns.items(): fnn = fns[crc]['n'] if len(fnn.strip())==0: continue thisHasText=0 if 'c' in fns[crc]: fns[crc]['c']+=srcfn['m'] else: fns[crc]['c']=srcfn['m'] if text: if fnn.upper().find(text.upper())!=-1: thisHasText = 2000 else: matches = 0 for word in [re.escape(w) for w in text.split(" ")]: matches += len(re.findall(r"/((?:\b|_)%s(?:\b|_))/i"%word, fnn)) if matches>0: thisHasText = 1000 + matches f['file']['fn'][crc]['tht'] = thisHasText better = fns[crc]['c']>maxCount if thisHasText > hasText or (better and thisHasText==hasText): hasText = thisHasText chosen = crc maxCount = fns[crc]['c'] f['view']['url'] = mid2url(hex2mid(f['file']['_id'])) if chosen!="": filename = fns[chosen]['n'] ext = fns[chosen]['x'] else: #uses filename from src srcurl = "" for crc,srcfn in srcfns.items(): if src['url'].find("/")!=-1: srcurl = src['url'] if srcurl=="": return srcurl = srcurl[srcurl.rfind("/")+1:] ext = srcurl[srcurl.rfind(".")+1:] filename = srcurl[0:srcurl.rfind(".")] if not ext in current_app.config["EXTENSIONS"].keys(): filename += ext ext="" nfilename = filename else: #clean filename end = filename.upper().rfind("."+ext.upper()) if end == -1: nfilename = filename else: nfilename = filename.strip()[0:end] f['view']['fn'] = filename f['view']['efn'] = filename.replace(" ", "%20") f['view']['fnx'] = ext #nombre del archivo con las palabras que coinciden con la busqueda resaltadas if not text: f['view']['fnh']=filename else: separators = u"".join({i for i in filename if not unicodedata.category(i)[0] in ("N","L")}) separated_text = tuple(multipartition(text.lower(), separators)) f['view']['fnh'] = u"".join( (u"<strong>%s</strong>" % filename_part) if filename_part.lower() in separated_text and not filename_part in separators else filename_part for filename_part in multipartition(filename, separators) ) if nfilename.find(" ")==-1: nfilename = nfilename.replace(".", " ") nfilename = nfilename.replace("_", " ") f['view']['nfn'] = nfilename