def nodeFromSectionStr(app, sectionStr, lang="en"):
    """Find the node of a section string.

    Compare `tf.core.text.Text.nodeFromSection`.

    Parameters
    ----------
    sectionStr: string
        Must be a valid section specficiation in the
        language specified in *lang*.

        The string may specify a section 0 level only (book/tablet), or
        section 0 and 1 levels (book/tablet chapter/column),
        or all levels
        (book/tablet chapter/column verse/line).

        !!! hint "examples"
            Genesis

            Genesis 1

            Genesis 1:1

            P005381

            P005381 1

            P005381 1:1

    lang: string, optional `en`
        The language assumed for the section parts,
        as far as they are language dependent.
        Must be a 2-letter language code.

    Returns
    -------
    node | error: integer | string
        Depending on what is passed, the result is a node of section level
        0, 1, or 2.

        If there is no such section heading, an error string is returned.
    """

    api = app.api
    T = api.T

    aContext = app.context
    sep1 = aContext.sectionSep1
    sep2 = aContext.sectionSep2

    msg = f'Not a valid passage: "{sectionStr}"'
    msgi = '{} "{}" is not a number'
    section = sectionStr.split(sep1)
    if len(section) > 2:
        return msg
    elif len(section) == 2:
        section2 = section[1].split(sep2)
        if len(section2) > 2:
            return msg
        section = [section[0]] + section2
    dataTypes = T.sectionFeatureTypes
    sectionTypes = T.sectionTypes
    sectionTyped = []
    msgs = []
    for (i, sectionPart) in enumerate(section):
        if dataTypes[i] == "int":
            try:
                part = int(sectionPart)
            except ValueError:
                msgs.append(msgi.format(sectionTypes[i], sectionPart))
                part = None
        else:
            part = sectionPart
        sectionTyped.append(part)
    if msgs:
        return "\n".join(msgs)

    sectionNode = T.nodeFromSection(sectionTyped, lang=lang)
    if sectionNode is None:
        return msg
    return sectionNode