Files

19 lines
1.1 KiB
Python

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)))