'Add one or more lines to a VCard.
>>> vc = SimpleVCard()
>>> vc.add(VCardLine(name=\'fn\', value=\'Bjarni\'))
>>> vc.get(\'fn\').value
u\'Bjarni\'
Line types are checked against VCard 4.0 for validity.
>>> vc.add(VCardLine(name=\'evil\', value=\'Bjarni\'))
Traceback (most recent call last):
ValueError: Not allowed on card: evil'

def add(self, *vcls, **kwargs):

    (src_pid, pidmap, version, is_new) = self._handle_pidmap_args(**kwargs)
    for vcl in vcls:
        with self._lock:
            if (not vcl.name):
                continue
            cardinality = self._cardinality(vcl)
            count = len([l for l in self._lines if (l and (l.name == vcl.name))])
            if (not cardinality):
                raise ValueError(('Not    allowed    on    card:    %s' % vcl.name))
            if (cardinality in ('1', '*1')):
                if count:
                    raise ValueError(('Already    on    card:    %s' % vcl.name))
            if (vcl.name == 'clientpidmap'):
                cpm = self.get_clientpidmap()
                (pid, src_id) = vcl.value.split(';', 1)
                if (src_id in cpm):
                    if (int(pid) != cpm[src_id]['pid']):
                        raise ValueError('CLIENTPIDMAP    pid    mismatch!')
                    continue
            if ((src_pid is not None) and (vcl.name not in self.UNREMOVABLE) and ('pid' not in vcl)):
                vcl.set_attr('pid', ('%s.%s' % (src_pid, version)))
            self._lines.append(vcl)
            vcl.line_id = len(self._lines)
