Groups | Search | Server Info | Login | Register
Groups > comp.lang.postscript > #3996
| From | Bozo User <anthk@disroot.org> |
|---|---|
| Newsgroups | comp.lang.postscript |
| Subject | Re: Ideas of a new version of PostScript (called "Computer PostScript") |
| Date | 2024-03-24 20:45 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <slrnv012va.epq.anthk@localhost.localdomain> (permalink) |
| References | <1705687027.bystand@zzo38computer.org> |
On 2024-03-07, news@zzo38computer.org.invalid <news@zzo38computer.org.invalid> wrote: > I had ideas how to improve PostScript programming language, making a new > version, which can be called "Computer PostScript" since it is meant for > computers rather than printers. It is based on level 3 PostScript, and some > of the extensions provided by Ghostscript, and some of my own new stuff. > > * Add append operator of NeWS, which concatenates two strings or arrays. > Also add arrayop operator of NeWS, which is receiving a procedure and two > arrays (or strings) of equal length and produces a single array from > combining the corresponding elements of each one with the same index by > the specified procedure. (This could also be worked with dictionaries too, > I suppose; if the dictionaries have the same keys.) > > * Add straccum and strfinish operators. (I have implemented these in > PostScript itself, but may be more efficient as native operators.) The > straccum operator will make a writable file object, which remembers > anything written to it; strfinish takes the file object from straccum on > the stack, and closes it and then the output is a new string object that > contains all data that was written to the file before it was closed. > > * Remove the /PageCount system parameter, which is only relevant for > printers and not for computers. However, the /PageCount page device > parameter of Ghostscript is included. > > * The job server is also not needed so it can be removed, too. > > * Possibility of having alpha transparency, in the current colour and in > raster images. There might also be operators for adding layers to a layer > stack, and then you can combine modes when popping the layer stack. (Some > page devices might not support alpha transparency in the output, and some > vector devices might not allow alpha transparency at all.) > > * The ARGUMENTS array of Ghostscript is included. In "program mode" (which > is the default mode), this is always used for command-line arguments. (If > the system's character encoding is a superset of ASCII then they should be > passed unchanged to the PostScript program. This is required to be the same > character encoding used for file names, but is allowed to be any ASCII > based encoding as long as it satisfies this requirement.) > > * Some operators that require an existing allocation can now automatically > allocate a string or array if you pass null. For example: copy, readline, > cvs, and some others. Some, such as readstring, might accept a number in > place of a string to automatic allocation. > > * Add a built-in procedure called #! which skips the rest of the current > line of the input file. (Store this is systemdict.) > > * An option (perhaps a user parameter) to display error messages on stderr > while not redirecting any other output (e.g. print = == etc) to stderr. > (Perhaps it should be the default setting, or even the only setting.) > > * Type 4 function dictionaries, like PDF. > > * Possibility to set a font list and character encoding separately. (If > you use the existing way to set the font, it is set to a font list > containing a single font, and the encoding of that font.) > > * Allow glyphshow to use numbers even for fonts that are not CID fonts > (names can still be used, too). > > * Add a page device parameter that can be retrieved and used when setting > it to preserve the existing device state for that specific page device, > including not erasing the page. This parameter is mutually exclusive with > some of the other parameters, though. > > * Similarly than the above, you can save the graphics state with a page > device, enter a new one, and then when you go back, you can continue with > the existing page. (See below for why this is relevant.) > > * Add a command to select a internal raster page device which stores the > picture in a buffer which can then be read back after you pop that internal > device off of the stack. This is similar than "makeimagedevice" command in > Ghostscript, but I dislike some of the details of Ghostscript's working. > > * Add a Environment resource category which allows reading and writing > environment variables. > > * Add the %pipe% device of Ghostscript, but without input buffering. (The > input buffering makes many things difficult. Ghostscript does not have this > problem when reading from stdin, but %pipe% still has that problem.) > > * The %pipe% device may also be opened in (r+) mode for two-way > communication with an external program, like in FreeBSD. > > * Possibly some way to define animations. > > * Make a C API for defining your own operators and for extending the > PostScript interpreter with dynamically linked C codes. This C API would > also be usable for defining page devices as well. For vector devices, you > can also access the glyph names and CIDs of text (or you can choose to > ignore text and just have the PostScript engine to convert them to the > shapes), and pdfmark can also be implemented by any page devices. > > * A variant of Type 1 fonts but unencrypted. > > * Make the "known" operator to work with strings and arrays as well as > with dictionaries. Also add "knownget" operator. > > * Make the fileposition operator to work with non-positionable files > too in which case it tells the number of bytes read or written; with > seekable files it works like it already normally does. > > * Add "kforall", "vforall", and "kvforall", usable with any types that > "forall" is usable with; they will give you only the keys, only values, > or both keys and values, respectively. (For dictionaries, forall is the > same as kvforall; for strings and arrays, forall is same as vforall.) > > * Add a "unread" operator, similar than the "ungetc" function of C. > > * I don't like the exception for storing local objects in systemdict, > so I would propose an alternative: You can store references to local > objects inside of global objects if those local objects were created > before the first time "save" is executed. > > * The copypage operator works like level 2 PostScript, although it might > not be available for all devices on all implementations. (If it is not > available, then it is an error when used in that way.) > > * Colour management: Ghostscript uses colour management unless you set > the UseFastColor mode. I think it should not do that, and should just use > direct colours normally. However, you can add a /ColorManagement page > device parameter; if 0 then there is no colour management, if 1 then there > is colour management if using managed colour spaces (such as ManagedRGB, > ManagedCMYK, etc instead of DeviceRGB, etc) and you can set the rendering > intent separately at different times, if 2 then the colour management is > done only during post processing, if 3 then it is like 1 but uses the > colour management in all colour spaces including Device colour spaces, and > 4 means that colour management is applied afterward during postprocessing. > (Some settings might be unavailable for some output devices. For most > output file formats, colour management should be disabled by default > (unlike Ghostscript), although it may be enabled by command-line argument > or within the PostScript program itself.) (The CIE-based colour spaces > remain available and are managed in the way that they are specified by > level 3 PostScript. Also, even if colour management is set to 0, such > things as transfer functions will still work (although they would normally > only be set for printer drivers and such things and not for most output > file formats); the /ColorManagement parameter only controls use of managed > colour profiles, similar than /UseFastColor in Ghostscript.) > > * Add a DeviceRaw colour space, allowing to access raw colour data of the > specific output device (usually an integer or a string) (in some cases, > e.g. PDF, this might not be available). > > * An extension of the PostScript binary object sequence format to support > 64-bit integers, 64-bit floating point, and dictionaries. > > * New filters: ExternalDecode and ExternalEncode, which use an external > program. ExternalEncode will write anything written to the filter file to > the external program's stdin, and whatever the external program writes to > its stdout will be written to whatever the filter is writing to; the > ExternalDecode is other way around. > > * New filters named ByteTranslateEncode and ByteTranslateDecode, which > work like those in Ghostscript. > > * Allow the dictionary for ASCII85Encode and ASCIIHexEncode to specify > where line breaking should occur (including none at all) and to be able > to suppress the final > or ~> when the filter is closed. > > * Allow several encoding filters to specify values other than the default > that are permitted in decoding filters, such as UnitLength and LowBitFirst > for LZWEncode. > > * Add a parameter for FlateDecode and FlateEncode to control whether or not > it should use a raw DEFLATE stream. > > * New filters: Base64Decode and Base64Encode. You may specify the alphabet > to use, where line breaking should occur, and whether or not to add padding > with equal signs. > > * Allow defining new filters by adding resources. > > * Some output file formats other than PDF might be able to use pdfmark too. > > * The "run" operator should accept files as well as file names, like > Ghostscript does; but, unlike Ghostscript, it should only interpret the > file as PostScript code. (Another operator could be made to load in a > separate execution context, and possibly to allow to specify other > document formats too.) > > * Allow the alternative colour space of a Separation or DeviceN colour > space to be another special colour space (although only a single nesting > level is allowed in this way); therefore you can tell it to ignore an > unavailable separation entirely (by specifying [/Separation /None] as the > alternative colour space), or to simulate it with patterns. > > * Add a "cvri" operator to read numbers according to a specified base, > without needing to prepend something like "16#". > > * Add the arctangent function. Also, make trigonometry functions with > radians as well as with degrees. > > * Built-in operators for dealing with strings and files as arrays of > fixed-length integers (similar than typed arrays in JavaScript). (This > is useful for dealing with other file formats.) > > * DSC is not used. > > * Only the Courier font is mandatory; the others are optional. This font > will need to have the same metrics as the official Courier font, even if > it is actually a different font (as is the case in Ghostscript). > > * Permissions to control parameters are no longer controlled by passwords. > Any input argument that needs a password is now ignored (and its type is > also ignored), and password entries in dictionaries are also ignored. > (There may be other restrictions on controlling them, e.g. the security > features of the host system, but those are not controlled by PostScript.) > > * The currentdevparams and setdevparams operators can be used on files > that are already open as well as on devices named by strings. (For example, > it might be used to control terminal settings, locking, etc.) > > * An implementation may allow additional editing controls with %lineedit% > and %statementedit%. > > * Add an operator to wait for multiple objects. This can be used in case > of connecting to multiple sockets or pipes at once, and with extensions > may be usable for other purposes too. > > * A "cvop" operator to convert other objects (such as procedures) into > an operator that, when executed, will execute the other object. > > * Idiom recognition is always disabled by default. > > * A variant quit operator that allows specifying the exit code. > > * Make a better way to access ligature/kerning data of fonts from within > PostScript programs. > > * You can use a UUID as a XUID by the first entry being 36#UUID and the > other four are each 32-bits of the UUID number. > > * Add a font type which is metrics only and contains an identification of > the font for the output device. This is used for fonts that are built in > to the output device or that are not known at compile time. You cannot > use them with the image device, nor with PostScript operators such as > charpath. Only some devices will support this use. (For example, with a > X window output device, it can be used to represent X core fonts. It may > also be used with some printers that have built-in fonts.) > > * Pen shapes, like in METAFONT. > > * Allow circular and elliptical arcs to be stored directly in paths. This > is useful for some output formats, such as SVG. > > Please tell me what are your opinions, and if you have other ideas too. > (I have many other ideas too, than only what I mentioned above. Maybe I > will write more, later, too.) > Unicode today should be almost mandatory.
Back to comp.lang.postscript | Previous | Next — Previous in thread | Next in thread | Find similar
Ideas of a new version of PostScript (called "Computer PostScript") news@zzo38computer.org.invalid - 2024-03-06 20:59 -0800
Re: Ideas of a new version of PostScript (called "Computer PostScript") Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-03-07 05:29 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") news@zzo38computer.org.invalid - 2024-03-07 15:05 -0800
Re: Ideas of a new version of PostScript (called "Computer PostScript") Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-03-07 23:38 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") news@zzo38computer.org.invalid - 2024-03-08 12:00 -0800
Re: Ideas of a new version of PostScript (called "Computer PostScript") Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-03-08 20:53 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") David Newall <ghostscript@davidnewall.com> - 2024-03-26 16:20 +1100
Re: Ideas of a new version of PostScript (called "Computer PostScript") news@zzo38computer.org.invalid - 2024-03-25 23:10 -0700
Re: Ideas of a new version of PostScript (called "Computer PostScript") Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-03-26 06:20 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") rlhamil@smart.net (Richard L. Hamilton) - 2024-05-25 16:07 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-05-25 22:31 +0000
Re: Ideas of a new version of PostScript Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-03-21 07:31 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") Bozo User <anthk@disroot.org> - 2024-03-24 20:45 +0000
Re: Ideas of a new version of PostScript (called "Computer PostScript") David Newall <ghostscript@davidnewall.com> - 2024-03-26 16:19 +1100
csiph-web