Beispiel #1
0
 def nova_grupa( az, kyso, dylgo, dop):
     kyso = zaglavie( kyso)
     if dop:
         assert kyso
         assert not dylgo
         dylgo = kyso + ' ' + dop
     elif not dylgo: dylgo = kyso
     elif not kyso: kyso = dylgo
     dylgo = zaglavie( dylgo)
     igrupa = DictAttr( ime= dylgo, kyso= kyso, dop= dop, elementi= [] )
     az.grupi.append( igrupa)
     return igrupa
Beispiel #2
0
    def _nov_prevod( klas, *, fname, ime, original =None, grupa =None, roditel =None, **etiketi):
        p = klas.Prevod( fname= fname,
                grupa= grupa, roditel= roditel,
                _prevodach = klas.stoinosti)

        p.etiketi = klas.DictAttrTrans()
        for k in (etiketi.pop( 'simvoli', '') or '').strip().split():
            klas._slaga_etiket( k, True, p.etiketi)

        p.update_pre( ime= zaglavie( ime), original= original, **etiketi)
        for k in list( p.keys()):
            klas.ime2imena( k, p)

        if grupa is not None: grupa.elementi.append( p)

        q = klas.vse_prevodi.get( fname)
        if not q:
            klas.vse_prevodi[ fname] = p
        elif q.ime != ime:
            err( 'повтаря се/все:', fname, '\n', roditel, ':', ime, '\n', q.roditel, ':', q.ime)

        return p
