Support %% in protocol just like in printf/scanf. (Suggested by Klemen Vodopivec)
This commit is contained in:
@ -37,6 +37,14 @@ A format converter consists of
|
|||||||
<li>Additional information required by some converters</li>
|
<li>Additional information required by some converters</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<p class="new">
|
||||||
|
An exception is the sequence <code>%%</code> which stands for a single
|
||||||
|
literal <code>%</code>.
|
||||||
|
This has been added for compatibility with the C functions
|
||||||
|
<em>printf()</em> and <em>scanf()</em>.
|
||||||
|
It behaves the same as the escaped percent <code>\%</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The flags <code>*# +0-</code> work like in the C functions
|
The flags <code>*# +0-</code> work like in the C functions
|
||||||
<em>printf()</em> and <em>scanf()</em>.
|
<em>printf()</em> and <em>scanf()</em>.
|
||||||
@ -83,8 +91,6 @@ formatted (like for output) and then compared to the input.
|
|||||||
The <code>!</code> flag demands that input is exactly <em>width</em>
|
The <code>!</code> flag demands that input is exactly <em>width</em>
|
||||||
bytes long (normally <em>width</em> defines the maximum number of
|
bytes long (normally <em>width</em> defines the maximum number of
|
||||||
bytes read in many formats).
|
bytes read in many formats).
|
||||||
For example <code>in "%!5d";</code> expects exactly 5 digits.
|
|
||||||
Fewer digits are considered loss of data and make the format fail.
|
|
||||||
This feature has been added by Klemen Vodopivec, SNS.
|
This feature has been added by Klemen Vodopivec, SNS.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -118,6 +124,14 @@ This feature has been added by Klemen Vodopivec, SNS.
|
|||||||
<td><code>in "%=.3f";</code></td>
|
<td><code>in "%=.3f";</code></td>
|
||||||
<td>Assure that the input is equal to the current value formatted as a float with precision 3</td>
|
<td>Assure that the input is equal to the current value formatted as a float with precision 3</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>in "%!5d";</code></td>
|
||||||
|
<td>Expect exactly 5 decimal digits. Fewer digits are considered loss of data and make the format fail.
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>in "%d%%";</code></td>
|
||||||
|
<td>Read a decimal number followed by a % sign</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<a name="types"></a>
|
<a name="types"></a>
|
||||||
|
@ -1124,6 +1124,13 @@ compileString(StreamBuffer& buffer, const char*& source,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (c == '%') {
|
if (c == '%') {
|
||||||
|
if (buffer[formatpos+1] == '%') {
|
||||||
|
// treat %% as literal % like printf/scanf do
|
||||||
|
// replace with escaped %
|
||||||
|
buffer[formatpos] = esc;
|
||||||
|
formatpos+=2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
debug("StreamProtocolParser::Protocol::compileString "
|
debug("StreamProtocolParser::Protocol::compileString "
|
||||||
"format=\"%s\"\n", buffer.expand(formatpos)());
|
"format=\"%s\"\n", buffer.expand(formatpos)());
|
||||||
nformats++;
|
nformats++;
|
||||||
|
Reference in New Issue
Block a user