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