Beispiel #3
0
def razglobi_imena( imena, rubrika, data, dirname):
    imena = (imena.replace( '\u2013','-')  #- = x2013
            .replace( '\xA0','_')
            .replace( ' ','_')
            )

    dok = False
    ime = avtor = ''
    ostatyk = ''
    opisanie = avtor_ot_opisanie = None
    bez_ime = False
    for q in rquo: rubrika = rubrika.replace( q, '')
    rubrika_ = rubrika.replace(' ','_')
    if rezlf.search( rubrika_ ):
        opisanie = imena
        m = reime.search( imena)
        if m:
            avtor_ot_opisanie = m.group(0)
        ime = zlf
        bez_ime = True
    elif regodishnina.search( imena):
        m = regodishnina.search( imena)
        ime = m.group('ime')
        avtor = m.group('avtor')
    elif rerubrika.search( rubrika ):
        opisanie = imena
        ime = rubrika_
        bez_ime = True
    else:
        imena = rezlf.sub( zlf, imena)
        imena = reakm.sub( akomika, imena)
        imena = rehs.sub( hs, imena)
        imena = reteatyr_ime.sub( r'\1\2', imena)
        #imena > ime + (tip) + avtor.opis
        #imena = imena.lstrip( rquo+rend)
        imena = imena.strip( rend)
        tipove= 'документална_радиопиеса драматизация документално_студио'.replace(' ','|')
        razdelitel = rlatcyr( '_(от|по|на)_')
        ss = re.split( requo, imena)
        if len(ss)>1:
            avtor = ss.pop(-1).strip( rend)
            if len(ss)>1: opisanie = ss.pop(0).strip( rend)
            ime = '_'.join( ss)
            razdelitel = razdelitel.lstrip('_')
            if opisanie:
                #... в романа на ... ; панорама на ...
                #Механизмът на едиквоси, разтълкуван от ... в
                if 10:
                    m = rextract( rlatcyr( '_(на|от)_') + '('+rImeIme+')', opisanie)
                    if m:
                        m,_ostavi = m
                        avtor_ot_opisanie = m.group( 2)
                    else:
                        m = rextract( '^('+rImeIme+')', opisanie)
                        if m:
                            m,_ostavi = m
                            avtor_ot_opisanie = m.group( 1)

        elif '-' in imena:
            ime,avtor = imena.split('-',1)
        else:
            ime = ''
            avtor = imena

        m = re.match( '(?P<ime>.*?)'+razdelitel+'(?P<avtor>'+rImeIme+ ')(?P<ost>.*)', avtor)
        if m:
            avtor = m.group( 'avtor').strip( rend)
            ostatyk = m.group( 'ost').strip( rend)
            if not ime:
                ime = m.group('ime')
                m = rextract( rlatcyr( tipove), ime, flags= re.IGNORECASE)
                if m:
                    m,ime = m
                    if 'док' in (m.group('tip') or '').lower(): dok = True
        else:
            ostatyk = avtor
            avtor = ''

    ime = ime.strip( rquo+rend)
    ime = (spc( ime)
            .replace( '  ',' ')
            )
    if not ime:
        ime = rubrika
        bez_ime = True

    ostatyk = ostatyk.strip( rend)
    ostatyk = rim.rim2fix( ostatyk, doX= False)
    #print( 222222222, ostatyk)
    #avtor.opis > avtor + nomer.chast (+opis)
    nomer = ''

    rchast = rlatcyr( '((част|епизод)и?|ч\.?)') #|глава
    rnomer = rim.re_nomer_extrafix

    rnomer = rnomer.replace( ')',
        ''.join( '|'+slovom[:-1]+'[аи]'
            for slovom in slovom10 #първ[аи] част/епизод
            )
            +')')

    m = rextract( '(?P<nomer>_*('+rnomer+'_(и_)?)*' +rnomer+')_?'+rchast, ostatyk, flags= re.IGNORECASE)
    if m:
        m,ostatyk = m
        nomer = m.group( 'nomer')
    else:
        m = rextract( '[-_]'+rchast+'_?(?P<nomer>'+rnomer+')', ostatyk, flags= re.IGNORECASE)
        if m:
            m,ostatyk = m
            nomer = m.group( 'nomer')

    n = slovom10.get( nomer)
    if n: nomer = n
    else:
        nomer = rim.rim2fix( nomer)
        nomer = rim.rim2int( nomer,nomer)
    #print( 333333333, ostatyk, nomer)

    ostatyk = ostatyk.strip( rend)
    m = rextract( ( rlatcyr(
            r'_? o? ((?P<g1>\d{4})_?г\.? | (?P<g3>премиера)) c?'
            .replace( 'o', r'[\[\(]')
            .replace( 'c', r'[\)\]]')
            )),
            ostatyk,
            flags= re.VERBOSE+re.IGNORECASE)
    if m:
        m,ostatyk = m
        godina = m.group( 'g1') or m.group( 'g3') and datetime.date.today().year
    else: godina = None
    ostatyk = ostatyk.strip( rend)
    #print( 444444444, ostatyk, godina)

    if not avtor: avtor = ostatyk
    if not avtor and avtor_ot_opisanie: avtor = avtor_ot_opisanie
    #avtori
    m = rextract( rImeIme, avtor)
    if m:
        m,_ostavi = m
        avtor = m.group( 0)
    else:
        if len(avtor)>40: avtor = ''

    avtor = spc( avtor)
    avtori = re.split( ' и ', avtor)
    avtori = [ re.sub( '(по )?(.+?)((народна|приказка|радиоадаптация|премиера)[ \.]?)+', r'\2',
                a.strip().strip('()'), re.IGNORECASE )
                    .replace( '[]','')
                    .strip()
                    .rstrip( rend)
                for a in avtori]
    avtori = [ a for a in avtori if a]

    avtori_kysi = []
    for a in avtori:
        avtor_imena = a.split()

        if avtor_imena:
            kys = len( avtor_imena)>1 and avtor_imena[0][0]+'.'+avtor_imena[-1] or avtor_imena[0]
            avtori_kysi.append( kys)
    avtor_kys = '-'.join( avtori_kysi)

    avtor_dylyg = '-'.join( avtori)
    dirname_cyr = filt_er( '--'.join( a for a in [ ime, avtor_dylyg, 'радио'] if a ))
    dirname = c2l( dirname_cyr)

