Files
sethLabels/docs/IDEAS.md
T

2.6 KiB

Ideas

This file is simply a collection of ideas for future capabilities of glabels. The ideas may or may not be very well thought out -- it simply a scratchpad.

Merge Fields

Currently substitution fields are specified simply by ${field-name}. Here, I am exploring ideas to extend this to be a richer substitution language. Some of the criteria to consider are:

  • A rich formatting capability probably cannot be done through GUI controls alone.
  • It should be simple and easy to understand, but also powerful.
  • Is there an existing language that can be used in whole or in part.

Format Control

It is desirable to control the format of the fields -- e.g. decimal, hex, number of digits, leading zeros, fixed width, left or right justification, etc. Perhaps something like ${NAME:%-10s}, i.e. ${field-name:printf-style-format}.

Default Values

It would also be desirable to specify a default value. (Or an initial value in the event of a counter, see Label Counter below.) Perhaps, something like ${field-name:=value}

Possible Syntax

This is the first stab at a syntax specification. It is roughly based on the parameter substitution of the Bourne shell.

<field>     ::= "${" <field_name> [ ":" _modifiers_ ] "}"
<modifiers> ::= <modifier> [ ":" <modifiers> ]
<modifier>  ::= { "%" <format_spec> | "=" <value> }

Need a way to quote ":" in value. Perhaps "\:" or maybe string values should always be in quotes (you would still need to quote out quotes.

Special Builtin Fields

Label Counter

It would be nice if there was a label counter field. Maybe something like ${#} or ${label#}. Also desirable would be the ability to set the start value. Possibly even reading it from a file and updating the file each time. You would want to control if the value is repeated for copies or every copy would be unique -- perhaps two different fields. It would also be desirable to control the format of the counter -- e.g. decimal, hex, number of digits, or leading zeros.

Date and Time Fields

Date and time fields would need to be able to be formatted much like strftime.

Examples

Just some examples of the type of thing I am thinking.

${1}       /// CSV column 1
${addr1}   /// Field named "addr1"
${n:%09d}  /// Field named "n", format as 9 decimal digits with leading zeros
${MI:=NMI} /// Field named "MI", with default value of "NMI"
${#:%06d:=1000} /// Label counter, format as 6 decimal digits with leading zeros, starting at 1000
${#:%06d:<count.txt:>count.txt}  /// Perhaps a way to read and write the starting and ending value