我正在使用 pyparsing 来获取gEDA原理图/符号文件格式。大多数都是直截了当的,但我不确定如何匹配由初始行上的整数字段指定的后续行数。
文本对象的格式如下:
(other objects)
T x y color size vis snv angle align num_lines
Text line one
Line two of the text
Finally, the 'num_lines'th line
(other objects)
num_lines是一个整数。这种风格也用于其他一些类型。
作为一种变通方法,我将此类行定义为与有效对象类型不匹配的任何内容。从技术上讲,文本对象中允许使用这种类似对象的线条
text_meta = Type("T") + coord + color + size + visibility + show_name_value \
+ angle + alignment + num_lines + EOL
text_data_line = ~obj + LineStart() + SkipTo(LineEnd()) + EOL
text_data = Group(OneOrMore(text_data_line)).setResultsName('text')
text_data = text_data.setParseAction(lambda t: '\n'.join(t[0]))
text = text_meta + text_data
动态生成匹配规则,例如:
def genLineMatcher(n):
return (LineStart() + Skipto(LineEnd()) + EOL)*n
是在桌子上,但我不知道如何指定规则。