#    [0].upper()+a[1:]
    avtori_plus = ' '.join( ''.join( zaglavie(e) for e in a.split()) for a in avtori)

    zagolemi = (dok or not sum( x.lower() in rubrika.lower() for x in 'деца приказк ВзаП'.split()) ) and 'възрастни' or ''
    dok = dok and 'док' or ''
    return locals()
Beispiel #4
0
def dai_ime( opis):
    return zaglavie( dai( opis, cyr.ime))
    for k in s_ime:
        v = opis.get(k)
        if v: break
    return v
Beispiel #5
0
    def zaredi_danni( klas, args):
        ''' - прочита всички описи
            - при преводи, обикаля всички директории и запомня кои имат преводи
              - тези от тях които нямат описи, им се правят нови
            - за всички описи
              - ако нямат име, се слага от преводи ако има
              - самопопълва звук/година от името-на-директорията
              - добавя поисканите етикети
        '''
        options = klas.options

        #################
        #зареждане на данни, заявки, и пр. - четене/оправяне на ОПИСИте

        if options.prevodi:
            if options.podrobno: prn( 'prevodi:', options.prevodi)
            for k,(v,o) in prevodi_file2ime( eutf.readlines( options.prevodi)):
                klas._nov_prevod( fname= k, ime= zaglavie(v), original= zaglavie(o), roditel= options.prevodi)
                if options.podrobno: prn( '%-40s = %s' % (k,v) )

        if options.prevodi_meta:
            info.meta_prevodi.update( meta_prevodi( options.prevodi_meta, dict= dict_lower,
                        prn= options.podrobno and prn, zaglavie= 'мета-преводи', razdelitel_v_nachaloto=True
                        ))

        info.fenc = options.filename_enc or (eutf.e_utf_stdout() and 'utf-8' or locale.getpreferredencoding())
        if options.podrobno:
            prn( 'filename_enc:', info.fenc)
            prn( 'stdout.enc:', sys.stdout.encoding, sys.stdout)
            prn( 'stderr.enc:', sys.stderr.encoding, sys.stderr)

        etiketi = {}
        for e in options.etiket or ():
            klas.procheti_etiket( e, etiketi)

        options.dirs = []
        za_pravene = {}
        for path,dirs,files in klas.obikoli( args, klas.e_za_propuskane ):
            if options.prevodi:
                for dname in dirs:
                    pname = join( path, dname)
                    if not options.simvolni and os.path.islink( pname): continue
                    p = klas.vse_prevodi.get( dname)
                    if p:
                        rpname = realpath( pname)
                        za_pravene[ rpname] = p.ime, pname

            pname = realpath( path)
            for fname in files:
                if not e_opis( fname): continue
                i = klas( pname, redove= join( path, fname), origfname= path)
                if options.podrobno: prn( i.fname)
                if options.podrobno>1: prn( i.dump() )

        for path,dirs,files in klas.obikoli( options.papka_s_opisi or () ):
            pname = realpath( path)
            for fname in files:
                if klas.e_za_propuskane( fname): continue
                i = klas( join( pname, fname), redove= join( path, fname), origfname= join( path, fname), isdir=False)
                if options.podrobno: prn( i.fname)

        for pname,(ime,fpath) in za_pravene.items():
            if pname not in info.vse:
                i = klas( pname)
                i.slaga_ime( ime)

        for k,i in sorted( info.vse.items()):
            try:
                i.samopopylva_ot_fname()
                fname = basename( i.fname)
                p = klas.vse_prevodi.get( fname)
                if p:
                    if not i.imeto or options.popravi_opisi:
                        i.slaga_ime( p.ime)
                    if p.original and not i.etiketi.original:
                        i.slaga_etiket( i.stoinosti.original, p.original )

                i.etiketi.update_pre( **etiketi)
                i.samopopylva_etiketi()
                razlika, t = i.zapis( naistina= options.zapis_opisi )
                #if razlika: print '-----------'
            except:
                print( '????', fname)
                raise