Example #1
0
    def setup( az):
        d2sykr = dictOrder()
        d2vse  = dictOrder()
        for a in az.dejnosti.strip().split( '\n'):
            xx = a.split()
            if not xx: continue
            k = xx[0]
            podrazb = k[0] == '*'
            k = k.replace('*', '')
            if podrazb:
                az.dejnost_podrazbirane = k

            dd = []
            sykr = []
            sykr_avto = []
            for v in xx:
                v = v.lstrip('*')
                if v[0]=='.': appendif( sykr, v[1:] )
                v = v.lstrip('.')
                if '*' in v:
                    l,r = v.split('*')
                    vv = [ l+r[:i] for i in range( len(r))]
                    extendif( dd, vv)
                    extendif( sykr_avto, vv)
                appendif( dd, v.replace('*',''))

            d2vse[ k] = dd
            dd += [ v.replace('-',' ') for v in dd if '-' in v ]
            dd += [ cyr2lat( v) for v in dd ]
            extendif( sykr, sorted( sykr_avto, key= len))
            if sykr: d2sykr[k] = sykr
        az.dejnosti = d2vse
        az.dejnosti4vse = dict_lower( (v,k)
                for k,vv in d2vse.items()
                for v in vv
                )
        az.dejnosti4vse.update( (k,k) for k in d2vse )

        az.dejnosti2sykr = dict( (k,v[0]) for k,v in d2sykr.items() )
        ds = az.dejnosti4sykr = dict( (v,k)
                for k,vv in d2sykr.items()
                for v in vv
                )
        d = '('+'|'.join( ds.keys() )+')'
        az.re_dejnost0 = '('+d+'([.+]|\.\+))*'+d+'\.'
        az.re_dejnost  = re.compile( '^'+az.re_dejnost0)    #1
        az.re_dejnost_ = re.compile( '(^| )('+ az.re_dejnost0 +'*) +')  #много

        az.dejnosti_vazhni = [ l.split()[0].replace('*','') for l in (az.dejnosti1+az.dejnosti3).strip().split( '\n') if l.strip() ]
Example #2
0
    def _init( klas):
        if info._inited: return
        info._inited = 1

        info.stoinosti = stoinosti = DictAttr_lower()
        info.stoinosti_imena = dict()
        info.rstoinosti = dict_lower()
        def kxv2kvv( d, dict_v0_k_v1 =True):
            if isinstance( d, dict):
                for k,vv in d.items():
                    vv = vv.split()
                    if dict_v0_k_v1: yield [vv[0],k]+vv[1:]
                    else: yield [k] + vv
            else:  #list
                for kvv in d:
                    yield kvv.split()

        #TODO ioformat; обедини тези kxv2kvv с meta_prevodi и може би Abbr и prevodi ??
        for kvv in kxv2kvv( klas.stoinosti0, dict_v0_k_v1= True):
            v0 = kvv[0].replace( '*','')
            k  = kvv[1]
            for v in list(kvv):
                if '-' not in v: continue
                extendif( kvv, [v.replace('-',''), v.replace('-','_')])
            kvv1 = []
            for v in kvv:
                if '*' not in v:
                    appendif( kvv1, v)
                    continue
                l,r = v.split('*')
                extendif( kvv1, [ l+r[:i] for i in range( len(r)+1)] )
            kvv = kvv1
            for v in list(kvv):
                appendif( kvv, cyr2lat( v))

            assert '*' not in k #lat
            assert '*' not in v0 #cyr

            for v in kvv:
                assert '*' not in v, v
                assert v not in stoinosti, v
                info.rstoinosti[ v] = k
                stoinosti[ v] = v0
            info.stoinosti_imena[ v0] = kvv
        #prn( 111111111, stoinosti)
        klas.nasledimi      = [ stoinosti[k] for k in klas.nasledimi ]
        klas.izvyn_etiketi  = [ stoinosti[k] for k in klas.izvyn_etiketi ]
        klas.prevodachi     = dict( (stoinosti[k],v) for k,v in klas.prevodachi.items())

        zamestiteli_po_stoinost = DictAttr()
        for et,zam in klas.zamestiteli_po_stoinost.items():
            if not callable( zam):
                rechnik = dict_lower()
                for kvv in kxv2kvv( zam, dict_v0_k_v1 =True):
                    v0 = kvv[0]
                    for v in kvv:
                        rechnik[ v ] = v0
                zam = rechnik
            etp = stoinosti.get( et,et)     #.lat = .cyr = ...
            zamestiteli_po_stoinost[ et] = zamestiteli_po_stoinost[ etp] = zam
            if etp not in klas.prevodachi: klas.prevodachi[ etp] = zam
        klas.zamestiteli_po_stoinost = zamestiteli_po_stoinost