Bit | Meaning if set |
---|---|
0 | 0 (reserved) |
1 | 0 (reserved) |
2 | 0 (reserved) |
3 | 0 (reserved) |
4 | 0 (reserved) |
5 | R5 is pointer to block |
6 | R6 is pointer to Font Transformation Matrix |
7 | R7 is length of string |
8 | R0 is initial font handle |
9 | Perform kerning |
10 | Writing direction is right-to-left |
11 | 0 (reserved) |
12 | R1 points to 16-bit string (bit 13 must be clear)1 |
13 | R1 points to 32-bit string (bit 12 must be clear)1 |
14 | 0 (reserved) |
15 | 0 (reserved) |
16 | 0 (reserved) |
17 | Return nearest caret position (if x offset is less than half way through a character, the character is not included) |
18 | Return bounding box in R5 (bit 5 must also be set) |
19 | Return updated matrix in R6 (bit 6 must also be set) |
20 | Return number of split characters in R7 (bit 7 must also be set) |
21-31 | 0 (reserved) |
1 Font Manager 3.41 onwards
The flags in R2 determine how this call is used. Registers R0, R5, R6 and R7 are only used if bits 5, 6, 7 and 8 are set in flags in R2.
If bit 8 is clear, then the current font will be assumed. This call does not alter the current font, so if you are scanning several sequential lines and these contain font shifts, you should call Font_FutureFont to find which font handle to pass in R0 the next time.
If bit 18 is set, the returned bounding box will only be valid if Font_ScanString was able to process some characters. E.g. calling with R7=0 will return an invalid bounding box (left and bottom coordinates greater than the right and top coordinates).
If bit 20 is set, there is no split character, then R7 will be used to return the number of non-control characters (codes 32 or greater and not within a control sequence).