1111
1212import argparse
1313import os
14+ import re
1415
1516
1617def _parse_page_ranges (spec : str ) -> set :
@@ -87,6 +88,18 @@ def get_output_base_name(outputfile: str, inputfiles: list) -> str:
8788 return "page"
8889
8990
91+ def _get_version () -> str :
92+ """Read the PostForge version from sysdict.ps (sole source of truth)."""
93+ sysdict = os .path .join (os .path .dirname (os .path .abspath (__file__ )),
94+ os .pardir , "resources" , "Init" , "sysdict.ps" )
95+ with open (sysdict , "r" ) as f :
96+ for line in f :
97+ m = re .search (r'/revisionstring\s+\(([^)]+)\)' , line )
98+ if m :
99+ return m .group (1 )
100+ return "unknown"
101+
102+
90103def build_argument_parser (available_devices : list ) -> argparse .ArgumentParser :
91104 """
92105 Create and configure the PostForge argument parser.
@@ -103,6 +116,10 @@ def build_argument_parser(available_devices: list) -> argparse.ArgumentParser:
103116 epilog = "If no input file is provided, PostForge will run in interactive mode." ,
104117 )
105118
119+ parser .add_argument (
120+ "-V" , "--version" , action = "version" ,
121+ version = f"PostForge { _get_version ()} "
122+ )
106123 parser .add_argument ("inputfiles" , nargs = "*" , help = "PostScript input files to process (each as separate job)" )
107124 parser .add_argument (
108125 "-o" , "--output" , dest = "outputfile" , help = "Specify output filename"
0 commit comments