#!/usr/bin/env python3

# Copyright (C) 2020  The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC

import lxml.etree as ET
import os

xi_url = "http://www.w3.org/2001/XInclude"

xi_include = "{{{}}}include".format(xi_url)

ET.register_namespace('xi', xi_url)


def make_relhref(outfile, href):
    outpath = os.path.dirname(os.path.abspath(outfile))
    relpath = os.path.relpath(os.path.dirname(os.path.abspath(href)), outpath)
    return os.path.join(relpath, os.path.basename(href))


def include_xml(parent, href, outfile, xptr=None):
    """
    Generate an XML include, using a relative path.

    Inputs
    ------
    parent : XML element to insert include into
    href : path to included file
    outfile : path to output file, for relative path generation
    xptr : optional value for xpointer attribute
    """
    xattrs = {'href': make_relhref(outfile, href)}
    if xptr is not None:
        xattrs["xpointer"] = xptr
    return ET.SubElement(parent, xi_include, xattrs)
