Improve print layout options and character packing
This commit is contained in:
+27
-4
@@ -98,6 +98,21 @@ def prompt_positive_int(label: str, default: int) -> int:
|
||||
return parsed
|
||||
|
||||
|
||||
def prompt_nonnegative_float(label: str, default: float) -> float:
|
||||
value = input(f"{label} [{default:g}]: ").strip()
|
||||
if not value:
|
||||
return default
|
||||
try:
|
||||
parsed = float(value)
|
||||
except ValueError:
|
||||
print(f"Invalid number '{value}', using {default:g}.")
|
||||
return default
|
||||
if parsed < 0:
|
||||
print(f"Unsupported value '{parsed:g}', using {default:g}.")
|
||||
return default
|
||||
return parsed
|
||||
|
||||
|
||||
def prompt_bool(label: str, default: bool) -> bool:
|
||||
suffix = "Y/n" if default else "y/N"
|
||||
value = input(f"{label} [{suffix}]: ").strip().lower()
|
||||
@@ -183,7 +198,7 @@ def default_config() -> BuildConfig:
|
||||
project_version=load_project_version(),
|
||||
starter_unique_colors=True,
|
||||
rent_raised_count=3,
|
||||
margin_mm=12.0,
|
||||
margin_mm=10.0,
|
||||
bleed_mm=1.0,
|
||||
clean_edge_mm=0.35,
|
||||
output_pdf_name="",
|
||||
@@ -198,7 +213,8 @@ def interactive_config() -> BuildConfig:
|
||||
dpi = prompt_int("DPI", default.dpi, [300, 600])
|
||||
crop = prompt_bool("Crop black borders", default.crop_black_borders)
|
||||
card_mm = prompt_card_size(default.card_mm)
|
||||
board_mode, custom_board = prompt_board_mode(PAPER_SIZES_MM[paper], default.margin_mm)
|
||||
margin_mm = prompt_nonnegative_float("Page margin in mm", default.margin_mm)
|
||||
board_mode, custom_board = prompt_board_mode(PAPER_SIZES_MM[paper], margin_mm)
|
||||
unify_starter_colors = prompt_bool("Unify starter badge colors", not default.starter_unique_colors)
|
||||
rent_raised_count = prompt_positive_int("Number of Rent raised", default.rent_raised_count)
|
||||
gamma_enabled, gamma, black_point = prompt_gamma()
|
||||
@@ -217,7 +233,7 @@ def interactive_config() -> BuildConfig:
|
||||
project_version=default.project_version,
|
||||
starter_unique_colors=not unify_starter_colors,
|
||||
rent_raised_count=rent_raised_count,
|
||||
margin_mm=default.margin_mm,
|
||||
margin_mm=margin_mm,
|
||||
bleed_mm=default.bleed_mm,
|
||||
clean_edge_mm=default.clean_edge_mm,
|
||||
output_pdf_name=output_pdf_name,
|
||||
@@ -232,6 +248,7 @@ def parse_args(argv=None) -> argparse.Namespace:
|
||||
parser.add_argument("--dpi", type=int, choices=[300, 600], help="Override DPI.")
|
||||
parser.add_argument("--paper", choices=sorted(PAPER_SIZES_MM), help="Override paper size.")
|
||||
parser.add_argument("--card-size", metavar="SIZE", type=parse_card_size_arg, help="Override card size by name or WIDTHxHEIGHT in mm.")
|
||||
parser.add_argument("--margin", type=float, help="Page margin in millimeters.")
|
||||
parser.add_argument("--crop", action="store_true", help="Crop black borders.")
|
||||
parser.add_argument("--no-gamma", action="store_true", help="Disable print brightening gamma.")
|
||||
parser.add_argument("--render-only", action="store_true", help="Render source card/board PNGs and skip page/PDF creation.")
|
||||
@@ -255,6 +272,11 @@ def apply_overrides(config: BuildConfig, args: argparse.Namespace) -> BuildConfi
|
||||
if args.rent_raised <= 0:
|
||||
raise SystemExit("--rent-raised must be a positive non-zero integer.")
|
||||
rent_raised_count = args.rent_raised
|
||||
margin_mm = config.margin_mm
|
||||
if args.margin is not None:
|
||||
if args.margin < 0:
|
||||
raise SystemExit("--margin must not be negative.")
|
||||
margin_mm = args.margin
|
||||
return BuildConfig(
|
||||
paper_name=paper_name,
|
||||
paper_mm=PAPER_SIZES_MM[paper_name],
|
||||
@@ -269,7 +291,7 @@ def apply_overrides(config: BuildConfig, args: argparse.Namespace) -> BuildConfi
|
||||
project_version=config.project_version,
|
||||
starter_unique_colors=(args.starter_colors == "separate") if args.starter_colors else config.starter_unique_colors,
|
||||
rent_raised_count=rent_raised_count,
|
||||
margin_mm=config.margin_mm,
|
||||
margin_mm=margin_mm,
|
||||
bleed_mm=config.bleed_mm,
|
||||
clean_edge_mm=config.clean_edge_mm,
|
||||
output_pdf_name=args.output if args.output is not None else config.output_pdf_name,
|
||||
@@ -294,6 +316,7 @@ def main(argv=None) -> None:
|
||||
card version: {config.project_version or '<none>'}
|
||||
starter badge colors: {'different player colors' if config.starter_unique_colors else 'same color per starter deck'}
|
||||
Rent raised cards: {config.rent_raised_count}
|
||||
margin: {config.margin_mm:g} mm
|
||||
bleed: {config.bleed_mm} mm ({mm_to_px(config.bleed_mm, config.dpi)} px at {config.dpi} DPI)
|
||||
crop black borders: {'yes' if config.crop_black_borders else 'no'}
|
||||
gamma: {'off' if not config.gamma_enabled else f'{config.gamma} with black point {config.black_point}'}
|
||||
|
||||
Reference in New Issue
Block a user