^CC / ~CC - Change Caret
Changes the character that introduces a format command.
^CC replaces the caret with another character, so that every format command from that
point on reads /FO50,50 rather than ^FO50,50. Data is the reason, not taste: a caret
inside field data has no escape, so another character must become the prefix. ^CC and
~CC are the same command. Use the tilde form between formats, where the parser does
not read a ^ command.
Syntax
^CCxAlso accepted with the other prefix: ~CC.
Support
Every documented parameter renders the same output Labelary produces.
Labelary renders this command.
Parameters
xCaret characterrequired · single characterCharacter that replaces ^ as the format command prefix. Takes effect immediately, for the very next command, and persists past ^XZ into the next label.
- Invalid value
- not possible — any value is accepted. The parser takes any single byte literally: a digit, a space or a newline all become the new caret. The command rejects nothing, so the failure mode is a format nothing can read. With no argument the guide makes the next character received the new caret, and the renderer does the same. At end of input the caret stays.
- Test coverage
Behavior
The change takes effect for the very next command, including the ^XZ that closes the
current format. After ^CC/ the format must end /XZ, and ^XZ is no longer a
command.
It also persists past ^XZ into the next format, in this renderer and on Labelary
alike (measured 2026-07-30). The prefix is parser state, not label state. A format that
changes the caret and does not change it back leaves every following label in the
request expecting the new character. On a printer that lasts until a power-off or a
^JU save. Change it back before the end of the format.
Pick a character that cannot appear in the data and that carries no other load. The
parser accepts any ASCII character, including a digit, a space or a comma, so a caret of
, makes every argument list unparseable. The tilde is a poor choice, and so is the
current delimiter.
The argument is required. The guide's rule for a missing argument is that the next
character the parser receives becomes the new caret, and that is what happens here.
^CC and then a newline sets the caret to that newline, after which the parser
recognizes nothing in the format and the label comes back empty.
Tested behavior
Differences from the specification
Labelary against the ZPL II guide
Where Labelary — our compatibility target — behaves differently from the printed specification.
- Labelary documents the argument as optional with the default
^. The guide says it is required, and that a missing argument makes the next character received the new caret. — not pinned by a test
zpl.tools against Labelary
Where our output differs from Labelary for the same input. These are the differences that break a migration.
- With no argument the renderer takes the next byte literally, so a newline after
^CCbecomes the caret and nothing later in the format parses. Labelary ignores the whitespace and takes the following^instead, which loses one command but renders the rest. We measured this on 2026-07-30. — not pinned by a test
Example
The caret becomes a forward slash for the rest of the format, closing ^XZ included.
^XA
^CC/
/FO50,50/A0N,40,40/FDCaret is now a slash/FS
/XZ
Related commands
^CT / ~CTChange TildeChanges the character that introduces a control command.^CD / ~CDChange DelimiterChanges the character that separates command arguments.^FXCommentMarks text as a comment, which never prints.