gEDA回路図/シンボル ファイル形式を取り込むために pyparsing を使用しています。ほとんどは簡単ですが、最初の行の整数フィールドで指定された次の行の数を一致させる方法がわかりません。
テキスト オブジェクトの形式は次のとおりです。
(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
がテーブルにあるのですが、ルールを指定する方法がわかりません。