zpl.tools
Format control

^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

^CCx

Also accepted with the other prefix: ~CC.

Support

Supportedparsed: full · state: full · rendered: full

Every documented parameter renders the same output Labelary produces.

Labelary renders this command.

Parameters

xCaret characterrequired · single character

Character 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 ^CC becomes 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

Open in viewer