def _build_url_mappers()

in src/externals.py [0:0]


def _build_url_mappers(external_yml, mount: ExternalMount):
    r = re.compile("\\]\\("        "([^#)]+)?"           "(#[^)]+)?"     "\\)")

    known_urls = {item['md']: item['url'] for item in external_yml}

    def patch_the_text(text, source_item):
        def handle_match(m):
            url = m.group(1) or ''
            anchor = m.group(2) or ''

            if url in known_urls:
                url = known_urls[url]
            elif not url.startswith("http://") and not url.startswith("https://"):
                real_path = path.normpath(path.join(path.dirname(source_item), url))

                if path.isfile(real_path):
                    is_image = (real_path.endswith(ext) for ext in [".jpg", ".jpeg", ".png", ".svg"])

                    if any(is_image):
                        image_relative_path = path.join(mount.external_base.lstrip("/"), url)
                        image_output_path = path.join(root_folder, "assets", "externals", image_relative_path)
                        image_output_dir = os.path.dirname(image_output_path)

                        if not os.path.isdir(image_output_dir):
                            os.makedirs(image_output_dir, mode=0o777)

                        shutil.copyfile(real_path, image_output_path)
                        url = "{{ url_for(\"asset\", path=\"" + path.join("externals", image_relative_path) + "\") }}"
                    else:
                        url = mount.github_view_url(real_path)

            return "](" + url + anchor + ")"

        return r.sub(handle_match, text)

    return patch_the_text