Browse Source

Created script to format markdown paragraphs following a stringent column max.

pull/18/head
jrtechs 5 years ago
parent
commit
cfc9f92cb4
1 changed files with 121 additions and 0 deletions
  1. +121
    -0
      other/markdownParagraphFormatter.py

+ 121
- 0
other/markdownParagraphFormatter.py View File

@ -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()

Loading…
Cancel
Save