global HTMLParser from html.parser import HTMLParser global html import html global browserDoc class browserDoc(QTextBrowser): def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) self.setOpenLinks(False) style = "" if (config["accessibility"]["colorBackground"] != "default"): style += "background-color: " +config["accessibility"]["colorBackground"] + ";" if (config["accessibility"]["colorText"] != "default"): style += "color: " +config["accessibility"]["colorText"]+ ";" self.setStyleSheet("QTextBrowser { " +style+ " }") self.anchorClicked.connect(self.cAnchorClicked) class cHtmlParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.output = "" self.voidElements = ["area","base","br","col","hr","img","input","link","meta","param","command","keygen","source"] self.blackList = ["img","script","style"] self.tagDir = [] def handle_starttag(self,tag,attrs): if not tag in self.voidElements: self.tagDir.append(tag) if tag in self.blackList: return self.output += "<" +html.escape(tag) for attr in attrs: self.output += " " +html.escape(attr[0]) if attr[1] != None: self.output += '="' +html.escape(attr[1])+ '"' self.output += ">" def handle_endtag(self,tag): if not tag in self.voidElements: index = len(self.tagDir) - 1 while index >= 0: if self.tagDir[index] == tag: self.tagDir = self.tagDir[index + 1:] break index -= 1 self.output += "" def handle_data(self,data): curTag = "" if len(self.tagDir) > 0: curTag = self.tagDir[-1] if curTag in self.blackList: return self.output += data def cRenderHtml(self,htm): parser = self.cHtmlParser() parser.feed(htm) self.clear() self.insertHtml(parser.output) self.update() def cAnchorClicked(self,url): url = str(url.toEncoded(),"utf-8") browserWindow = self.parent() curUrl = browserWindow.cDocumentInfo["url"] curUrlParsed = parseUrl(curUrl) urlParsed = parseUrl(url) print("---") print("navigating from: " +curUrl) print("to: " +url) if urlParsed["protocol"] == "": # is relative if url[0] == "#": curUrlParsed["anchor"] = url[1:] url = unparseUrl(curUrlParsed) elif url[:2] == "//": url = curUrlParsed["protocol"] + ":" + url elif url[0] == "/": urlParsed["protocol"] = curUrlParsed["protocol"] urlParsed["domain"] = curUrlParsed["domain"] urlParsed["path"] = urlParsed["path"][1:] url = unparseUrl(urlParsed) else: urlParsed["protocol"] = curUrlParsed["protocol"] urlParsed["domain"] = curUrlParsed["domain"] while len(curUrlParsed["path"]) > 0 and curUrlParsed["path"][-1] == "/": curUrlParsed["path"] = curUrlParsed["path"][:-1] urlParsed["path"] = curUrlParsed["path"] + "/" + url url = unparseUrl(urlParsed) browserWindow.cUrlBar.setText(url) browserWindow.cNavigate()