from html.parser import HTMLParser from pathlib import Path import json,re base=Path('work/trilium/api-source') class Extract(HTMLParser): def __init__(self):super().__init__(convert_charrefs=False);self.stack=[];self.texts=[] def handle_starttag(self,tag,attrs): if tag not in ['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr']:self.stack.append((tag,dict(attrs))) def handle_endtag(self,tag): for i in range(len(self.stack)-1,-1,-1): if self.stack[i][0]==tag:self.stack=self.stack[:i];break def handle_data(self,data): if any(t in ['script','style','code','pre'] for t,a in self.stack):return if any('tsd-comment' in a.get('class','') for t,a in self.stack) and re.search('[A-Za-z]',data) and data.strip():self.texts.append(data.strip()) texts=[] for name in ['frontend','fnote','backend']: p=Extract();p.feed((base/(name+'.html')).read_text());texts.extend(p.texts) unique=list(dict.fromkeys(texts));(base/'script-strings.json').write_text(json.dumps(unique,ensure_ascii=False,indent=2));print('\n'.join(str(i)+' '+v for i,v in enumerate(unique)))