import argparse import os import re import sys from enum import Enum class CLIOption(Enum): def __init__(self, optName): self.optName = optName class LineEnding(CLIOption): CR = '\r', '\\r', 'cr' CRLF = '\r\n', '\\r\\n', 'crlf' LF = '\n', '\\n', 'lf' def __init__(self, string, strPrint, optName): self.string = string self.strPrint = strPrint self.optName = optName class MixedLineEndingOption(CLIOption): AUTO = 'auto' NO = 'no' CRLF = LineEnding.CRLF.optName LF = LineEnding.LF.optName class MixedLineDetection(Enum): MIXED_MOSTLY_CRLF = True, LineEnding.CRLF.string MIXED_MOSTLY_LF = True, LineEnding.LF.string NOT_MIXED = False, None UNKNOWN = False, None def __init__(self, conversion, line_ending_char): self.conversion = conversion self.line_ending_char = line_ending_char # Matches CRLF CRLF_PATTERN = re.compile(LineEnding.CRLF.string, re.DOTALL) # Matches LF (without preceding CR) LF_PATTERN = re.compile('(? 0 lf_found = lf_nb > 0 if crlf_nb == lf_nb: return MixedLineDetection.UNKNOWN if crlf_found ^ lf_found: return MixedLineDetection.NOT_MIXED if crlf_nb > lf_nb: return MixedLineDetection.MIXED_MOSTLY_CRLF else: return MixedLineDetection.MIXED_MOSTLY_LF if __name__ == '__main__': sys.exit(mixed_line_ending())