Example #1
0
def main():

    s1 = "Hen linell bell nad yw'n bod,"
    s2 = "Hen derfyn nad yw'n darfod."

    s1 = "Talog, boed law, boed heulwen, - y saif hi"
    s2 = "Er oes faith, anniben;"

    # s1 = "Wedi blwng ymosod blin, - encilio:"
    # s2 = "Wedi'n creithio dianc i'r eithin."

    s1 = "A'u gweld yn eu dillad gwaith - trwy'r oriau"
    s2 = "Yn rhwygo o greigiau eu goreugwaith"

    # s1 = "Mae antur dan y mintys - ac anial"
    # s2 = "Yw'r creithiau mâl lle bu'r crythau melys."

    s1 = "Wele rith fel ymyl rhod - o'n cwmpas,"
    s2 = "Campwaith dewin hynod;"

    s1 = "Rhwydd gamwr, hawdd ei gymell - i'r mynydd"
    s2 = "a'r mannau anghysbell"

    cwpled = Cwpled(Llinell(s1), Llinell(s2))

    dad = DadansoddwrPennill()
    cwc = dad.oes_cwpled_cywydd(cwpled)
    tod = dad.oes_toddaid(cwpled)
    tob = dad.oes_toddaid(cwpled, byr=True)
    toh = dad.oes_toddaid(cwpled, hir=True)
    if cwc[0]:
        print lliw.cyan('CWC')
        for ad in cwc[1]:
            print ad
        print cwc[2]
    elif tod[0]:
        print lliw.cyan('TOD')
        for ad in tod[1]:
            print ad
        print tod[2]
    elif tob[0]:
        print lliw.cyan('TOB')
        for ad in tob[1]:
            print ad
        print tob[2]
    elif toh[0]:
        print lliw.cyan('TOH')
        for ad in toh[1]:
            print ad
        print toh[2]
    else:
        print lliw.cyan('DIM')
        for ad in tob[1]:
            print ad
        print tob[2]
Example #2
0
def run_demo(verbose=True):

    dad = Dadansoddwr()
    for key in [
            'croes',
            'croes_o_gyswllt',
            'traws',
            'traws_fantach',
            'llusg',
            'llusg_lafarog',
            'llusg_odl_gudd',
            'llusg_odl_ewinog',
            'sain',
            'sain_odl_gudd',
            'sain_odl_ewinog',
            'sain_lafarog',
            'sain_o_gyswllt',
            'sain_gadwynog',
            'trychben',
            'cysylltben',
            'seingroes',
            # 'trawsgroes',
            'seindraws',
            'croeslusg',
            'seinlusg',
            'trawslusg',
    ]:
        call(["clear"])
        val = llinellau[key]
        print '=============================='
        print key.upper()
        print '=============================='
        for s in val:
            ad = dad.oes_cynghanedd(Llinell(s))
            if verbose:
                print ad
            else:
                print lliw.magenta(ad.cynghanedd) + ': ' + s.strip()
            print
        try:
            aros = raw_input(">> bwrwch y dychwelwr i barhau ...")
        except KeyboardInterrupt:
            print
            return
Example #3
0
def run_demo(verbose=True):

    dad = DadansoddwrPennill()
    for key in [
            'cwpled_cywydd',
            'toddaid_byr',
            'toddaid',
            'toddaid_hir',
            'cywydd',
            'englyn',
            'cyhydedd_nawban',
            # 'hir_a_thoddaid'
    ]:
        val = penillion[key]
        for s in val:
            call(["clear"])
            print '========================================'
            print key.upper()
            print '========================================'
            llinynnau = s.split('\n')
            llinellau = [Llinell(s) for s in llinynnau]
            pennill = Pennill(llinellau)

            ateb = dad.oes_mesur(pennill)
            if ateb:
                print lliw.cyan(ateb[0])
                for adro in ateb[1]:
                    if verbose:
                        print adro
                    else:
                        print lliw.magenta(
                            adro.cynghanedd) + ': ' + adro.llinell.llinyn(
                            ).strip()
            else:
                print lliw.magenta('DIM')
            print '========================================'
            print
            try:
                aros = raw_input(">> bwrwch y dychwelwr i barhau ...")
            except KeyboardInterrupt:
                print
                return
            continue
