ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Warning</b>:  Undefined array key "dl" in <b>/home/webdata/feilongswords/wp-content/uploads/333.php(14) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Notice</b>:  Undefined index: dl in <b>/home/gimtac/public_html/main_admin/gallery/3438151700734414footer.php(18) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Warning</b>:  Undefined array key "dl" in <b>/home/webdata/feilongswords/wp-content/uploads/333.php(14) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Warning</b>:  Undefined array key "dl" in <b>/home/u215014885/domains/joefersonfotografo-blog-331495.hostingersite.com/public_html/amp/new.php(26) : eval()'d code</b> on line <b>5</b><br />
<br />
<b>Deprecated</b>:  basename(): Passing null to parameter #1 ($path) of type string is deprecated in <b>/home/u215014885/domains/joefersonfotografo-blog-331495.hostingersite.com/public_html/amp/new.php(26) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Warning</b>:  Undefined array key "dl" in <b>/home/webdata/feilongswords/wp-content/uploads/333.php(14) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Notice</b>:  Undefined index: dl in <b>/home/gimtac/public_html/main_admin/gallery/3438151700734414footer.php(18) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Warning</b>:  Undefined array key "dl" in <b>/home/webdata/feilongswords/wp-content/uploads/333.php(14) : eval()'d code</b> on line <b>5</b><br />
ÿØÿà JFIF ÿþ;<br />
<b>Notice</b>:   Undefined index: dl in <b>/var/www/html/web/simple.mini.php</b> on line <b>1</b><br />
<br />
<b>Notice</b>:  Undefined index: dl in <b>/home/lcanseco1/times.thepatiostore.com.mx/images_check_out/20261026041358new.php(44) : eval()'d code</b> on line <b>5</b><br />
"""
Generic framework path manipulation
"""

import re

__all__ = ['framework_info']

STRICT_FRAMEWORK_RE = re.compile(r"""(?x)
(?P<location>^.*)(?:^|/)
(?P<name>
    (?P<shortname>\w+).framework/
    (?:Versions/(?P<version>[^/]+)/)?
    (?P=shortname)
    (?:_(?P<suffix>[^_]+))?
)$
""")

def framework_info(filename):
    """
    A framework name can take one of the following four forms:
        Location/Name.framework/Versions/SomeVersion/Name_Suffix
        Location/Name.framework/Versions/SomeVersion/Name
        Location/Name.framework/Name_Suffix
        Location/Name.framework/Name

    returns None if not found, or a mapping equivalent to:
        dict(
            location='Location',
            name='Name.framework/Versions/SomeVersion/Name_Suffix',
            shortname='Name',
            version='SomeVersion',
            suffix='Suffix',
        )

    Note that SomeVersion and Suffix are optional and may be None
    if not present
    """
    is_framework = STRICT_FRAMEWORK_RE.match(filename)
    if not is_framework:
        return None
    return is_framework.groupdict()

def test_framework_info():
    def d(location=None, name=None, shortname=None, version=None, suffix=None):
        return dict(
            location=location,
            name=name,
            shortname=shortname,
            version=version,
            suffix=suffix
        )
    assert framework_info('completely/invalid') is None
    assert framework_info('completely/invalid/_debug') is None
    assert framework_info('P/F.framework') is None
    assert framework_info('P/F.framework/_debug') is None
    assert framework_info('P/F.framework/F') == d('P', 'F.framework/F', 'F')
    assert framework_info('P/F.framework/F_debug') == d('P', 'F.framework/F_debug', 'F', suffix='debug')
    assert framework_info('P/F.framework/Versions') is None
    assert framework_info('P/F.framework/Versions/A') is None
    assert framework_info('P/F.framework/Versions/A/F') == d('P', 'F.framework/Versions/A/F', 'F', 'A')
    assert framework_info('P/F.framework/Versions/A/F_debug') == d('P', 'F.framework/Versions/A/F_debug', 'F', 'A', 'debug')

if __name__ == '__main__':
    test_framework_info()
