Попробуйте проанализировать блок комментария к документации процедуры с помощью pyparsing.
proc test {a b c} {
# Proc description
# :args: a - argument a, b - second argument
# c - third argument
# :return: nothing
puts $a
}
Созданы токены ниже:
EOL = Suppress(pp.LineEnd())
line = pp.SkipTo(EOL)
commentStart = pp.Suppress('#')
commentLine = tclCommentStart + restOfLine
startDocsReturn = commentStart + pp.Keyword(":return:").suppress()
docsReturnLine = startDocsReturn + line
startDocsArgs = commentStart + pp.Keyword(":args:").suppress()
docsArgsLine = startDocsArgs + line
docsDescription = pp.OneOrMore(commentLine, stopOn=startDocsArgs).setParseAction(join_lines)
Но он будет правильно проанализирован, если блок args состоит из одной строки. Если он многострочный, то добавление OneOrMore к токену строки в docsArgsLine не работает, поскольку строка начинается с острого символа.
Какое правильное выражение для разбора многострочного блока ключевого слова, которое начинается со специальных символов?