Opció --no-accents / «Sense accents» a CLI i GUI

This commit is contained in:
2026-05-12 10:34:10 +02:00
parent 3ee2b303fe
commit 01415776b9
2 changed files with 32 additions and 12 deletions
+11 -1
View File
@@ -103,6 +103,7 @@ def build_font_bitmap(
columns: int = 15,
box_width_override: int | None = None,
box_height_override: int | None = None,
strip_accents: bool = False,
) -> FontBitmapResult:
"""Rasteriza un TTF a un bitmap de fuente en memoria. No toca disco.
@@ -160,6 +161,9 @@ def build_font_bitmap(
if ch.isspace():
chars_to_render.append(ch)
char_render_as[ch] = ch
elif strip_accents and ch in CHAR_FALLBACKS and font.getlength(CHAR_FALLBACKS[ch]) >= 1.0:
chars_to_render.append(ch)
char_render_as[ch] = CHAR_FALLBACKS[ch]
elif font.getlength(ch) >= 1.0 and not _is_notdef(ch):
chars_to_render.append(ch)
char_render_as[ch] = ch
@@ -408,10 +412,13 @@ def render_font(
columns: int,
box_width_override: int | None,
box_height_override: int | None,
strip_accents: bool = False,
) -> None:
"""Wrapper CLI: rasteriza el TTF y escribe los ficheros, con logging."""
try:
result = build_font_bitmap(ttf_path, size, columns, box_width_override, box_height_override)
result = build_font_bitmap(ttf_path, size, columns,
box_width_override, box_height_override,
strip_accents)
except (FileNotFoundError, RuntimeError) as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)
@@ -492,6 +499,8 @@ Notas:
parser.add_argument("--box-height", default=None, type=int, help="Altura fija de celda en px (default: auto)")
parser.add_argument("--cell-spacing", default=0, type=int, help="Píxeles de separación entre columnas, y borde (default: 0)")
parser.add_argument("--row-spacing", default=None, type=int, help="Píxeles de separación entre filas (default: igual a --cell-spacing)")
parser.add_argument("--no-accents", action="store_true",
help="Renderiza À/É/ñ/Ç… como A/E/n/C (sin acentos). El codepoint original se conserva en el .fnt.")
args = parser.parse_args()
@@ -529,6 +538,7 @@ Notas:
columns = args.columns,
box_width_override = args.box_width,
box_height_override= args.box_height,
strip_accents = args.no_accents,
)
+21 -11
View File
@@ -47,12 +47,13 @@ class FontGenApp(tk.Tk):
self._last_result: font_gen.FontBitmapResult | None = None
self._zoom: int | None = DEFAULT_ZOOM # None = auto-fit; int = escala explícita
self.ttf_var = tk.StringVar()
self.size_var = tk.IntVar(value=8)
self.output_var = tk.StringVar()
self.columns_var = tk.IntVar(value=15)
self.bw_var = tk.StringVar() # "" = auto
self.bh_var = tk.StringVar() # "" = auto
self.ttf_var = tk.StringVar()
self.size_var = tk.IntVar(value=8)
self.output_var = tk.StringVar()
self.columns_var = tk.IntVar(value=15)
self.bw_var = tk.StringVar() # "" = auto
self.bh_var = tk.StringVar() # "" = auto
self.strip_accents_var = tk.BooleanVar(value=False)
self._adv_visible = False
@@ -60,7 +61,8 @@ class FontGenApp(tk.Tk):
self._load_state() # antes de los traces: el set() inicial no debe disparar preview
self._update_zoom_label()
for v in (self.ttf_var, self.size_var, self.columns_var, self.bw_var, self.bh_var):
for v in (self.ttf_var, self.size_var, self.columns_var,
self.bw_var, self.bh_var, self.strip_accents_var):
v.trace_add("write", lambda *_: self._schedule_preview())
# Disparar un preview inicial si _load_state nos dejó un TTF válido.
@@ -86,6 +88,8 @@ class FontGenApp(tk.Tk):
ttk.Spinbox(row, from_=4, to=128, width=5, textvariable=self.size_var).pack(side="left")
ttk.Label(row, text="Salida:").pack(side="left", padx=(16, 4))
ttk.Entry(row, textvariable=self.output_var, width=24).pack(side="left")
ttk.Checkbutton(row, text="Sense accents",
variable=self.strip_accents_var).pack(side="left", padx=(16, 0))
self.adv_btn = ttk.Button(root, text="▸ Opciones avanzadas", command=self._toggle_advanced)
self.adv_btn.pack(anchor="w", pady=(8, 0))
@@ -202,7 +206,10 @@ class FontGenApp(tk.Tk):
bh = _parse_optional_positive_int(self.bh_var.get())
try:
result = font_gen.build_font_bitmap(ttf, size, columns, bw, bh)
result = font_gen.build_font_bitmap(
ttf, size, columns, bw, bh,
strip_accents=self.strip_accents_var.get(),
)
except Exception as e:
self._show_preview_error(f"Error: {e}")
return
@@ -333,6 +340,8 @@ class FontGenApp(tk.Tk):
size = state.get("size")
if isinstance(size, int) and 4 <= size <= 256:
self.size_var.set(size)
if isinstance(state.get("strip_accents"), bool):
self.strip_accents_var.set(state["strip_accents"])
# Zoom: None (auto), o int en [1, MANUAL_MAX_SCALE]
if "zoom" in state:
zoom = state["zoom"]
@@ -347,9 +356,10 @@ class FontGenApp(tk.Tk):
except tk.TclError:
size = 8
state = {
"ttf": self.ttf_var.get().strip(),
"size": size,
"zoom": self._zoom,
"ttf": self.ttf_var.get().strip(),
"size": size,
"zoom": self._zoom,
"strip_accents": self.strip_accents_var.get(),
}
try:
with open(STATE_FILE, "w", encoding="utf-8") as f: