Opció --no-accents / «Sense accents» a CLI i GUI
This commit is contained in:
+11
-1
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user