Repository where I mostly put random python scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

129 lines
3.2 KiB

"""
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 = ""
inCodeBlock = False
with open(fileName) as file:
for line in file:
if line.startswith("```"):
inCodeBlock = not inCodeBlock
result = result + line
elif inCodeBlock:
result = result + line
elif line.strip(" ") == "\n":
result = result + formatChunk(tempResult, charLimit)
tempResult = ""
result = result + "\n"
else:
tempResult = tempResult + 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()