Example #4
0
 def test_llusg(self):
     for s in self.llinellau:
         ad = pe.oes_cynghanedd(Llinell(s))
         self.assertEqual(ad.cynghanedd, 'LLU')
Example #5
0
 def test_sain(self):
     for s in self.llinellau:
         ad = pe.oes_cynghanedd(Llinell(s))
         self.assertEqual(ad.cynghanedd, 'SAI')
Example #6
0
 def test_traws(self):
     for s in self.llinellau:
         ad = pe.oes_cynghanedd(Llinell(s))
         self.assertEqual(ad.cynghanedd, 'TRA')
Example #7
0
 def test_croes(self):
     for s in self.llinellau:
         ad = pe.oes_cynghanedd(Llinell(s))
         self.assertEqual(ad.cynghanedd, 'CRO')
Example #8
0
def main():
    dad = Dadansoddwr()
    s = None
    # s = "Gwr enwog yw o ran gwaith"		# methiant: croes-o-gyswllt (hefyd yn traws-fantach)
    # s = "Si'r oerwynt a sêr araul"		# cdi
    # s = "Ochain cloch a chanu clir"
    # s = "Awdur mad a dramodydd"
    # s = "Beiddgar yw geiriau cariad"
    # s = "Un distaw ei wrandawiad"
    # s = "Gwynt y rhew yn distewi"
    # s = "Y mae arogl yn goglais"
    # s = "Pell ydyw coed yr ellyll"
    # s = "Y mae Morfudd yn cuddio"
    # s = "Yr haul ar dawel heli"
    # s = "Y brawd o bellafion bro"
    # s = "Awdur mad yw'r dramodydd"
    # s = "Gwynt y rhew yn distewra"
    # s = "Y mae Morfudd yn cuddio"
    # s = "Heddychwr gŵr rhagorol"
    # s = "Cân ddiddig ar frig y fron"
    # s = "Ochain cloch a chanu clir"
    # s = "canlyniad cariad yw cosb"
    # s = "Ni all lladd ond ennyn llid"
    # s = "Cân hardd croyw fardd Caerfyrddin"
    # s = "Mae'n gas gennyf dras y dref"
    # s = "Dy fab rhad O! Dad yw ef"		# methiant!
    # s = "Galarnad groch a chloch leddf"
    # s = "Bydd sug i'r grug a'r egin"
    # s = "Fe ddaeth pob croes i'w oes ef"
    # s = "Canlyniad cariad yw cosb"
    # s = "Ymysg y bedw yn ddedwydd"
    # s = "da oedd bardwn dydd bwrdais,"
    # s = "cloch y ffair ciliwch o'i ffordd."
    # s = "dwyglust feinion aflonydd"
    # s = "ail y carw olwg gorwyllt"
    # s = "y cawn ar lan Conwy'r wledd"
    # s = "Wele rith fel ymyl rhod"
    # s = "o'n cwmpas, campwaith"
    # s = "Hen derfyn nad yw'n darfod."
    # s = "Trech wyt na Christ yng ngwlad y Cristion"
    # s = "Hyd yr êl yr hylithr awelon,"
    # s = "Hyd y tywyn haul, duw wyt yn hon."
    # s = "Talog, boed law, boed heulwen"
    # s = "Ond hiroes yw braint derwen"
    # s = "Hel a didoli diadell"
    # s = "Trydar mwyn yr adar mynydd"
    # s = "Un dydd gwelais brydydd gwiw"
    # s = "Gweled y pren aeddfed, praff"
    # s = "Ac yma bu cydnabod"
    # s = "Gwr amhur yn sur ei sen"
    # s = "Fe ddaeth pob croes i'w oes ef"
    # s = "Golud a gwae Gwlad y Gân" # CYFATEBIAETH GAIR-AM-AIR = GWENDID
    # s = "Nid â dy gariad o gof"
    # s = "Eu plaid yw duw rhai drwy'u hoes"
    # s = "Wedi blwng ymosod blin"
    s = "Rhwydd gamwr, hawdd ei gymell"
    s = "i'r mynydd a'r mannau"
    s = "Cain yw awen cân eos"
    if s:
        print '++++++++++++++++++++++++++++++'
        print s
        ll = Llinell(s)
        print dad.oes_cynghanedd(ll)
