19 lines
1.1 KiB
Python
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)))
|