Ejemplo n.º 1
0
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"&nbsp;"

        return (result,"<span>"+first_part+"</span>"+result[first_term:] if first_part else result)
    else:
        return result
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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