Marlin/buildroot/share/scripts/linesformat.py
Scott Lahteine 35da223f0a 🧑‍💻 Py scripts refinements
2025-10-07 02:26:49 -05:00

74 lines
2.2 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Formatter script for *.h, *.c, *.cpp, *.md, *.txt, and other source files
usage: linesformat.py [infile] [outfile]
With no parameters convert STDIN to STDOUT
"""
import sys, re, argparse
do_log = False
def logmsg(msg, line):
if do_log: print(msg, line)
def format_text(argv):
parser = argparse.ArgumentParser(description="Formatter script for source files")
parser.add_argument('infile', nargs='?', default=None, help="Input file to read from. If not provided, reads from stdin.")
parser.add_argument('outfile', nargs='?', default=None, help="Output file to write to. If not provided, writes to stdout.")
parser.add_argument('-v', action='store_true', help="Enable logging.")
args = parser.parse_args(argv)
src_file = args.infile or 'stdin'
dst_file = args.outfile or None
scnt = 0
for arg in argv:
if arg == '-v':
global do_log
do_log = args.v or True
elif scnt == 0:
# Get a source file if specified. Default destination is the same file
src_file = dst_file = arg
scnt += 1
elif scnt == 1:
# Get destination file if specified
dst_file = arg
scnt += 1
# No text to process yet
file_text = ''
if src_file == 'stdin':
# If no source file specified read from STDIN
file_text = sys.stdin.read()
else:
# Directory will be processed recursively with editorconfig
if os.path.isdir(src_file):
apply_editorconfig_rules(src_file)
return
# Open and read the file src_file
with open(src_file, 'r', encoding='utf-8') as rf:
file_text = rf.read()
if len(file_text) == 0:
print('No text to process')
return
# Read from file or STDIN until it terminates
filtered = re.sub(r'\s+$', '', file_text) + '\n'
if dst_file:
with open(dst_file, 'w', encoding='utf-8', newline='') as wf:
wf.write(filtered)
else:
print(filtered)
# Python standard startup for command line with arguments
if __name__ == '__main__':
format_text(sys.argv[1:])
# Usage
apply_editorconfig_rules('/path/to/your/folder')