mirror of
https://github.com/openshift/openshift-docs.git
synced 2026-02-05 12:46:18 +01:00
147 lines
4.7 KiB
Python
Executable File
147 lines
4.7 KiB
Python
Executable File
import sys
|
|
import os
|
|
import logging
|
|
reload(sys)
|
|
sys.setdefaultencoding('utf8')
|
|
|
|
from lxml.etree import XMLSyntaxError, XIncludeError
|
|
|
|
from aura import cli, utils
|
|
from aura.exceptions import InvalidInputException
|
|
from aura.transformers.tf_asciidoc import AsciiDocPublicanTransformer, XML_NS, LXML_XML_NS
|
|
|
|
#branch = os.system("git symbolic-ref -q --short HEAD")
|
|
|
|
#print(branch)
|
|
|
|
# list of books - CHANGE HERE
|
|
book_list = ['admin_guide', 'apb_devel', 'architecture',
|
|
'creating_images', 'day_two_guide', 'dev_guide',
|
|
'getting_started', 'install_config', 'release_notes', 'scaling_performance',
|
|
'security', 'upgrading', 'using_images']
|
|
|
|
|
|
# function to convert XML ids to HTML 4 compatible ids from ccutil
|
|
def _fix_ids_for_html4(tree):
|
|
"""
|
|
Fixes any id elements that aren't html4 compatible.
|
|
|
|
:param tree:
|
|
"""
|
|
xmlroot = tree.getroot()
|
|
namespaces = {'xml': XML_NS}
|
|
|
|
# Find all the elements with an id
|
|
id_eles = xmlroot.findall(".//*[@xml:id]", namespaces=namespaces)
|
|
ids = []
|
|
|
|
# Filter the elements that start with an underscore
|
|
underscore_id_eles = []
|
|
for ele in id_eles:
|
|
id_val = ele.get(LXML_XML_NS + 'id')
|
|
if id_val.startswith("_"):
|
|
underscore_id_eles.append(ele)
|
|
else:
|
|
ids.append(id_val)
|
|
|
|
# Get the linkend and endterm eles
|
|
old_linkend_eles = xmlroot.findall(".//*[@linkend]")
|
|
old_endterm_eles = xmlroot.findall(".//*[@endterm]")
|
|
|
|
# Fix each underscore id
|
|
for id_ele in underscore_id_eles:
|
|
id_val = id_ele.get(LXML_XML_NS + 'id')
|
|
|
|
# Remove the underscore and if it now starts with a number, change the number to a word
|
|
new_id = utils.create_xml_id(id_val)
|
|
|
|
# Make sure the new id is unique, by adding a number to the end
|
|
base_new_id = new_id
|
|
count = 0
|
|
while new_id in ids:
|
|
count += 1
|
|
new_id = base_new_id + "-" + str(count)
|
|
|
|
# Set the new id
|
|
if new_id != id_val:
|
|
ids.append(new_id)
|
|
id_ele.set(LXML_XML_NS + 'id', new_id)
|
|
id_ele.set("remap", id_val)
|
|
|
|
# update any old references
|
|
for old_linkend in old_linkend_eles:
|
|
if old_linkend.get("linkend") == id_val:
|
|
old_linkend.set('linkend', new_id)
|
|
|
|
for old_endterm in old_endterm_eles:
|
|
if old_endterm.get("endterm") == id_val:
|
|
old_endterm.set('endterm', new_id)
|
|
|
|
|
|
# all validated?
|
|
all_validated = True
|
|
|
|
# Initialize logging
|
|
cli.init_logging(False, False)
|
|
|
|
for distro in os.listdir("drupal-build"):
|
|
|
|
print("---------------------------------------")
|
|
print("BUILDING " + distro + " BOOKS")
|
|
print("---------------------------------------")
|
|
|
|
for book in os.listdir(os.path.join("drupal-build", distro)):
|
|
|
|
#print(os.getcwd() + "\n")
|
|
#if not os.path.isdir("drupal-build/" + distro + "/" + book):
|
|
#print("---------------------------------------")
|
|
#print(">>> No Book " + book + " in this repo. Skipping <<<")
|
|
#print("---------------------------------------")
|
|
|
|
#continue
|
|
|
|
# rest api book is a pain and doesn't convert well
|
|
if book == "rest_api":
|
|
continue
|
|
|
|
os.chdir("drupal-build/" + distro + "/" + book)
|
|
#print(os.getcwd() + "\n")
|
|
|
|
# Create the transformer instance
|
|
transformer = AsciiDocPublicanTransformer()
|
|
|
|
try:
|
|
# Transform the AsciiDoc to DocBook XML
|
|
print(">>> Working on " + book + " book in " + distro + " <<<")
|
|
if not transformer._build_docbook_src("master.adoc", "build"):
|
|
print("Could not transform book " + book)
|
|
all_validated = False
|
|
continue
|
|
|
|
# Parse the transformed XML
|
|
transformer._before_xml_parse("build/master.xml")
|
|
|
|
# Parse the XML content
|
|
tree = utils.parse_xml("build/master.xml")
|
|
|
|
# Apply XML updates from aura/ccutil
|
|
transformer._fix_uncoverted_xrefs_with_file_paths(tree)
|
|
_fix_ids_for_html4(tree)
|
|
|
|
# Validate the transformed XML
|
|
if not transformer._validate_docbook_idrefs(tree):
|
|
logging.error(">>> Validation of book " + book + " in " + distro + " failed <<<")
|
|
all_validated = False
|
|
except (XMLSyntaxError, XIncludeError, InvalidInputException) as e:
|
|
logging.error(e)
|
|
all_validated = False
|
|
finally:
|
|
print(">>> Finished with " + book + " book in " + distro + " <<<")
|
|
print("---------------------------------------")
|
|
os.chdir("../../../")
|
|
|
|
if not all_validated:
|
|
sys.exit(-1)
|
|
else:
|
|
print("All Successful")
|