From ab8d9e40aa9138955ec7cdd1c1b259926b2ab731 Mon Sep 17 00:00:00 2001 From: anezih <90565940+anezih@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:29:42 +0300 Subject: [PATCH] + --- src/gts.py | 38 +++++--- src/tpl/inline.html.j2 | 69 ++++++++++++++ src/tpl/stardict.html.j2 | 70 ++++++++++++++ src/tpl/stardict_bicem.css | 120 ++++++++++++++++++++++++ src/tpl/stardict_webkit.html.j2 | 74 +++++++++++++++ src/tpl/stardict_webkit_bicem.css | 151 ++++++++++++++++++++++++++++++ 6 files changed, 511 insertions(+), 11 deletions(-) create mode 100644 src/tpl/inline.html.j2 create mode 100644 src/tpl/stardict.html.j2 create mode 100644 src/tpl/stardict_bicem.css create mode 100644 src/tpl/stardict_webkit.html.j2 create mode 100644 src/tpl/stardict_webkit_bicem.css diff --git a/src/gts.py b/src/gts.py index df0ed61..20b267c 100644 --- a/src/gts.py +++ b/src/gts.py @@ -4,7 +4,6 @@ import json import re import subprocess -import sys import tarfile from datetime import datetime from enum import Enum @@ -21,6 +20,9 @@ SURUM = (2, 4, 3) BETIK_DY = Path(__file__).resolve().parent +def html_escape(metin: str) -> str: + return html.escape(metin) + # https://github.com/anezih/add_inflections/blob/c58b98de4b65eff357427849533bb05139481806/add_inflections.py#L43 class InflBase: def __init__(self, source_path: str, glos_format: str = "") -> None: @@ -260,14 +262,15 @@ def anlam_sira(self) -> int: return int(self.anlam_sozluk["anlam_sira"]) @cached_property - def fiil(self) -> str: + def fiil(self) -> bool: if self.anlam_sozluk["fiil"] == "1": - return "[FİİL]" + return True + return False @cached_property def ozelliklerListe(self) -> list[str]: ozellikler: list[str] = list() - if _ozelliklerListe:=self.anlam_sozluk["ozelliklerListe"]: + if _ozelliklerListe:=self.anlam_sozluk.get("ozelliklerListe"): for o in _ozelliklerListe: ozellikler.append(o["tam_adi"]) return ozellikler @@ -306,7 +309,7 @@ def anlam_gonderme_baglantili(self) -> str: j, f'{j}', 1 - ) + ).replace("► ","") return yeni_tanim class Girdi: @@ -319,7 +322,9 @@ def __init__(self, json_girdisi: dict[str,str], duzeltme_imi: DuzeltmeImi, @property def anlam_html(self) -> str: - return self.tpl.render({"Girdi" : self}) + html = self.tpl.render({"Girdi" : self}).replace("\n","") + html = re.sub(r"\s{2,}", " ", html) + return html @property def diger_bicimler(self) -> set[str]: @@ -352,14 +357,16 @@ def madde_imsiz(self) -> str: return self.duzeltme_imi(self.madde) @cached_property - def cogul_mu(self) -> str: + def cogul_mu(self) -> bool: if self.json_girdisi["cogul_mu"] == "1": - return "[ÇOĞUL]" + return True + return False @cached_property - def ozel_mi(self) -> str: + def ozel_mi(self) -> bool: if self.json_girdisi["ozel_mi"] == "1": - return "[ÖZEL]" + return True + return False @cached_property def lisan(self) -> str: @@ -463,6 +470,7 @@ def GtsJSON(self) -> dict: def tpl(self) -> Template: env = Environment(loader=FileSystemLoader(BETIK_DY / "tpl"), trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=False) + env.filters["HtmlEscape"] = html_escape match self.cikti_secenegi: case CiktiSecenegi.StarDict: return env.get_template("stardict.html.j2") @@ -487,7 +495,7 @@ def css_ekle(self, glossary: Glossary) -> None: def ekle(css_path: Path): glossary.addEntry( glossary.newDataEntry( - css_path.name, css_path.read_bytes + css_path.name, css_path.read_bytes() ) ) match self.cikti_secenegi: @@ -556,6 +564,14 @@ def kobo(self) -> None: if not klasor.exists(): klasor.mkdir() glossary.write(str(dosya_ismi), "Dictfile") + df_satirlar = dosya_ismi.read_text(encoding="utf-8").split("\n") + df_satirlar_yeni: list[str] = list() + for satir in df_satirlar: + if satir.startswith("@"): + df_satirlar_yeni.append(satir.replace("\"", "'")) + else: + df_satirlar_yeni.append(satir) + dosya_ismi.write_text("\n".join(df_satirlar_yeni), encoding="utf-8") subprocess.Popen(["dictgen-windows.exe", str(dosya_ismi), "-o", str(klasor / "dicthtml-tr.zip")], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) diff --git a/src/tpl/inline.html.j2 b/src/tpl/inline.html.j2 new file mode 100644 index 0000000..2c36389 --- /dev/null +++ b/src/tpl/inline.html.j2 @@ -0,0 +1,69 @@ +
+
+ {% if Girdi.telaffuz %} + /{{ Girdi.telaffuz }}/ + {% endif %} + {% if Girdi.lisan %} + Kaynak: {{ Girdi.lisan }} + {% endif %} + {% if Girdi.cogul_mu %} + [ÇOĞUL]  + {% endif %} + {% if Girdi.ozel_mi %} + [ÖZEL] + {% endif %} +
+
+ {% if Girdi.on_taki or Girdi.taki %} + {{ Girdi.on_taki }} {{ Girdi.madde }}, -{{Girdi.taki}} + {% endif %} + {% for Anlam in Girdi.anlam %} +
+ {% if Girdi.anlam|length > 1 %} + {{ Anlam.anlam_sira }}.  + {% else %} + + {% endif %} + {% if Anlam.fiil %} + [FİİL]  + {% endif %} + {% if Anlam.ozelliklerListe %} + [ + {% for Ozellik in Anlam.ozelliklerListe %} + {{ "%s" % Ozellik if loop.last else "%s, " % Ozellik }} + {% endfor %} + ] + {% endif %} + + {{ Anlam.anlam }} + + {% if Anlam.orneklerListe %} +
+ {% for _ornek in Anlam.orneklerListe %} + ▪ {{ _ornek.ornek }} + {% if _ornek.yazar %} + — {{ _ornek.yazar }} + {% endif %} + {% endfor %} +
+ {% endif %} +
+ {% endfor %} + {% if Girdi.atasozu %} +
+ Atasözleri, Deyimler veya Birleşik Fiiller
+ {% for a in Girdi.atasozu %} + {{ "%s" % a if loop.last else "%s, " % a }} + {% endfor %} +
+ {% endif %} + {% if Girdi.birlesikler %} +
+ Birleşik Kelimeler
+ {% for a in Girdi.birlesikler %} + {{ "%s" % a if loop.last else "%s, " % a }} + {% endfor %} +
+ {% endif %} +
+
\ No newline at end of file diff --git a/src/tpl/stardict.html.j2 b/src/tpl/stardict.html.j2 new file mode 100644 index 0000000..d99fb46 --- /dev/null +++ b/src/tpl/stardict.html.j2 @@ -0,0 +1,70 @@ + +
+
+ {% if Girdi.telaffuz %} + /{{ Girdi.telaffuz }}/ + {% endif %} + {% if Girdi.lisan %} + Kaynak: {{ Girdi.lisan }} + {% endif %} + {% if Girdi.cogul_mu %} + [ÇOĞUL]  + {% endif %} + {% if Girdi.ozel_mi %} + [ÖZEL] + {% endif %} +
+
+ {% if Girdi.on_taki or Girdi.taki %} + {{ Girdi.on_taki }} {{ Girdi.madde }}, -{{Girdi.taki}} + {% endif %} + {% for Anlam in Girdi.anlam %} +
+ {% if Girdi.anlam|length > 1 %} + {{ Anlam.anlam_sira }}.  + {% else %} + + {% endif %} + {% if Anlam.fiil %} + [FİİL]  + {% endif %} + {% if Anlam.ozelliklerListe %} + [ + {% for Ozellik in Anlam.ozelliklerListe %} + {{ "%s" % Ozellik if loop.last else "%s, " % Ozellik }} + {% endfor %} + ] + {% endif %} + + {{ Anlam.anlam_gonderme_baglantili }} + + {% if Anlam.orneklerListe %} +
+ {% for _ornek in Anlam.orneklerListe %} + ▪ {{ _ornek.ornek }} + {% if _ornek.yazar %} + — {{ _ornek.yazar }} + {% endif %} + {% endfor %} +
+ {% endif %} +
+ {% endfor %} + {% if Girdi.atasozu %} +
+ Atasözleri, Deyimler veya Birleşik Fiiller + {% for a in Girdi.atasozu %} + {{a}} + {% endfor %} +
+ {% endif %} + {% if Girdi.birlesikler %} +
+ Birleşik Kelimeler + {% for a in Girdi.birlesikler %} + {{a}} + {% endfor %} +
+ {% endif %} +
+
\ No newline at end of file diff --git a/src/tpl/stardict_bicem.css b/src/tpl/stardict_bicem.css new file mode 100644 index 0000000..4f36609 --- /dev/null +++ b/src/tpl/stardict_bicem.css @@ -0,0 +1,120 @@ +div.girdi { + display: block; +} + +div.ozellik { + display: inline-block; +} + +div.anlam { + display: block; + margin-top: 0.375em; +} + +div.anlam-tekil { + display: block; + margin-bottom: 0.5em; +} + +div.ornekler { + display: block; +} + +div.atasozu { + display: block; + margin-top: 0.5em; +} + +div.birlesikler { + display: block; + margin-top: 0.5em; +} + +span.okunus { + display: block; + margin-bottom: 0.375em; + color: #014E52; +} + +span.dil { + display: block; + margin-bottom: 0.5em; +} + +span.cogul { + display: inline-block; + color: #002BB3; +} + +span.ozel { + display: inline-block; + color: #002BB3; +} + +span.madde { + font-weight: bold; + display: block; + margin-bottom: 0.375em; +} + +span.anlam-sira { + font-weight: bold; +} + +span.eylem { + display: inline-block; + color: #002BB3; +} + +span.girinti { + text-indent: 1em; +} + +span.ozellik { + display: inline-block; + font-style: normal; + color: #002BB3; +} + +/* span.anlam { + +} */ + +span.ornek { + display: block; + margin-left: 1em; + margin-right: 1em; + margin-top: 0.5em; +} + +span.yazar { + display: block; + text-indent: 1.05em; +} + +span.baslik { + font-weight: bold; + display: block; + margin-bottom: 0.375em; +} + +span.atasozu-baglanti { + display: block; +} + +span.birlesikler-baglanti { + display: block; +} + +a { + text-decoration: underline; + color: black; +} + +a.atasozu { + text-decoration: none; +} + +a.birlesikler { + text-decoration: none; +} \ No newline at end of file diff --git a/src/tpl/stardict_webkit.html.j2 b/src/tpl/stardict_webkit.html.j2 new file mode 100644 index 0000000..557ff2f --- /dev/null +++ b/src/tpl/stardict_webkit.html.j2 @@ -0,0 +1,74 @@ + +
+
+ {% if Girdi.telaffuz %} + /{{ Girdi.telaffuz }}/ + {% endif %} + {% if Girdi.lisan %} + {{ Girdi.lisan }} + {% endif %} + {% if Girdi.cogul_mu %} + [ÇOĞUL] + {% endif %} + {% if Girdi.ozel_mi %} + [ÖZEL] + {% endif %} +
+
+ {% if Girdi.on_taki or Girdi.taki %} + {{ Girdi.on_taki }} {{ Girdi.madde }}, -{{Girdi.taki}} + {% endif %} + {% for Anlam in Girdi.anlam %} +
+ {% if Girdi.anlam|length > 1 %} + {{ Anlam.anlam_sira }} + {% else %} + + {% endif %} + {% if Anlam.fiil %} + [FİİL] + {% endif %} + {% if Anlam.ozelliklerListe %} + + {% for Ozellik in Anlam.ozelliklerListe %} + {{ "%s" % Ozellik if loop.last else "%s, " % Ozellik }} + {% endfor %} + + {% endif %} + + {{ Anlam.anlam_gonderme_baglantili }} + + {% if Anlam.orneklerListe %} +
+ {% for _ornek in Anlam.orneklerListe %} + {{ _ornek.ornek }} + {% if _ornek.yazar %} + {{ _ornek.yazar }} + {% endif %} + {% endfor %} +
+ {% endif %} +
+ {% endfor %} + {% if Girdi.atasozu %} +
+ Atasözleri, Deyimler veya Birleşik Fiiller + {% for a in Girdi.atasozu %} + {% if loop.last %} + {{a}} + {% else %} + {{a}} + {% endif %} + {% endfor %} +
+ {% endif %} + {% if Girdi.birlesikler %} +
+ Birleşik Kelimeler + {% for a in Girdi.birlesikler %} + {{a}} + {% endfor %} +
+ {% endif %} +
+
\ No newline at end of file diff --git a/src/tpl/stardict_webkit_bicem.css b/src/tpl/stardict_webkit_bicem.css new file mode 100644 index 0000000..5732f01 --- /dev/null +++ b/src/tpl/stardict_webkit_bicem.css @@ -0,0 +1,151 @@ +div.girdi { + display: block; +} + +div.ozellik { + display: inline-block; +} + +div.anlam { + display: block; + margin-top: 0.375em; +} + +div.anlam-tekil { + display: block; + margin-bottom: 0.5em; +} + +div.ornekler { + display: block; +} + +div.atasozu { + display: block; + margin-top: 0.5em; +} + +div.birlesikler { + display: block; + margin-top: 0.5em; +} + +span.okunus { + display: block; + margin-bottom: 0.375em; + color: #014E52; +} + +span.dil { + display: block; + margin-bottom: 0.5em; +} + +span.dil::before { + content: "Kaynak: "; + color: #7C021A; +} + +span.cogul { + display: inline-block; + color: #002BB3; +} + +span.cogul::after { + content: "\00A0"; +} + +span.ozel { + display: inline-block; + color: #002BB3; +} + +span.madde { + font-weight: bold; + display: block; + margin-bottom: 0.375em; +} + +span.anlam-sira { + font-weight: bold; +} + +span.anlam-sira::after { + content: ". "; +} + +span.eylem { + display: inline-block; + color: #002BB3; +} + +span.eylem::after { + content: "\00A0"; +} + +span.girinti { + text-indent: 1em; +} + +span.ozellik { + display: inline-block; + font-style: normal; + color: #002BB3; +} + +span.ozellik::before { + content: "["; + font-style: normal; +} + +span.ozellik::after { + content: "]"; + font-style: normal; +} + +/* span.anlam { + +} */ + +span.ornek { + display: block; + margin-left: 1em; + margin-right: 1em; + margin-top: 0.5em; +} + +span.ornek::before { + content: "\25AA\00A0"; +} + +span.yazar { + display: block; + text-indent: 1.05em; +} + +span.yazar::before { + content: "\2014\00A0"; +} + +span.baslik { + font-weight: bold; + display: block; + margin-bottom: 0.375em; +} + +span.atasozu-baglanti { + display: block; +} + +span.birlesikler-baglanti { + display: block; +} + +a::before { + content: "\2197\00A0"; +} + +a { + text-decoration: none; + color: black; +} \ No newline at end of file