Example #9
0
def main(args=None):

    # dechrau
    log.info('peiriant: dechrau')

    # parser = OptionParser(usage="%prog [-v] [-q] [-d] [llinyn] [-i infile] [-o outfile]", version="%prog: fersiwn 1.0", add_help_option=False)
    parser = OptionParser(
        usage="%prog [-v] [-q] [-d] [-p] [-r] [llinyn] [-i infile]",
        version="%prog: fersiwn 0.1",
        add_help_option=False)

    parser.add_option("-d",
                      "--demo",
                      action="store_true",
                      dest="demo",
                      help="showan off")
    parser.add_option("-p",
                      "--penillion",
                      action="store_true",
                      dest="demo_penillion",
                      help="mwy o showan off")
    parser.add_option("-v",
                      "--verbose",
                      action="store_true",
                      dest="verbose",
                      help="allbwn amleiriog")
    parser.add_option("-q",
                      "--quiet",
                      action="store_false",
                      dest="verbose",
                      help="allbwn cryno")
    parser.add_option("-r",
                      "--rhyddiaith",
                      action="store_true",
                      dest="rhyddiaith",
                      help="mewnbwn rhyddiaith")
    parser.add_option("-i", "--input", dest="infile", help="ffeil mewnbwn")
    parser.add_option("-h", "--help", action="help", help="cymorth")
    parser.set_defaults(verbose=True, demo=False, rhyddiaith=False)

    (options, args) = parser.parse_args()

    # dosrannu'r dewisiadau
    llinyn = ''
    if not args:
        args = sys.argv[1:]
    else:
        llinyn = args[0]

    # 1. llinyn unigol neu demos
    if llinyn:
        dad = Dadansoddwr()
        adro = dad.oes_cynghanedd(Llinell(llinyn))
        if options.verbose:
            print adro
        else:
            print lliw.magenta(adro.cynghanedd) + ': ' + llinyn.strip()
        return

    # 2. demos
    if options.demo:
        import demo
        demo.run_demo(verbose=options.verbose)
        return

    if options.demo_penillion:
        import demo_penillion
        demo_penillion.run_demo(verbose=options.verbose)
        return

    # 3. darllen o ffeil
    if options.infile:

        # rhyddiaith (hac, ond ok)
        if options.rhyddiaith:
            with codecs.open(options.infile, "r", "utf-8") as f:
                s = f.read()
            br = s.split('.')
            br = [b.strip() for b in br]
            brawddegau = []
            for b in br:
                if len(b) > 0:
                    brawddegau.append(b + u'.')
            print('----------------------------------------')

            dad = Dadansoddwr()

            for b in brawddegau:
                geiriau = [Gair(s) for s in b.split(' ')]
                ns = 0
                idx_ch = 0
                idx_dd = 1
                rhestr = []
                llinellau = []
                while idx_dd < len(geiriau):
                    while idx_dd < len(geiriau) and sum(
                        [g.nifer_sillau()
                         for g in geiriau[idx_ch:idx_dd]]) < 7:
                        rhestr.append(geiriau[idx_dd])
                        idx_dd = idx_dd + 1
                    while sum(
                        [g.nifer_sillau()
                         for g in geiriau[idx_ch:idx_dd]]) > 7:
                        rhestr.reverse()
                        rhestr.pop()
                        rhestr.reverse()
                        idx_ch = idx_ch + 1
                    if geiriau[idx_dd - 1].llinyn() not in cy.geiriau_gwan:
                        llinellau.append(Llinell(geiriau[idx_ch:idx_dd]))
                    idx_ch = idx_ch + 1
                for llinell in llinellau:
                    adro = dad.oes_cynghanedd(llinell)
                    if not adro.cynghanedd in ['DIM', 'SAL']:
                        if options.verbose:
                            print adro
                        else:
                            print lliw.magenta(
                                adro.cynghanedd) + '\t' + adro.llinell.llinyn(
                                )
            print('----------------------------------------')
            return

        # cerdd
        with open(options.infile) as f:
            rhestr_llinynnau = f.readlines()

        # creu rhestr llinellau
        llinellau = []
        for s in rhestr_llinynnau:
            s.strip()
            if re.search(r'^#', s) or re.search(r'^\s*$', s):
                continue
            llinellau.append(Llinell(s))

        # allbwn
        # if options.verbose:
        # 	print('========================================')
        # 	for llinell in llinellau:
        # 		print llinell.llinyn()
        # 	print('========================================')

        # dadansoddi pob llinell yn unigol (beth am doddeidiau? Mae angen darganfod cysylltnod)
        dad = Dadansoddwr()
        adro_llinellau_unigol = []
        for llinell in llinellau:
            adro = dad.oes_cynghanedd(llinell)
            adro_llinellau_unigol.append(adro)

        # profi mesurau
        dad = DadansoddwrPennill()
        pennill = Pennill(llinellau)
        cyw = dad.oes_cywydd(pennill)
        eng = dad.oes_englyn(pennill)
        cyh = dad.oes_cyhydedd_nawban(pennill)
        hat = dad.oes_hir_a_thoddaid(pennill)

        dosb = None
        if cyw[0]:
            dosb = 'CYW'
            adro = cyw[1]
        elif eng[0]:
            dosb = 'ENG'
            adro = eng[1]
        elif cyh[0]:
            dosb = 'CYH'
            adro = cyh[1]
        elif hat[0]:
            dosb = 'HAT'
            adro = hat[1]
        else:
            dosb = 'DIM'
            adro = adro_llinellau_unigol

        # allbwn
        print('----------------------------------------')
        if dosb:
            print lliw.cyan(dosb)
        if adro:
            for ad in adro:
                if options.verbose:
                    if ad.cynghanedd == 'DIM':
                        print lliw.magenta(ad.cynghanedd)
                        print ad.llinyn_acenion()
                        print ad.llinell.llinyn()
                    else:
                        print ad
                else:
                    ss = ad.cynghanedd + ': ' + ad.llinell.llinyn().strip()
                    if ad.cynghanedd == 'DIM':
                        print lliw.magenta(ss)
                    else:
                        print ss
        print('----------------------------------------')

    # diwedd
    print "hwyl fawr...\n"
    time_str = time.strftime("%Y.%m.%d.%H.%M.%S")
    log.info('peiriant: diwedd')
