@@ -31,11 +31,11 @@
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define COMMENT_PRINT_ORIG_BREAK ((u32)0x00000010) /* Break before original. */
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define COMMENT_PRINT_DEFAULT (COMMENT_PRINT_LEGACY) /* Defaults. */
33 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define COMMENT_PRINT_UNSET (-1) /* Not initialized. */
34 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
35 35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /********* Code copied from SQLite src/shell.c.in on 2024-09-28 **********/
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /********* Code copied from SQLite src/shell.c.in on 2024-09-30 **********/
37 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Lookup table to estimate the number of columns consumed by a Unicode
38 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** character.
39 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
40 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const struct {
41 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char w; /* Width of the character in columns */
@@ -136,36 +136,10 @@
136 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
137 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
138 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aUWidth[iLast].iFirst > c ) return aUWidth[iFirst].w;
139 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return aUWidth[iLast].w;
140 140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Compute the value and length of a multi-byte UTF-8 character that
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** begins at z[0]. Return the length. Write the Unicode value into *pU.
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine only works for *multi-byte* UTF-8 characters.
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int decodeUtf8(const unsigned char *z, int *pU){
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (z[0] & 0xe0)==0xc0 && (z[1] & 0xc0)==0x80 ){
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pU = ((z[0] & 0x1f)<<6) | (z[1] & 0x3f);
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 2;
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (z[0] & 0xf0)==0xe0 && (z[1] & 0xc0)==0x80 && (z[2] & 0xc0)==0x80 ){
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pU = ((z[0] & 0x0f)<<12) | ((z[1] & 0x3f)<<6) | (z[2] & 0x3f);
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 3;
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (z[0] & 0xf8)==0xf0 && (z[1] & 0xc0)==0x80 && (z[2] & 0xc0)==0x80
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (z[3] & 0xc0)==0x80
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pU = ((z[0] & 0x0f)<<18) | ((z[1] & 0x3f)<<12) | ((z[2] & 0x3f))<<6
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | (z[4] & 0x3f);
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 4;
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pU = 0;
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
167 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******* End of code copied from SQLite *************************************/
168 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
169 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
170 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the previous value used by most external callers when they
171 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** needed to specify a default maximum line length to be used with the
@@ -241,62 +215,96 @@
241 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** algorithm, the NUL character is treated the same as a spacing character.
242 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
243 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int comment_next_space(
244 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zLine, /* [in] The comment line being printed. */
245 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int index, /* [in] The current character index being handled. */
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *distUTF8 /* [out] Distance to next space in UTF-8 sequences. */
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int maxChars, /* [in] Optimization hint to abort before space found. */
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *sumWidth /* [out] Summated width of all characters to next space. */
247 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nextIndex = index + 1;
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fNonASCII=0;
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cchUTF8, utf32, wcwidth = 0;
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nextIndex = index;
250 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(;;){
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char c = zLine[nextIndex];
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (c&0x80)==0x80 ) fNonASCII=1;
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c==0 || fossil_isspace(c) ){
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( distUTF8 ){
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fNonASCII!=0 ){
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *distUTF8 = strlen_utf8(&zLine[index], nextIndex-index);
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *distUTF8 = nextIndex-index;
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char_info_utf8(&zLine[nextIndex],&cchUTF8,&utf32);
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nextIndex += cchUTF8;
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wcwidth += cli_wcwidth(utf32);
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zLine[nextIndex]==0 || fossil_isspace(zLine[nextIndex]) ||
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wcwidth>maxChars ){
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *sumWidth = wcwidth;
261 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nextIndex;
262 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nextIndex++;
264 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
265 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0; /* NOT REACHED */
266 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
267 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
268 238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Count the number of UTF-8 sequences in a string. Incomplete, ill-formed and
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** overlong sequences are counted as one sequence. The invalid lead bytes 0xC0
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to 0xC1 and 0xF5 to 0xF7 are allowed to initiate (ill-formed) 2- and 4-byte
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sequences, respectively, the other invalid lead bytes 0xF8 to 0xFF are
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** treated as invalid 1-byte sequences (as lone trail bytes).
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Combining characters and East Asian Wide and Fullwidth characters are counted
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as one, so this function does not calculate the effective "display width".
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return information about the next (single- or multi-byte) character in the
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** specified UTF-8 string: The number of UTF-8 code units (in this case: bytes)
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the decoded UTF-32 code point. Incomplete, ill-formed and overlong
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sequences are consumed together as one invalid code point. The invalid lead
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bytes 0xC0 to 0xC1 and 0xF5 to 0xF7 are allowed to initiate (ill-formed) 2-
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and 4-byte sequences, respectively, the other invalid lead bytes 0xF8 to 0xFF
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are treated as invalid 1-byte sequences (as lone trail bytes), all resulting
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in one invalid code point. Invalid UTF-8 sequences encoding a non-scalar code
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point (UTF-16 surrogates U+D800 to U+DFFF) are allowed.
276 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int strlen_utf8(const char *zString, int lengthBytes){
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i; /* Counted bytes. */
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int lengthUTF8; /* Counted UTF-8 sequences. */
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( lengthBytes>=0 );
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void char_info_utf8(
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z,
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pCchUTF8,
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pUtf32
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i = 0; /* Counted bytes. */
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cchUTF8 = 1; /* Code units consumed. */
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int maxUTF8 = 1; /* Expected sequence length. */
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char c = z[i++];
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (c&0x80)==0x00 ){ /* 7-bit ASCII character. */
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pCchUTF8 = 1;
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32 = (int)z[0];
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( (c&0xe0)==0xc0 ) maxUTF8 = 2; /* UTF-8 lead byte 110vvvvv */
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( (c&0xf0)==0xe0 ) maxUTF8 = 3; /* UTF-8 lead byte 1110vvvv */
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( (c&0xf8)==0xf0 ) maxUTF8 = 4; /* UTF-8 lead byte 11110vvv */
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( cchUTF8<maxUTF8 &&
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (z[i]&0xc0)==0x80 ){ /* UTF-8 trail byte 10vvvvvv */
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cchUTF8++;
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pCchUTF8 = cchUTF8;
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cchUTF8!=maxUTF8 || /* Incomplete UTF-8 sequence. */
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( cchUTF8==1 && (c&0x80)==0x80 )){ /* Lone UTF-8 trail byte. */
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32 = 0xfffd; /* U+FFFD Replacement Character */
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef FOSSIL_DEBUG
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( *pUtf32!=0xfffd ); /* Invalid UTF-8 sequence. */
282 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0, lengthUTF8=0; i<lengthBytes; i++, lengthUTF8++){
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char c = zString[i];
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int cchUTF8=1; /* Code units consumed. */
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int maxUTF8=1; /* Expected sequence length. */
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (c&0xe0)==0xc0 )maxUTF8=2; /* UTF-8 lead byte 110vvvvv */
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (c&0xf0)==0xe0 )maxUTF8=3; /* UTF-8 lead byte 1110vvvv */
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (c&0xf8)==0xf0 )maxUTF8=4; /* UTF-8 lead byte 11110vvv */
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( cchUTF8<maxUTF8 &&
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i<lengthBytes-1 &&
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (zString[i+1]&0xc0)==0x80 ){ /* UTF-8 trail byte 10vvvvvv */
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cchUTF8++;
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i++;
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return lengthUTF8;
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( cchUTF8 ){
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 4:
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32 =
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[0] & 0x0f)<<18 ) |
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[1] & 0x3f)<<12 ) |
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[2] & 0x3f)<< 6 ) |
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[4] & 0x3f)<< 0 ) ;
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 3:
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32 =
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[0] & 0x0f)<<12 ) |
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[1] & 0x3f)<< 6 ) |
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[2] & 0x3f)<< 0 ) ;
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 2:
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32 =
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[0] & 0x1f)<< 6 ) |
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( (z[1] & 0x3f)<< 0 ) ;
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef FOSSIL_DEBUG
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32>=0 && *pUtf32<=0x10ffff && /* Valid range U+0000 to U+10FFFF. */
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pUtf32<0xd800 && *pUtf32>0xdfff /* Non-scalar (UTF-16 surrogates). */
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
298 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
299 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
300 308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
301 309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called when printing a logical comment line to calculate
302 310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the necessary indenting. The caller needs to emit the indenting spaces.
@@ -339,11 +347,10 @@
339 347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pLineCnt, /* [in/out] Pointer to the total line count. */
340 348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **pzLine /* [out] Pointer to the end of the logical line. */
341 349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
342 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int index = 0, charCnt = 0, lineCnt = 0, maxChars, i;
343 351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zBuf[400]; int iBuf=0; /* Output buffer and counter. */
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int cchUTF8, maxUTF8; /* Helper variables to count UTF-8 sequences. */
345 352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !zLine ) return;
346 353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( lineChars<=0 ) return;
347 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0
348 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( indent<sizeof(zBuf)-5 ); /* See following comments to explain */
349 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( origIndent<sizeof(zBuf)-5 ); /* these limits. */
@@ -362,10 +369,11 @@
362 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Limit line indent to fit output buffer. */
363 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
origIndent = sizeof(zBuf)-6;
364 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
365 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
maxChars = lineChars;
366 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(;;){
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cchUTF8, utf32;
367 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int useChars = 1;
368 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char c = zLine[index];
369 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Flush the output buffer if there's no space left for at least one more
370 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (potentially 4-byte) UTF-8 sequence, one level of indentation spaces,
371 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a new line, and a terminating NULL. */
@@ -393,48 +401,47 @@
393 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c=='\n' ){
394 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lineCnt++;
395 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
charCnt = 0;
396 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
useChars = 0;
397 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c=='\t' ){
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int distUTF8;
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nextIndex = comment_next_space(zLine, index, &distUTF8);
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nextIndex<=0 || distUTF8>maxChars ){
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sumWidth;
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nextIndex = comment_next_space(zLine, index, maxChars, &sumWidth);
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nextIndex<=0 || sumWidth>maxChars ){
401 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
402 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
403 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
charCnt++;
404 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
useChars = COMMENT_TAB_WIDTH;
405 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( maxChars<useChars ){
406 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBuf[iBuf++] = ' ';
407 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
408 416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
409 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( wordBreak && fossil_isspace(c) ){
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int distUTF8;
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nextIndex = comment_next_space(zLine, index, &distUTF8);
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nextIndex<=0 || distUTF8>=maxChars ){
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sumWidth;
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nextIndex = comment_next_space(zLine, index, maxChars, &sumWidth);
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nextIndex<=0 || sumWidth>=maxChars ){
413 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
414 422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
415 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
charCnt++;
416 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
417 425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
charCnt++;
418 426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
419 427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( c!='\n' || charCnt==0 );
420 428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBuf[iBuf++] = c;
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Skip over UTF-8 sequences, see comment on strlen_utf8() for details. */
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cchUTF8=1; /* Code units consumed. */
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- maxUTF8=1; /* Expected sequence length. */
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (c&0xe0)==0xc0 )maxUTF8=2; /* UTF-8 lead byte 110vvvvv */
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (c&0xf0)==0xe0 )maxUTF8=3; /* UTF-8 lead byte 1110vvvv */
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (c&0xf8)==0xf0 )maxUTF8=4; /* UTF-8 lead byte 11110vvv */
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( cchUTF8<maxUTF8 &&
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (zLine[index]&0xc0)==0x80 ){ /* UTF-8 trail byte 10vvvvvv */
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cchUTF8++;
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zBuf[iBuf++] = zLine[index++];
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char_info_utf8(&zLine[index-1],&cchUTF8,&utf32);
432 430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cchUTF8>1 ){
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int utf32;
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- decodeUtf8((const unsigned char*)&zLine[index-cchUTF8],&utf32);
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- useChars += cli_wcwidth(utf32) - 1;
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int wcwidth;
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wcwidth = cli_wcwidth(utf32);
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( wcwidth>maxChars && lineChars>=wcwidth ){ /* rollback */
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ index--;
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iBuf--;
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBuf[iBuf] = 0;
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( ; cchUTF8>1; cchUTF8-- ){
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBuf[iBuf++] = zLine[index++];
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ useChars += wcwidth - 1;
436 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
437 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
maxChars -= useChars;
438 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( maxChars<=0 ) break;
439 446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c=='\n' ) break;
440 447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -476,11 +483,10 @@
476 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int si, sk, i, k, kc;
477 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int doIndent = 0;
478 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zBuf;
479 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zBuffer[400];
480 487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lineCnt = 0;
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int cchUTF8, maxUTF8; /* Helper variables to count UTF-8 sequences. */
482 488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
483 489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( width<0 ){
484 490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
comment_set_maxchars(indent, &maxChars);
485 491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
486 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zText==0 ) zText = "(NULL)";
@@ -502,30 +508,25 @@
502 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
503 509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zBuf!=zBuffer) fossil_free(zBuf);
504 510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return lineCnt;
505 511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
506 512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(sk=si=i=k=kc=0; zText[i] && kc<maxChars; i++){
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cchUTF8, utf32;
507 514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char c = zText[i];
508 515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kc++; /* Count complete UTF-8 sequences. */
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Skip over UTF-8 sequences, see comment on strlen_utf8() for details. */
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cchUTF8=1; /* Code units consumed. */
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- maxUTF8=1; /* Expected sequence length. */
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (c&0xe0)==0xc0 )maxUTF8=2; /* UTF-8 lead byte 110vvvvv */
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (c&0xf0)==0xe0 )maxUTF8=3; /* UTF-8 lead byte 1110vvvv */
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( (c&0xf8)==0xf0 )maxUTF8=4; /* UTF-8 lead byte 11110vvv */
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( maxUTF8>1 ){
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zBuf[k++] = c;
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( cchUTF8<maxUTF8 &&
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (zText[i+1]&0xc0)==0x80 ){ /* UTF-8 trail byte 10vvvvvv */
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cchUTF8++;
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char_info_utf8(&zText[i],&cchUTF8,&utf32);
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cchUTF8>1 ){
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int wcwidth;
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wcwidth = cli_wcwidth(utf32);
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( kc+wcwidth-1>maxChars && maxChars>=wcwidth ){ /* rollback */
521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ kc--;
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( i--; cchUTF8>0; cchUTF8-- ){
520 525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBuf[k++] = zText[++i];
521 526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cchUTF8>1 ){
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int utf32;
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- decodeUtf8((const unsigned char*)&zText[k-cchUTF8],&utf32);
526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- kc += cli_wcwidth(utf32) - 1;
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ kc += wcwidth - 1;
527 528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
528 529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( fossil_isspace(c) ){
529 530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
si = i;
530 531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sk = k;
531 532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( k==0 || zBuf[k-1]!=' ' ){
@@ -742,10 +743,11 @@
742 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zIndent ){
743 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
indent = atoi(zIndent);
744 745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
745 746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
indent = -1; /* automatic */
746 747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ verify_all_options();
747 749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=4 && g.argc!=5 ){
748 750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("?OPTIONS? PREFIX TEXT ?ORIGTEXT?");
749 751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
750 752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPrefix = g.argv[2];
751 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zText = g.argv[3];
752 754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!