#!/usr/bin/env python3 # -*- python -*- from mdbook_plugin import Plugin import os import re import sqlite3 import subprocess import sys PSEUDOCODE_TAG = r'pseudocode' class PseudocodePlugin(Plugin): def expand_chapter_content(self, chapter): chapter.content = self.expand_codeblock(PSEUDOCODE_TAG, self.expand_pseudocode, chapter.content) def expand_pseudocode(self, m): source = m.group(1) source_lines = source.split('\n') max_linenumber_len = len(str(len(source_lines))) chunks = [] linenumber = 1 chunks.append('') for line in source_lines: if line: line = f'    `{str(linenumber).rjust(max_linenumber_len)}:` ' + \ re.sub('^ *', lambda m: ' ' * (len(m.group(0)) * 2), line) + \ ' \n' linenumber = linenumber + 1 else: line = '\n\n' chunks.append(line) chunks.append('\n') output = ''.join(chunks) return output if __name__ == '__main__': PseudocodePlugin().main(sys.argv)