diff options
Diffstat (limited to 'sphinx/pycode')
-rw-r--r-- | sphinx/pycode/__init__.py | 2 | ||||
-rw-r--r-- | sphinx/pycode/pgen2/driver.py | 46 | ||||
-rw-r--r-- | sphinx/pycode/pgen2/pgen.py | 5 |
3 files changed, 28 insertions, 25 deletions
diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py index 7746e11b1..baf5c0068 100644 --- a/sphinx/pycode/__init__.py +++ b/sphinx/pycode/__init__.py @@ -33,7 +33,7 @@ pydriver = driver.Driver(pygrammar, convert=nodes.convert) # an object with attributes corresponding to token and symbol names -class sym: +class sym(object): pass diff --git a/sphinx/pycode/pgen2/driver.py b/sphinx/pycode/pgen2/driver.py index c531edb34..90476ed00 100644 --- a/sphinx/pycode/pgen2/driver.py +++ b/sphinx/pycode/pgen2/driver.py @@ -92,11 +92,8 @@ class Driver(object): def parse_file(self, filename, debug=False): """Parse a file and return the syntax tree.""" - stream = open(filename) - try: + with open(filename) as stream: return self.parse_stream(stream, debug) - finally: - stream.close() def parse_string(self, text, debug=False): """Parse a string and return the syntax tree.""" @@ -112,27 +109,36 @@ 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 = "" + return "%s%s.pickle" % (head, tail) + + +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) diff --git a/sphinx/pycode/pgen2/pgen.py b/sphinx/pycode/pgen2/pgen.py index 85a1bcc4d..7598e6abc 100644 --- a/sphinx/pycode/pgen2/pgen.py +++ b/sphinx/pycode/pgen2/pgen.py @@ -4,10 +4,7 @@ from __future__ import print_function from six import iteritems -try: - from collections import OrderedDict -except ImportError: # Fallback for Python 2.6 - OrderedDict = dict +from collections import OrderedDict # Pgen imports |