Newer
Older
# -*- coding: utf-8 -*-
""" titlemd """
import argparse
import sys
try:
from titlecase import titlecase
except ImportError:
print("Please install titlecase")
def arg_parse():
"""
argument parser
"""
parser = argparse.ArgumentParser(
description="Titlemd"
)
parser.add_argument('-t', '--test',
action='store_true',
help="test")
parser.add_argument('location',
nargs='?',
default='.',
help="location, default current directory")
return parser.parse_args()
def mkdocs_available(location):
""" Is mkdocs.yml available? """
def linestart(line, disabled, test, prev_line=None):
""" linestart """
if test:
if (line.startswith("``") or line.startswith("extra:")) and not disabled:
return True
if (line.startswith("``") or (prev_line and prev_line.startswith("pages:"))) and disabled:
return False
else:
if line.startswith("``") and not disabled:
return True
if line.startswith("``") and disabled:
return False
return disabled
def testdata(arg):
""" test """
# Spelling exceptions
with open('.spelling') as fdata:
spelling = fdata.readlines()
def abbreviations(word, **kwargs):
""" abbreviations """
if word+"\n" in spelling:
return word
# Open the file and read the lines as a list
with open(arg.location) as fdata:
lines = fdata.readlines()
# Loop through the list of lines and titlecase
# any line beginning with '#'.
return_value = 0
echo_filename = False
disabled = mkdocs_available(arg.location)
for line in lines:
disabled = linestart(line, disabled, arg.test, prev_line)
if line.startswith('#') and not disabled and not mkdocs_available(arg.location):
if line != titlecase(line[:(line.find("]"))],
callback=abbreviations)+line[(line.find("]")):]:
if return_value == 0 and not echo_filename:
print(f"-{line}", end="")
print(f"+{titlecase(line[:(line.find(']'))], callback=abbreviations)}{line[(line.find(']')):]}", end="")
print()
return_value = 1
if (line.startswith('---') or line.startswith('===')) and not disabled:
if prev_line != titlecase(prev_line[:(prev_line.find("]"))],
callback=abbreviations)+prev_line[(prev_line.find("]")):]:
if return_value == 0 and not echo_filename:
print(f"-{prev_line}", end="")
print(f"+{titlecase(prev_line[:(prev_line.find(']'))], callback=abbreviations)}{prev_line[(prev_line.find(']')):]}", end="")
print()
return_value = 1
if (mkdocs_available(arg.location) and not line.startswith('#') and not disabled):
if line != titlecase(line[:(line.find(":"))],
callback=abbreviations)+line[(line.find(":")):]:
if return_value == 0 and not echo_filename:
print(f"-{line}", end="")
print(f"+{titlecase(line[:(line.find(':'))], callback=abbreviations)}{line[(line.find(':')):]}", end="")
print()
return_value = 1
prev_line = line
return return_value
def writedata(arg):
""" writedata """
# Spelling exceptions
with open('.spelling') as fdata:
spelling = fdata.readlines()
def abbreviations(word, **kwargs):
""" abbreviations """
if word+"\n" in spelling:
return word
# Open the file and read the lines as a list
with open(arg.location) as fdata:
lines = fdata.readlines()
with open(arg.location, 'w') as fdata:
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
disabled = False
for line in lines:
disabled = linestart(line, disabled, arg.test)
if line.startswith('#') and not disabled:
line = titlecase(line[:(line.find("]"))],
callback=abbreviations)+line[(line.find("]")):]
if (line.startswith('---') or line.startswith('===')) and not disabled:
prev_line = titlecase(prev_line[:(prev_line.find("]"))],
callback=abbreviations)+prev_line[(prev_line.find("]")):]
fdata.write(prev_line)
prev_line = line
fdata.write(prev_line)
def main():
"""
main function
"""
arg = arg_parse()
if arg.test:
sys.exit(testdata(arg))
else:
writedata(arg)
if __name__ == "__main__":
main()