Loading bin/lesson_check.py +24 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,9 @@ P_TRAILING_WHITESPACE = re.compile(r'\s+$') # Pattern to match figure references in HTML. P_FIGURE_REFS = re.compile(r'<img[^>]+src="([^"]+)"[^>]*>') # Pattern to match internally-defined Markdown links. P_INTERNALLY_DEFINED_LINK = re.compile(r'\[[^\]]+\]\[[^\]]+\]') # What kinds of blockquotes are allowed? KNOWN_BLOCKQUOTES = { 'callout', Loading Loading @@ -274,6 +277,7 @@ class CheckBase(object): self.check_trailing_whitespace() self.check_blockquote_classes() self.check_codeblock_classes() self.check_defined_link_references() def check_metadata(self): Loading Loading @@ -331,6 +335,26 @@ class CheckBase(object): cls) def check_defined_link_references(self): """Check that defined links resolve in the file. Internally-defined links match the pattern [text][label]. If the label contains '{{...}}', it is hopefully a references to a configuration value - we should check that, but don't right now. """ result = set() for node in self.find_all(self.doc, {'type' : 'text'}): for match in P_INTERNALLY_DEFINED_LINK.findall(node['value']): if '{{' not in match: result.add(match) self.reporter.check(not result, self.filename, 'Internally-defined links may be missing definitions: {0}', ', '.join(sorted(result))) def find_all(self, node, pattern, accum=None): """Find all matches for a pattern.""" Loading Loading
bin/lesson_check.py +24 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,9 @@ P_TRAILING_WHITESPACE = re.compile(r'\s+$') # Pattern to match figure references in HTML. P_FIGURE_REFS = re.compile(r'<img[^>]+src="([^"]+)"[^>]*>') # Pattern to match internally-defined Markdown links. P_INTERNALLY_DEFINED_LINK = re.compile(r'\[[^\]]+\]\[[^\]]+\]') # What kinds of blockquotes are allowed? KNOWN_BLOCKQUOTES = { 'callout', Loading Loading @@ -274,6 +277,7 @@ class CheckBase(object): self.check_trailing_whitespace() self.check_blockquote_classes() self.check_codeblock_classes() self.check_defined_link_references() def check_metadata(self): Loading Loading @@ -331,6 +335,26 @@ class CheckBase(object): cls) def check_defined_link_references(self): """Check that defined links resolve in the file. Internally-defined links match the pattern [text][label]. If the label contains '{{...}}', it is hopefully a references to a configuration value - we should check that, but don't right now. """ result = set() for node in self.find_all(self.doc, {'type' : 'text'}): for match in P_INTERNALLY_DEFINED_LINK.findall(node['value']): if '{{' not in match: result.add(match) self.reporter.check(not result, self.filename, 'Internally-defined links may be missing definitions: {0}', ', '.join(sorted(result))) def find_all(self, node, pattern, accum=None): """Find all matches for a pattern.""" Loading