summaryrefslogtreecommitdiff
path: root/ftt-docgen
diff options
context:
space:
mode:
Diffstat (limited to 'ftt-docgen')
-rwxr-xr-xftt-docgen34
1 files changed, 30 insertions, 4 deletions
diff --git a/ftt-docgen b/ftt-docgen
index 8241da9..89ed110 100755
--- a/ftt-docgen
+++ b/ftt-docgen
@@ -12,10 +12,26 @@ def format_keyword(line):
keyword = words[0]
return '**{}** '.format(keyword) + line[len(keyword):]
-def format_scenario_step(bind, line):
+def format_scenario_step(bind, line, prev_keyword):
+ debug('step: line={!r} prev_keyword={}'.format(line, prev_keyword))
+ words = line.split()
+ if not words:
+ return line.strip(), prev_keyword
+ keyword = words[0]
+ real_keyword = keyword
+ if keyword.lower() == 'and':
+ if prev_keyword is None:
+ sys.exit('AND may not be used on first step in snippet')
+ real_keyword = prev_keyword
+ line = ' '.join(words[1:])
+ debug(' keyword={!r} rest={!r}'.format(keyword, line))
+
for b in bind:
- m = re.match(b['pattern'], line, re.I)
+ if real_keyword not in b:
+ continue
+ m = re.match(b[real_keyword], line, re.I)
if m and m.end() == len(line):
+ debug(' found binding: {!r}'.format(b))
n = len(m.groups())
if n > 0:
end = 0
@@ -26,13 +42,23 @@ def format_scenario_step(bind, line):
parts.append('_{}_'.format(thispart))
end = m.end(i)
line = ''.join(parts) + line[m.end(n):]
+ line = '{} {}'.format(keyword, line)
+ debug(' match: {!r}'.format(line))
+ break
if not line.strip():
return line
- return format_keyword(line)
+
+ return format_keyword(line), real_keyword
def format_fable_snippet(bind, lines):
- return [format_scenario_step(bind, line) for line in lines]
+ debug('snippet: lines={!r}'.format(lines))
+ prev_keyword = None
+ output = []
+ for line in lines:
+ ln, prev_keyword = format_scenario_step(bind, line, prev_keyword)
+ output.append(ln)
+ return output
def is_fable_snippet(o):
prefix = "```fable\n"