summaryrefslogtreecommitdiff
path: root/sphinx/pycode/pgen2/driver.py
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2016-07-11 00:27:06 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2016-07-12 12:15:12 +0900
commit2ccb75c98fbe7e69e4689725affa268e7c538315 (patch)
tree80e649ad94ccc653685489a34cb6f5c071f8474a /sphinx/pycode/pgen2/driver.py
parente1e82e43c9280e7486aad49c7f84a75f4ee1654b (diff)
downloadsphinx-git-2ccb75c98fbe7e69e4689725affa268e7c538315.tar.gz
Bundle sphinx/pycode/Grammar-*.pickle (ref: #2765)
So far, sphinx generates the grammar files on demand. It causes uninstallation does not remove whole of files. With this fix, Sphinx bundles the files in the package.
Diffstat (limited to 'sphinx/pycode/pgen2/driver.py')
-rw-r--r--sphinx/pycode/pgen2/driver.py42
1 files changed, 26 insertions, 16 deletions
diff --git a/sphinx/pycode/pgen2/driver.py b/sphinx/pycode/pgen2/driver.py
index 6bdcebece..d321856d2 100644
--- a/sphinx/pycode/pgen2/driver.py
+++ b/sphinx/pycode/pgen2/driver.py
@@ -109,27 +109,37 @@ def generate_lines(text):
yield ""
-def load_grammar(gt="Grammar.txt", gp=None,
- save=True, force=False, logger=None):
+def get_compiled_path(filename):
+ head, tail = os.path.splitext(filename)
+ if tail == ".txt":
+ tail = ""
+ # embed Sphinx major version for the case we ever change the grammar...
+ return "%s%s-sphinx%s.pickle" % (head, tail, ".".join(map(str, sphinx.version_info[:2])))
+
+
+def compile_grammar(gt='Grammar.txt', logger=None):
+ """Compile the grammer."""
+ if logger is None:
+ logger = logging.getLogger()
+
+ logger.info("Generating grammar tables from %s", gt)
+ g = pgen.generate_grammar(gt)
+ gp = get_compiled_path(gt)
+ logger.info("Writing grammar tables to %s", gp)
+ try:
+ g.dump(gp)
+ except IOError as e:
+ logger.info("Writing failed:"+str(e))
+
+
+def load_grammar(gt="Grammar.txt", logger=None):
"""Load the grammar (maybe from a pickle)."""
if logger is None:
logger = logging.getLogger()
- if gp is None:
- head, tail = os.path.splitext(gt)
- if tail == ".txt":
- tail = ""
- # embed Sphinx major version for the case we ever change the grammar...
- gp = head + tail + "-sphinx" + \
- ".".join(map(str, sphinx.version_info[:2])) + ".pickle"
- if force or not _newer(gp, gt):
+ gp = get_compiled_path(gt)
+ if not os.path.exists(gp):
logger.info("Generating grammar tables from %s", gt)
g = pgen.generate_grammar(gt)
- if save:
- logger.info("Writing grammar tables to %s", gp)
- try:
- g.dump(gp)
- except IOError as e:
- logger.info("Writing failed:"+str(e))
else:
g = grammar.Grammar()
g.load(gp)