49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Mess up a Gerber file to look like it was generated by Zuken CR-8000.
|
|
# Only meant to work with KiCAD Gerber files.
|
|
#
|
|
|
|
import re
|
|
|
|
def map_line(line):
|
|
# strip layer polarity statement at start of header
|
|
if line == '%LPD*%':
|
|
return ''
|
|
|
|
# Replace end of aperture list comment with empty line and layer polarity statement
|
|
if line == 'G04 APERTURE END LIST*':
|
|
return '\n%LPD*%\n' # this is the last newline in this file
|
|
|
|
# strip comments
|
|
if line.startswith('G04'):
|
|
return ''
|
|
|
|
# add G54 prefix to aperture selection statements
|
|
if re.fullmatch(r'D[1-9][0-9]\*', line):
|
|
return f'G54{line}'
|
|
|
|
# make flash statements more complicated
|
|
if (m := re.fullmatch(r'(.*)D03\*', line)):
|
|
return f'{m[1]}D02*G55D03*'
|
|
|
|
# replace M02 EOF with M00 EOF, and insert X0Y0D02
|
|
if line == 'M02*':
|
|
return 'X0Y0D02*M00*'
|
|
|
|
# Merge G01/02/03 with following coordinate
|
|
if line in ('G01*', 'G02*', 'G03*') and ('X' in line or 'Y' in line):
|
|
return line[:-1]
|
|
|
|
# Preserve line endings for header lines
|
|
if any(line.startswith(cmd) for cmd in ('%FS', '%MO', '%AD')):
|
|
return f'{line}\n'
|
|
|
|
return line
|
|
|
|
def zukenka(data):
|
|
return ''.join(map_line(line) for line in data.splitlines())
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
print(zukenka(sys.stdin.read()))
|