def parse_pm_pf_tl(<EOL>byte_array: bytearray, start: int, end: Optional[int],<EOL>parameter_spans_append: Callable,<EOL>pfunction_spans_append: Callable,<EOL>template_spans_append: Callable,<EOL>) -> None:
while True:<EOL><INDENT>for m in SINGLE_BRACES_FINDITER(byte_array, start, end):<EOL><INDENT>byte_array[m.start()] = <NUM_LIT>  <EOL><DEDENT>match = None<EOL>for match in PM_PF_TL_FINDITER(byte_array, start, end):<EOL><INDENT>ms, me = match.span()<EOL>if match[<NUM_LIT:1>] is not None:<EOL><INDENT>parameter_spans_append([ms, me])<EOL><DEDENT>elif match[<NUM_LIT:2>] is not None:<EOL><INDENT>pfunction_spans_append([ms, me])<EOL><DEDENT>elif match[<NUM_LIT:3>] is not None:  <EOL><INDENT>byte_array[ms:me] = b'<STR_LIT:_>' * (me - ms)<EOL>continue<EOL><DEDENT>else:<EOL><INDENT>template_spans_append([ms, me])<EOL><DEDENT>byte_array[ms:me] = b'<STR_LIT:X>' * (me - ms)<EOL><DEDENT>if match is None:<EOL><INDENT>return<EOL><DEDENT><DEDENT>
Find the spans of parameters, parser functions, and templates.

    :byte_array: The byte_array or part of byte_array that is being parsed.
    :start: Add to every returned start.

    This is the innermost loop of the parse_to_spans function.
    If the byte_array passed to parse_to_spans contains n WikiLinks, then
    this function will be called n + 1 times. One time for the whole byte_array
    and n times for each of the n WikiLinks.