From cfc9f92cb49ead60ef554fcc043354663cee48f6 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sun, 21 Apr 2019 16:52:28 -0400 Subject: [PATCH] Created script to format markdown paragraphs following a stringent column max. --- other/markdownParagraphFormatter.py | 121 ++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 other/markdownParagraphFormatter.py diff --git a/other/markdownParagraphFormatter.py b/other/markdownParagraphFormatter.py new file mode 100644 index 0000000..1840d0b --- /dev/null +++ b/other/markdownParagraphFormatter.py @@ -0,0 +1,121 @@ +""" +Jeffery Russell +2019-4-21 + +Simple program to reformat paragraphs in markdown text files +to follow a specific col limit. +""" + +import os +import sys + + +def formatChunk(stringContent, charLimit): + """ + Formats a markdown section with with a specific + col limit. This only makes changes if the section is a + paragraph and nothing else. + + The only guarantee for the input is that there + are no lines which only contain a new line or space. + + :param stringContent: string of markdown chunk + :param charLimit: max character limit + :return: formatted string + """ + if len(stringContent.strip(" ")) == 0: + return "" + elif not stringContent[0].isalpha(): + return stringContent + result = "" + line = "" + stringContent = stringContent.replace("\n", " ") + words = stringContent.split(" ") + + for word in words: + if len(line) == 0 or len(line) + len(word) < charLimit: + if not len(line) == 0: + line = line + " " + line = line + word + else: + result = result + line + "\n" + line = word + if line != "": + result = result + line + "\n" + return result + + +def writeToFile(fileName, content): + """ + Writes to a file, overwriting the existing + output. + :param fileName: + :param content: + :return: + """ + f = open(fileName, "w+") + f.write(content) + f.close() + + +def wrapMarkdownParagraphsToColLimit(fileName, charLimit): + """ + Breaks apart a markdown file into chunks. A chunks are + separated by a blank lines. Each chunk is then + rendered according to our 80 char rules defined + in the formatChunk section. + :param fileName: + :param charLimit: + :return: + """ + result = "" + tempResult = "" + with open(fileName) as file: + for line in file: + if line.strip(" ") == "\n": + result = result + formatChunk(tempResult, charLimit) + tempResult = "" + result = result + "\n" + else: + tempResult = tempResult + line + print(line) + if tempResult != "": + result = result + formatChunk(tempResult, charLimit) + return result + + +def print_usage(): + """ + Prints script usage. + :return: + """ + print("Usage: file name -t (optional)") + print("\t-p simply prints the formatted output.") + print("\tfile name -- runs the command overwriting the existing file.") + + +def main(): + """ + Checks command line input and calls the proper formatting + functions. + :return: + """ + if len(sys.argv) > 1: + fileName = os.getcwd() + "/" + sys.argv[1] + if len(sys.argv) == 3 and sys.argv[2].lower() == "-p": + print(wrapMarkdownParagraphsToColLimit(fileName, 70)) + else: + writeToFile(fileName, + wrapMarkdownParagraphsToColLimit(fileName, 70)) + else: + print_usage() + + +""" +Makes sure that other scripts don't execute the main +""" +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + panic()