-
Lukáš Krupčík authoredLukáš Krupčík authored
titlemd.py 5.42 KiB
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
""" titlemd """
from __future__ import print_function
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? """
if location.find("mkdocs.yml") != -1:
return True
return False
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.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()
# pylint: disable=unused-argument,inconsistent-return-statements
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
prev_line = lines[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("%s" % arg.location)
echo_filename = True
print("-"+line, end="")
print("+"+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("%s" % arg.location)
echo_filename = True
print("-"+prev_line, end="")
print("+"+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("%s" % arg.location)
echo_filename = True
print("-"+line, end="")
print("+"+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()
# pylint: disable=unused-argument,inconsistent-return-statements
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:
# Loop through the list of lines and titlecase
# any line beginning with '#'.
prev_line = lines[0]
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()