main
John Lauer Keep library regeneration consistent with corrected front outline and preserve project audit evidence 9cc5edb 9d ago
import json,re,hashlib
from pathlib import Path
root=Path(__file__).resolve().parents[2];out=Path(__file__).parent
src=(root/'kicad/power.kicad_sch').read_text();start=src.index('(symbol "Transistor_FET:Q_NMOS_GDS"');depth=0;quote=False;esc=False
for end in range(start,len(src)):
 c=src[end]
 if esc:esc=False;continue
 if c=='\\' and quote:esc=True;continue
 if c=='"':quote=not quote
 if not quote:
  if c=='(':depth+=1
  elif c==')':
   depth-=1
   if depth==0:break
sym=src[start:end+1].replace('Transistor_FET:Q_NMOS_GDS','IXTP15N50L2').replace('Q_NMOS_GDS','IXTP15N50L2')
datasheet='https://www.littelfuse.com/~/media/electronics/datasheets/discrete_mosfets/littelfuse_discrete_mosfets_n-channel_linear_ixt_15n50_datasheet.pdf.pdf'
# Replace metadata, preserve the conventional MOSFET graphics and G/D/S pins.
sym=re.sub(r'\(property "Datasheet" "[^"]*"', '(property "Datasheet" "'+datasheet+'"',sym)
sym=re.sub(r'\(property "Description" "[^"]*"','(property "Description" "IXYS LinearL2 N-channel MOSFET, TO-220AB, G-D-S; tab is Drain"',sym)
sym=re.sub(r'\(property "Footprint" "[^"]*"','(property "Footprint" "IXTP15N50L2:IXTP15N50L2_TO220_Straight_Drill1p4"',sym)
for key,val in [('MPN','IXTP15N50L2'),('Manufacturer','IXYS / Littelfuse'),('Adom Wiki','https://wiki.adom.inc/adom/ixtp15n50l2'),('Mouser','747-IXTP15N50L2')]:
 sym=sym[:-1]+f'\n(property "{key}" "{val}" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))\n)'
(out/'ixtp15n50l2.kicad_sym').write_text('(kicad_symbol_lib (version 20231120) (generator "adom-component-audit")\n'+sym+'\n)\n')
fp={'footprintName':'IXTP15N50L2_TO220_Straight_Drill1p4','description':'Original straight-lead candidate from DS100054B page 2. 1.4 mm finished holes; production tolerances require approval. Not the electronic-load horizontal forming variant.','pads':[{'number':str(i+1),'x':i*2.54,'y':0,'dx':2.2,'dy':2.2,'shape':'rect' if i==0 else 'circle','type':'thru_hole','drill':1.4} for i in range(3)],'body':{'x1':-2.79,'y1':-2.54,'x2':7.87,'y2':2.79},'courtyard':{'x1':-3.04,'y1':-2.79,'x2':8.12,'y2':3.04}}
(out/'footprint-input.json').write_text(json.dumps(fp,indent=2)+'\n')