Skip to content
Snippets Groups Projects
Select Git revision
  • 5989f6f7e668975adff6b52dd81d2b6a46179b57
  • master default protected
  • lifecycle
  • kru0052-master-patch-91081
  • chat
  • 20180621-revision
  • 20180621-before_revision
7 results

titlemd.py

Blame
  • titlemd.py 4.86 KiB
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # pylint: disable=C0301, R1710
    
    """ 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? """
        return "mkdocs.yml" in location
    
    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', encoding='utf-8') as fdata:
            spelling = fdata.readlines()
    
        def abbreviations(word, **_):
            """ abbreviations """
            if word + "\n" in spelling:
                return word
    
        # Open the file and read the lines as a list
        with open(arg.location, encoding='utf-8') as fdata:
            lines = fdata.readlines()
    
        # Loop through the list of lines and titlecase
        # any line beginning with '#'.
        return_value = 0
        prev_line = lines[0] if lines else ""
        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):
                title_line = titlecase(line[:line.find("]")], callback=abbreviations) + line[line.find("]"):]
                if line != title_line:
                    if return_value == 0 and not echo_filename:
                        print(f"{arg.location}")
                        echo_filename = True
                    print(f"-{line}", end="")
                    print(f"+{title_line}", end="")
                    print()
                    return_value = 1
            if (line.startswith('---') or line.startswith('===')) and not disabled:
                title_prev_line = titlecase(prev_line[:prev_line.find("]")], callback=abbreviations) + prev_line[prev_line.find("]"):]
                if prev_line != title_prev_line:
                    if return_value == 0 and not echo_filename:
                        print(f"{arg.location}")
                        echo_filename = True
                    print(f"-{prev_line}", end="")
                    print(f"+{title_prev_line}", end="")
                    print()
                    return_value = 1
            if (mkdocs_available(arg.location) and not line.startswith('#') and not disabled):
                title_line = titlecase(line[:line.find(":")], callback=abbreviations) + line[line.find(":"):]
                if line != title_line:
                    if return_value == 0 and not echo_filename:
                        print(f"{arg.location}")
                        echo_filename = True
                    print(f"-{line}", end="")
                    print(f"+{title_line}", end="")
                    print()
                    return_value = 1
            prev_line = line
        return return_value
    
    def writedata(arg):
        """ writedata """
        # Spelling exceptions
        with open('.spelling', encoding='utf-8') as fdata:
            spelling = fdata.readlines()
    
        def abbreviations(word, **_):
            """ abbreviations """
            if word + "\n" in spelling:
                return word
    
        # Open the file and read the lines as a list
        with open(arg.location, encoding='utf-8') as fdata:
            lines = fdata.readlines()
    
        with open(arg.location, 'w', encoding='utf-8') as fdata:
            prev_line = lines[0] if lines else ""
            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()