Example #10
0
    def oes_toddaid(self, cwpled, byr=False, hir=False):
        if byr:
            enw = 'toddaid_byr'
        elif hir:
            enw = 'toddaid_hir'
        else:
            enw = 'toddaid'
        log.info('prawf: ' + enw)

        sylwadau = []
        dad = Dadansoddwr()
        ateb = True

        # profi am air luosill ar ddiwedd yr ail linell
        if cwpled.ail.geiriau[-1].nifer_sillau() < 2:
            sylwadau.append(
                enw +
                ': methiant: dim gair lluosill ar ddiwedd yr ail linell.')
            ateb = False

        # profi nifer sillau
        if cwpled.cyntaf.nifer_sillau() != 10:
            sylwadau.append(enw + ': nid oes 10 sill yn y linell gyntaf')
            ateb = False
        if byr:
            if cwpled.ail.nifer_sillau() != 6:
                sylwadau.append(enw + ': nid oes 6 sill i\'r ail linell')
                ateb = False
        elif hir:
            if cwpled.ail.nifer_sillau() != 10:
                sylwadau.append(enw + ': nid oes 10 sill i\'r ail linell')
                ateb = False
        else:
            if cwpled.ail.nifer_sillau() != 9:
                sylwadau.append(enw + ': nid oes 9 sill i\'r ail linell')
                ateb = False

        # prosesu'r linell gyntaf (hollti ar gysylltnod)
        rhestr_cyntaf = []
        rhestr_cyrch = []
        heibio = False
        for gair in cwpled.cyntaf.geiriau:
            if gair.llinyn() == '-':
                heibio = True
            elif not heibio:
                rhestr_cyntaf.append(gair)
            else:
                rhestr_cyrch.append(gair)

        llinell_cyntaf = Llinell(rhestr_cyntaf)

        # profi presenoldeb cysylltnod
        if not heibio:
            sylwadau.append(enw +
                            ': methiant: dim cysylltnod yn y linell gyntaf.')
            ateb = False

        # profi nifer sillau y cyrch
        ns_cyrch = sum([g.nifer_sillau() for g in rhestr_cyrch])
        if ns_cyrch < 1 or ns_cyrch > 3:
            sylwadau.append(enw + ': methiant: nid oes 1-3 sill yn y cyrch.')
            ateb = False

        # profi am gynghanedd yn y linell gyntaf
        adro1 = dad.oes_cynghanedd(llinell_cyntaf)
        if adro1.cynghanedd == 'DIM':
            sylwadau.append(enw + ': dim cynghanedd yn y linell gyntaf')
            ateb = False

        # prosesu'r ail linell (dibynnu ar pa fath o doddaid)
        if not byr:
            adro2 = dad.oes_cynghanedd(
                cwpled.ail)  # cyrch yn bengoll mewn toddaid neu doddaid hir
            if adro2.cynghanedd == 'DIM':
                sylwadau.append(enw + ': dim cynghanedd yn yr ail linell')
                ateb = False
        else:
            rhestr_ail = list(rhestr_cyrch)
            rhestr_pengoll = []
            llwyddiant = False
            for gair in cwpled.ail.geiriau:
                if not llwyddiant:
                    rhestr_ail.append(gair)
                    adro2 = dad.oes_cynghanedd(Llinell(rhestr_ail))
                    if adro2.cynghanedd not in ['DIM', 'LLU', 'LLL']:
                        llwyddiant = True
                else:
                    rhestr_pengoll.append(gair)
            if not llwyddiant:
                sylwadau.append(
                    enw +
                    ': dim cynghanedd yn y cyrch a rhan gyntaf yr ail linell')
                ateb = False

        # mae bob amser angen odl rhwng prifodl y gynghanedd gyntaf a diwedd yr ail linell
        if not od.oes_odl(rhestr_cyntaf[-1], cwpled.ail.geiriau[-1]):
            sylwadau.append(
                enw +
                'methiant: dim odl rhwng prifodl y gynghanedd gyntaf a diwedd yr ail linell'
            )
            ateb = False

        # os toddaid neu doddaid hir, mae hefyd angen odl rhwng y cyrch a gorffwysfa'r ail linell
        # TODO: os oes mwy nag un gorffwysfa (e.e. sain), gall y cyrch odli gyda unrhyw un ohonynt
        if not byr:
            if adro2.data.has_key('gorffwysfeydd'):
                gorffwysfeydd = adro2.data['gorffwysfeydd']
                if rhestr_cyrch and not any([
                        od.oes_odl(rhestr_cyrch[-1], gorff)
                        for gorff in gorffwysfeydd
                ]):
                    sylwadau.append(
                        enw +
                        'methiant: dim odl rhwng y cyrch a gorffwysfa yr ail linell'
                    )
                    ateb = False

        # print ateb
        # print adro1
        # print adro2
        # print sylwadau
        # diwedd
        return [ateb, [adro1, adro2], sylwadau]