zephyr/doc/scripts/extract_content.py
David Brown 53266a3836 doc: Fix encoding problem
Depending on the version of Python 3 the user has installed, 'open'
may default to using 'ascii' encoding.  Since the documentation is in
UTF-8, and contains characters beyond 'ascii', this will result in
failures when using these versions of Python.

Fix this by being explicit about the encoding to be used when reading
these files.

Signed-off-by: David Brown <david.brown@linaro.org>
Change-Id: I54c69334c6bf377f1135cec04f4e0ea96a8e9a5b
2017-02-09 23:37:44 +00:00

65 lines
1.9 KiB
Python
Executable file

#!/usr/bin/env python3
#
# Copyright (c) 2017, Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
# Very quick script to move docs from different places into the doc directory
# to fix the website and external links
import os
import shutil
import re
import sys
import fnmatch
# direcories to search for .rst files
CONTENT_DIRS = ["samples", "boards"]
# directives to parse for included files
DIRECTIVES = ["figure","include","image","literalinclude"]
if "ZEPHYR_BASE" not in os.environ:
sys.stderr.write("$ZEPHYR_BASE environment variable undefined.\n")
exit(1)
ZEPHYR_BASE = os.environ["ZEPHYR_BASE"]
def get_rst_files(dir):
matches = []
for root, dirnames, filenames in os.walk('%s/%s' %(ZEPHYR_BASE, dir)):
for filename in fnmatch.filter(filenames, '*.rst'):
matches.append(os.path.join(root, filename))
for file in matches:
frel = file.replace(ZEPHYR_BASE,"").strip("/")
dir=os.path.dirname(frel)
if not os.path.exists(os.path.join(ZEPHYR_BASE, "doc", dir)):
os.makedirs(os.path.join(ZEPHYR_BASE, "doc", dir))
shutil.copyfile(file, os.path.join(ZEPHYR_BASE, "doc", frel))
with open(file, encoding="utf-8") as f:
content = f.readlines()
content = [x.strip() for x in content]
directives = "|".join(DIRECTIVES)
pattern = re.compile("\s*\.\.\s+(%s)::\s+(.*)" %directives)
for l in content:
m = pattern.match(l)
if m:
inf = m.group(2)
ind = os.path.dirname(inf)
if not os.path.exists(os.path.join(ZEPHYR_BASE, "doc", dir, ind)):
os.makedirs(os.path.join(ZEPHYR_BASE, "doc", dir, ind))
shutil.copyfile(os.path.join(ZEPHYR_BASE, dir, inf),
os.path.join(ZEPHYR_BASE, "doc", dir, inf))
f.close()
def main():
for d in CONTENT_DIRS:
get_rst_files(d)
if __name__ == "__main__":
main()