示例#1
0
 def test10Charges(self):
     """Test for ability to add *two* group of ten charges without errors."""
     shield = blazon.Field("sable")
     # Currently, this looks wrong, because the annulets end up
     # *on top of* the lozenges.
     shield.charges.append(blazon.ChargeGroup(10, blazon.Lozenge("argent")))
     shield.charges.append(blazon.ChargeGroup(10, blazon.Annulet("or")))
     for charge in shield.charges:
         charge.arrange()
示例#2
0
 def testInOrle(self):
     shield = blazon.Field("gules")
     bezants = blazon.ChargeGroup(9, blazon.Roundel("or"))
     bezants.arrangement = arrangement.InOrle()
     shield.charges.append(bezants)
     for charge in shield.charges:
         charge.arrange()
示例#3
0
 def testBogusByNumbers(self):
     shield = blazon.Field("vert")
     chargegroup = blazon.ChargeGroup(6, blazon.Roundel("argent"))
     chargegroup.arrangement = arrangement.ByNumbers()
     chargegroup.arrangement.setRows([1, 2, 3, 4])
     shield.charges.append(chargegroup)
     for charge in shield.charges:
         self.assertRaises(blazon.ArrangementError, charge.arrange)
示例#4
0
 def test2by4(self):
     shield = blazon.Field("sable")
     chargegroup = blazon.ChargeGroup(8, blazon.Annulet("or"))
     chargegroup.arrangement = arrangement.ByNumbers()
     chargegroup.arrangement.setRows([2, 2, 2, 2])
     shield.charges.append(chargegroup)
     for charge in shield.charges:
         charge.arrange()
示例#5
0
def p_fullcharge_2(p):
    """fullcharge : ON A almostfullcharge charges"""
    if not (len(p[4]) == 1 and isinstance(p[4][0], blazon.ChargeGroup)):
        res = blazon.ChargeGroup()
        res.extendCharges(p[4])
        res = [res]
    else:
        res = p[4]
    p[3].extendCharges(res)
    p[0] = p[3]
示例#6
0
def p_group_1a(p):
    "group : amount GROUPS optarrange optrows OF charges"
    # The same as above, just taking it to mean "areas proper each charged with"
    area = blazon.BigRect()
    area.tincture = blazon.Treatment("proper")
    res = blazon.ChargeGroup(p[1], area)
    for elt in res.charges:
        elt.extendCharges(copy.deepcopy(p[6]))
    res.arrangement = p[3]
    if p[4]:
        res.arrangement = ByNumbers(p[4])
    p[0] = res
示例#7
0
def p_charges(p):
    """charges : optand optplacement grouporcharge
               | charges optand optplacement optoverall grouporcharge"""
    if len(p) == 4:
        if p[2]:
            # ???
            if isinstance(p[3], blazon.ChargeGroup):
                p[3].arrangement = p[2]
                gp = p[3]
            else:
                gp = blazon.ChargeGroup(1, p[3])
                gp.arrangement = p[2]
        else:
            gp = p[3]
        p[0] = [gp]
    else:
        # OK, let's try to work out this business of "consolidating"
        # charges into chargegroups.  Charges conjoined with "and" can join
        # into a group.  Charges conjoined with "between" cannot.  Let's
        # see if we can do this without separate lexemes for "and" and
        # "between", just different values for it.
        #
        # We need to be able to consolidate in order to make things like
        # {azure a bend argent between a fusil and a roundel or}
        lastgroup = p[1][-1]

        # Always make it a ChargeGroup if it isn't?
        # ... unless it's a TrueOrdinary?
        if p[3] or (not isinstance(p[5], blazon.ChargeGroup)
                    and not isinstance(p[5], blazon.TrueOrdinary)):
            newthing = blazon.ChargeGroup(1, p[5])
            if p[3]:
                newthing.arrangement = p[3]
        else:
            newthing = p[5]
        p[0] = p[1] + [newthing]
示例#8
0
def p_group_1(p):
    """group : amount charge optarrange opttreatment optfimbriation optrows
             | amount charge optarrange opttreatment optfimbriation optrows EACH CHARGED WITH charges"""
    # I don't have to worry about handling the opttreatment.  That's just in
    # case the treatment was omitted in the charge before the arrangement,
    # and the "missing color" code will handle it.  Right?
    p[0] = blazon.ChargeGroup(p[1], p[2])
    if len(p) > 7:
        for elt in p[0].charges:
            elt.extendCharges(copy.deepcopy(p[10]))
    rows = p[6]
    if not p[2].tincture:
        Globals.colorless.extend(p[0].charges)
    # Doesn't matter if p[3] is empty; so we'll pass along an empty one.
    p[0].arrangement = p[3]
    if rows:
        p[0].arrangement = ByNumbers(rows)
    # We wind up having two different places for treatment and fimbriation,
    # but that's okay.  If you specify both, one wins, but GIGO after all.
    p[5](p[0])
示例#9
0
 def test10Charges(self):
     """Test for ability to add a group of ten charges without errors."""
     shield = blazon.Field("sable")
     shield.charges.append(blazon.ChargeGroup(10, blazon.Lozenge("argent")))
     for charge in shield.charges:
         charge.arrange()
示例#10
0
 def __init__(self, background, color):
     self.background = background
     cg = blazon.ChargeGroup(3, blazon.Roundel(tincture=color))
     cg.arrangement = arrangement.ByNumbers([1, 2])
     self.charge = blazon.BigRect()
     self.charge.addCharge(cg)
示例#11
0
def p_group_2(p):
    """group : LP charges RP"""
    p[0] = blazon.ChargeGroup()
    p[0].fromarray(p[2])
示例#12
0
def p_grouporcharge_b(p):
    """grouporcharge : charge optarrange"""
    p[0] = blazon.ChargeGroup(1, p[1])
    if not p[1].tincture:
        Globals.colorless.append(p[0].charges[0])
    p[0].arrangement = p[2]
示例#13
0
def p_fullcharge_5(p):
    "fullcharge : LP charges RP"
    p[0] = blazon.ChargeGroup()
    p[0].fromarray(p[2])