def sumlExpr(spec): expr = [] for part in common.splitYUML(spec): if not part: continue if part == ',': if expr: yield expr expr = [] # [something like this] elif part[0] == '[' and part[-1] == ']': part = part[1:-1] expr.append(('record', part.strip())) # <message # >message elif part[0] in '<>': expr.append((part[0], part[1:].strip())) # message> # message< elif part[-1] in '<>': expr.append((part[-1], part[:-1].strip())) if expr: yield expr
def yumlExpr(spec): expr = [] for part in common.splitYUML(spec): if not part: continue # End of line, eat multiple empty lines (part is like ',,,,') if len(part) > 0 \ and (len(part.strip(',')) == 0 or part.strip(',').startswith('//')): if expr: yield expr expr = [] elif part == '^': expr.append(('edge', 'empty', '', 'none', '', 'solid')) # [something like this] # [something like this {bg:color}] # [note: something like this {bg:color}] elif part[0] == '[' and part[-1] == ']': part = part[1:-1] bg = '' if part[-1] == '}': x = part.split('{bg:') assert len(x) == 2 part = x[0] bg = x[1][:-1] if part.startswith('note:'): expr.append(('note', part[5:].strip(), bg)) elif '[' in part and ']' in part: p = part.split('[') part = p[0] nodes = [node.replace(']', '').strip() for node in p[1:]] expr.append(('cluster', part.strip(), bg, nodes)) else: expr.append(('record', part.strip(), bg)) elif '-' in part: if '-.-' in part: style = 'dashed' x = part.split('-.-') else: style = 'solid' x = part.split('-') assert len(x) == 2 left, right = x def processLeft(left): if left.startswith('<>'): return ('odiamond', left[2:]) elif left.startswith('++'): return ('diamond', left[2:]) elif left.startswith('+'): return ('odiamond', left[1:]) elif left.startswith('<') or left.startswith('>'): return ('vee', left[1:]) elif left.startswith('^'): return ('empty', left[1:]) else: return ('none', left ) lstyle, ltext = processLeft(left) if right.endswith('<>'): rstyle = 'odiamond' rtext = right[:-2] elif right.endswith('++'): rstyle = 'diamond' rtext = right[:-2] elif right.endswith('+'): rstyle = 'odiamond' rtext = right[:-1] elif right.endswith('>'): rstyle = 'vee' rtext = right[:-1] elif right.endswith('^'): rstyle = 'empty' rtext = right[:-1] else: # zOMG, it seams valid rstyle, rtext = processLeft(right) expr.append(('edge', lstyle, ltext, rstyle, rtext, style)) if expr: yield expr
def yumlExpr(spec): expr = [] for part in common.splitYUML(spec): if not part: continue # End of line, eat multiple empty lines (part is like ',,,,') if len(part) > 0 \ and (len(part.strip(',')) == 0 or part.strip(',').startswith('//')): if expr: yield expr expr = [] elif part == '^': expr.append(('edge', 'empty', '', 'none', '', 'solid')) # [something like this] # [something like this {bg:color}] # [note: something like this {bg:color}] elif part[0] == '[' and part[-1] == ']': part = part[1:-1] bg = '' if part[-1] == '}': x = part.split('{bg:') assert len(x) == 2 part = x[0] bg = x[1][:-1] if part.startswith('note:'): expr.append(('note', part[5:].strip(), bg)) elif '[' in part and ']' in part: p = part.split('[') part = p[0] nodes = [node.replace(']', '').strip() for node in p[1:]] expr.append(('cluster', part.strip(), bg, nodes)) else: expr.append(('record', part.strip(), bg)) elif '-' in part: if '-.-' in part: style = 'dashed' x = part.split('-.-') else: style = 'solid' x = part.split('-') assert len(x) == 2 left, right = x def processLeft(left): if left.startswith('<>'): return ('odiamond', left[2:]) elif left.startswith('++'): return ('diamond', left[2:]) elif left.startswith('+'): return ('odiamond', left[1:]) elif left.startswith('<') or left.startswith('>'): return ('vee', left[1:]) elif left.startswith('^'): return ('empty', left[1:]) else: return ('none', left) lstyle, ltext = processLeft(left) if right.endswith('<>'): rstyle = 'odiamond' rtext = right[:-2] elif right.endswith('++'): rstyle = 'diamond' rtext = right[:-2] elif right.endswith('+'): rstyle = 'odiamond' rtext = right[:-1] elif right.endswith('>'): rstyle = 'vee' rtext = right[:-1] elif right.endswith('^'): rstyle = 'empty' rtext = right[:-1] else: # zOMG, it seams valid rstyle, rtext = processLeft(right) expr.append(('edge', lstyle, ltext, rstyle, rtext, style)) if expr: yield expr