in cbmc_viewer/markup_code.py [0:0]
def split_code_into_blocks(code):
"""Split code into blocks of code, comments, and string literals."""
def is_noncode_start(code, idx=0):
"""String starts something other than source code (eg, a comment)."""
return (is_quote(code, idx) or
is_multiline_comment_start(code, idx) or
is_singleline_comment_start(code, idx))
def find_predicate(code, predicate, idx=0):
"""First position in a string satisfying a predicate."""
while idx < len(code) and not predicate(code, idx):
idx += 1
return idx
blocks = []
while code:
idx = find_predicate(code, is_noncode_start)
block, code, idx = code[:idx], code[idx:], 0
if block:
blocks.append(block)
if not code:
break
if is_quote(code):
idx = find_predicate(code, is_quote, 1)
elif is_multiline_comment_start(code):
idx = find_predicate(code, is_multiline_comment_end, 2)
elif is_singleline_comment_start(code):
idx = find_predicate(code, is_singleline_comment_end, 2)
block, code, idx = code[:idx+1], code[idx+1:], 0
if block:
blocks.append(block)
return blocks