Heiko Oberdiek wrote:
I would dislike the idea to have a complicate algorithm only to order pdfTeX versions.
indeed, all 'important' changes (primitives, features) should be reflected in on enumber;
* \pdftexversion and \pdftexrevision are accessed differently: \the\pdftexversion, but \pdftexrevision (expandable) And \pdfversion encodes two numbers.
Thus having three numbers instead of the current mixup improves the usage interface.
* Compatibility: * \pdftexversion is used in (TL2004): * ConTeXt * hyperref * graphicx/pdftex.def * pdfcprot * texinfo * fontinst * attachfile * pdfpages * thumbpdf * ... * \pdftexrevision is used: * hyperref * fontinst * pdfcprot * graphicx/pdftex.def * thumbpdf * ...
Thus I think, it is quite too late to change this interface.
an option is to freeze the old numbers and introduce new ones
* Suggestion for interface that respects compatibility and adds an interface for three numbers:
A.B.C A \in [1..\infty] B \in [0..99] C \in [0..25]
The whole version number is printed as: printf("%d.%d.%d", A, B, C)
\pdftexmainversion: readonly integer for A \pdftexsubversion: readonly integer for B \pdftexbugfixversion: readonly integer for C
\pdftexversion := \pdftexmainversion * 100 + \pdftexsubversion \pdftexrevision := to_lowerletter(\pdftexbugfixversion) to_lowerletter defines the following mapping: 0 -> a 1 -> b ... 25 -> z
The following conditions, expressed in TeX, hold:
\the\pdftexversion = \the\numexpr \pdftexmainversion * 100 + \pdftexsubversion\relax
\the\pdftexbugfixversion = \the\numexpr\expandafter`\pdftexrevision - `a\relax
* \pdftexmainversion, ... could be defined as macros, example with e-TeX, pdfTeX versions >= 1.0:
\edef\pdftexmainversion{% avoid division with rounding \number\dimexpr 0.01\dimexpr\the\pdftexversion sp\relax\relax } \edef\pdftexsubversion{% \number\numexpr \the\pdftexversion - 100*\pdftexmainversion\relax } \edef\pdftexbugfixversion{% \number\numexpr \expandafter`\pdftexrevision - `a\relax }
Thus we have already A, B, and C. What we really need is rather a specification: * data type: A, B, C are numbers (/strings), range * how does the version look like, formatting issues
and the definition of semantics: * meaning of A, B, C * when to increase A, B, or C
i dislike the formal version number to be calculated, so i'd opt for: new primitives \pdftexmainversion: readonly integer for A \pdftexsubversion: readonly integer for B \pdftexbugfixversion: readonly integer for C backward compatibility primitives, not advertised \pdftexversion := \pdftexmainversion * 100 + \pdftexsubversion \pdftexrevision := to_lowerletter(\pdftexbugfixversion)
Next open issue of EuroTeX are feature tests. Some features cannot be tested by presence of pdfTeX primitives, eg. \ifeof18
actually, \ifeof18 is implemented now (at least it was the intention)
Thus currently only the version number can be used to test these features. Conclusion: * The documentation must contain a section that contains a mapping between a feature and the first version, where the feature is available. * Or new interface for feature checks independent of version numbers (and independent of a special TeX engine).
Thanks for the analysis -) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------