Changeset bb1eabc
- Timestamp:
- May 4, 2026, 7:26:38 AM (5 days ago)
- Branches:
- master
- Children:
- 244335b
- Parents:
- 8403b32
- Files:
-
- 11 edited
-
doc/user/user.tex (modified) (4 diffs)
-
libcfa/src/collections/string.cfa (modified) (2 diffs)
-
libcfa/src/collections/string.hfa (modified) (3 diffs)
-
libcfa/src/iostream.cfa (modified) (3 diffs)
-
libcfa/src/iostream.hfa (modified) (7 diffs)
-
tests/collections/.expect/string-ostream.txt (modified) (1 diff)
-
tests/collections/string-ostream.cfa (modified) (2 diffs)
-
tests/io/.expect/manipulatorsOutput1.arm64.txt (modified) (1 diff)
-
tests/io/.expect/manipulatorsOutput1.x64.txt (modified) (1 diff)
-
tests/io/.expect/manipulatorsOutput1.x86.txt (modified) (1 diff)
-
tests/io/manipulatorsOutput1.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/user/user.tex
r8403b32 rbb1eabc 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Sun May 3 10:13:13202614 %% Update Count : 74 2513 %% Last Modified On : Mon May 4 07:19:24 2026 14 %% Update Count : 7436 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 5469 5469 5470 5470 \item 5471 \Indexc{quote}( character / string ) )\index{manipulator!quote@©quote©} bracket text with appropriate quote characters.5471 \Indexc{quote}( character / string, ©const char qleft©, ©const char qright©) )\index{manipulator!quote@©quote©} bracket text with appropriate quote characters. 5472 5472 No quotes is the default. 5473 5473 \begin{cfa}[belowskip=0pt] 5474 sout | quote( 'A' ) | quote( "abd" ) | quote( (string){ "@#!" } ); 5475 'A'"abd" "@#!" 5474 sout | quote( 'A' ) | quote( 'W', '"' ) | quote( "abd" ) | quote( "abd", '<', '>' ) 5475 | quote( (string){ "@#!" } ) | quote( (string){ "@#!" }, '[', ']' ); 5476 'A'"W""abd" §\LstStringStyle{<abd>}§ "@#!" §\LstStringStyle{[@\#!]}§ 5476 5477 \end{cfa} 5477 5478 … … 5743 5744 5744 5745 \item 5745 \Indexc{quote}( ©char & ch©, ©const char Ldelimiter = '\''©, ©const char Rdelimiter= '\0'© )\index{manipulator!quote@©quote©}5746 \Indexc{quote}( ©char & ch©, ©const char qleft = '\''©, ©const char qright = '\0'© )\index{manipulator!quote@©quote©} 5746 5747 consumes the string ©"LCR"©, where ©L© is the left ©delimiter© character, ©C© is the value in ©ch©, and ©R© is the right delimiter character, which skips whitespace, consumes and ignores the left delimiter, reads a single character into ©ch©, and consumes and ignores the right delimiter (3 characters). 5747 5748 If the delimit character is omitted, it defaults to ©'\''© (single quote). … … 5756 5757 \item 5757 5758 \begin{sloppypar} 5758 \Indexc{quote}( $wdi\ manipulator$, ©const char Ldelimiter = '\''©, ©const char Rdelimiter= '\0'© )\index{manipulator!quote@©quote©}5759 \Indexc{quote}( $wdi\ manipulator$, ©const char qleft = '\''©, ©const char qright = '\0'© )\index{manipulator!quote@©quote©} 5759 5760 consumes the scanset ©"L[^R]R"©, where ©L© is the left ©delimiter© character and ©R© is the right delimiter character, which skips whitespace, consumes and ignores the left delimiter, reads characters until the right-delimiter into the string variable (null terminated), and consumes and ignores the right delimiter. 5760 5761 If the delimit character is omitted, it defaults to ©'"'© (double quote). -
libcfa/src/collections/string.cfa
r8403b32 rbb1eabc 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 15 10:26:35 202513 // Update Count : 39 412 // Last Modified On : Sun May 3 23:21:25 2026 13 // Update Count : 395 14 14 // 15 15 … … 214 214 for ( i; l ) cstr[i] = f.val[i]; // copy string 215 215 cstr[l] = '\0'; // terminate 216 _Ostream_Manip(const char *) cf @= { cstr, f.wd, f.pc, f.base, {f.all} };216 _Ostream_Manip(const char *) cf @= { cstr, f.wd, f.pc, f.base, {f.all}, f.qleft, f.qright }; 217 217 return os | cf | nonl; 218 218 } // ?|? -
libcfa/src/collections/string.hfa
r8403b32 rbb1eabc 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : S at May 2 19:09:55202613 // Update Count : 32 212 // Last Modified On : Sun May 3 23:24:08 2026 13 // Update Count : 324 14 14 // 15 15 … … 90 90 _Ostream_Manip(string) oct( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; } 91 91 _Ostream_Manip(string) hex( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; } 92 _Ostream_Manip(string) quote( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true } }; } 92 _Ostream_Manip(string) quote( string s, const char qleft = '"', const char qright = '\0' ) { 93 return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true }, .qleft = qleft, .qright = qright }; } 93 94 _Ostream_Manip(string) wd( unsigned int wd, string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = wd, .pc = 0, .base = 's', { .all = 0 } }; } 94 95 _Ostream_Manip(string) wd( unsigned int wd, unsigned int pc, string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; } … … 98 99 _Ostream_Manip(string) & nobase( _Ostream_Manip(string) & fmt ) { fmt.flags.nobsdp = true; return fmt; } 99 100 _Ostream_Manip(string) & upcase( _Ostream_Manip(string) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; } 100 _Ostream_Manip(string) & quote( _Ostream_Manip(string) & fmt ) { fmt.flags.quote = true; return fmt; } \ 101 _Ostream_Manip(string) & quote( _Ostream_Manip(string) & fmt, const char qleft = '"', const char qright = '\0' ) { 102 fmt.flags.quote = true; fmt.qleft = qleft, fmt.qright = qright; return fmt; } 101 103 } // distribution 102 104 -
libcfa/src/iostream.cfa
r8403b32 rbb1eabc 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 3 08:08:29202613 // Update Count : 22 4112 // Last Modified On : Sun May 3 22:02:37 2026 13 // Update Count : 2271 14 14 // 15 15 … … 698 698 } // if 699 699 if ( f.flags.quote ) { // print as string 700 char qv[] = "' '"; 701 qv[1] = f.val; 700 char qv[] = { f.qleft, f.val, f.qright ? : f.qleft, '\0' }; 702 701 f.flags.quote = false; // already quoted 703 702 _Ostream_Manip(const char *) fmtuc @= { qv, f.wd, f.pc, 's', {f.all} }; … … 743 742 int len = strlen( f.val ); 744 743 char qv[len + 3]; // space for quotes and '\0' 745 qv[0] = '"'; // copy string surrounded with quotes 746 strcpy( &qv[1], f.val ); 747 qv[len + 1] = '"'; 748 qv[len + 2] = '\0'; 744 qv[0] = f.qleft; strcpy( &qv[1], f.val ); 745 qv[len + 1] = f.qright ? : f.qleft; qv[len + 2] = '\0'; // copy string surrounded with quotes 749 746 f.flags.quote = false; // already quoted 750 747 _Ostream_Manip(const char *) fmtuc @= { qv, f.wd, f.pc, 's', {f.all} }; -
libcfa/src/iostream.hfa
r8403b32 rbb1eabc 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : S at May 2 18:48:56 202613 // Update Count : 78012 // Last Modified On : Sun May 3 21:55:06 2026 13 // Update Count : 829 14 14 // 15 15 … … 209 209 char base; // numeric base / floating-point style 210 210 inline _Ostream_Manip_Mode; 211 char qleft, qright; // quote delimiters (PLACE HERE SO OPTIONAL IN INITIALIZATION) 211 212 }; // _Ostream_Manip 212 213 … … 289 290 _Ostream_Manip(char) oct( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; } 290 291 _Ostream_Manip(char) hex( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; } 291 _Ostream_Manip(char) quote( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'c', { .flags.quote = true } }; } 292 _Ostream_Manip(char) quote( char c, const char qleft = '\'', const char qright = '\0' ) { 293 return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'c', { .flags.quote = true }, .qleft = qleft, .qright = qright }; } 292 294 _Ostream_Manip(char) wd( unsigned int wd, char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = wd, .pc = 0, .base = 'c', { .all = 0 } }; } 293 295 _Ostream_Manip(char) & wd( unsigned int wd, _Ostream_Manip(char) & fmt ) { fmt.wd = wd; return fmt; } … … 295 297 _Ostream_Manip(char) & upcase( _Ostream_Manip(char) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; } 296 298 _Ostream_Manip(char) & nobase( _Ostream_Manip(char) & fmt ) { fmt.flags.nobsdp = true; return fmt; } 297 _Ostream_Manip(char) & quote( _Ostream_Manip(char) & fmt ) { fmt.flags.quote = true; return fmt; } 299 _Ostream_Manip(char) & quote( _Ostream_Manip(char) & fmt, const char qleft = '\'', const char qright = '\0' ) { 300 fmt.flags.quote = true; fmt.qleft = qleft, fmt.qright = qright; return fmt; } 298 301 } // distribution 299 302 forall( ostype & | basic_ostream( ostype ) ) { … … 308 311 _Ostream_Manip(const char *) oct( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; } 309 312 _Ostream_Manip(const char *) hex( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; } 310 _Ostream_Manip(const char *) quote( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true } }; } 313 _Ostream_Manip(const char *) quote( const char s[], const char qleft = '"', const char qright = '\0' ) { 314 return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true }, .qleft = qleft, .qright = qright }; } 311 315 _Ostream_Manip(const char *) wd( unsigned int wd, const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = wd, .pc = 0, .base = 's', { .all = 0 } }; } 312 316 _Ostream_Manip(const char *) wd( unsigned int wd, unsigned int pc, const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; } … … 316 320 _Ostream_Manip(const char *) & upcase( _Ostream_Manip(const char *) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; } 317 321 _Ostream_Manip(const char *) & nobase( _Ostream_Manip(const char *) & fmt ) { fmt.flags.nobsdp = true; return fmt; } 318 _Ostream_Manip(const char *) & quote( _Ostream_Manip(const char *) & fmt ) { fmt.flags.quote = true; return fmt; } \ 322 _Ostream_Manip(const char *) & quote( _Ostream_Manip(const char *) & fmt, const char qleft = '"', const char qright = '\0' ) { 323 fmt.flags.quote = true; fmt.qleft = qleft; fmt.qright = qright; return fmt; } 319 324 } // distribution 320 325 forall( ostype & | basic_ostream( ostype ) ) { … … 430 435 union { 431 436 const char * scanset; 432 char delimiters[3]; // [0] => left, [1] => right437 char delimiters[3]; // [0] => qleft or terminator, [1] => qright or getline '\0', [2] => char '\0' or char * '\1' 433 438 }; 434 439 int wd; // width -
tests/collections/.expect/string-ostream.txt
r8403b32 rbb1eabc 1 1 string 2 abcd "abcd" abcd "abcd" abcd abcd "abcd"3 abcd "abcd" abcd "abcd" abcd abcd "abcd"2 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 3 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 4 4 141 142 143 144 0141 0142 0143 0144 141 142 143 144 0141 0142 0143 0144 5 5 141 142 143 144 0141 0142 0143 0144 141 142 143 144 0141 0142 0143 0144 -
tests/collections/string-ostream.cfa
r8403b32 rbb1eabc 8 8 // Created On : Sat May 2 18:02:34 2026 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : S at May 2 19:06:22202611 // Update Count : 710 // Last Modified On : Sun May 3 23:31:07 2026 11 // Update Count : 8 12 12 // 13 13 … … 18 18 sout | "string"; 19 19 const char * cs = "abcd"; 20 sout | cs | quote( cs ) | wd(8,cs) | quote(wd(8,cs)) | wd(6,8,cs) | left(wd(8,cs)) | quote(left(wd(8,cs))); 20 sout | cs | quote(cs) | wd(8,cs) | quote(wd(8,cs)) | quote(wd(8,cs), '\'')| quote(wd(8,cs), '<', '>') 21 | wd(6,8,cs) | left(wd(8,cs)) | quote(left(wd(8,cs))); 21 22 string s = "abcd"; 22 sout | s | quote( s ) | wd(8,s) | quote(wd(8,s)) | wd(6,8,s) | left(wd(8,s)) | quote(left(wd(8,s))); 23 sout | s | quote(s) | wd(8,s) | quote(wd(8,s)) | quote(wd(8,s), '\'')| quote(wd(8,s), '<', '>') 24 | wd(6,8,s) | left(wd(8,s)) | quote(left(wd(8,s))); 23 25 24 26 sout | nobase(oct(cs)) | upcase(oct(cs)) | nobase(wd(8,oct(cs))) | left(wd(-8,oct(cs))); -
tests/io/.expect/manipulatorsOutput1.arm64.txt
r8403b32 rbb1eabc 38 38 39 39 char 40 a'a' ' ' a 'a'aa41 a'a' ' ' a 'a'aa40 a'a' ' '"a"<a> a 'a' "a" {a} aa 41 a'a' ' '"a"<a> a 'a' "a" {a} aa 42 42 141 0141 141 0141 61 0x61 61 0x61 43 43 141 0141 141 0141 61 0X61 61 0x61 1100001 0B1100001 1100001 0b1100001 44 44 45 45 char * 46 abcd "abcd" abcd "abcd" abcd abcd "abcd"47 abcd "abcd" abcd "abcd" abcd abcd "abcd"46 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 47 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 48 48 141 142 143 144 0141 0142 0143 0144 141 142 143 144 0141 0142 0143 0144 49 49 61 62 63 64 0X61 0X62 0X63 0X64 61 62 63 64 0x61 0x62 0x63 0x64 -
tests/io/.expect/manipulatorsOutput1.x64.txt
r8403b32 rbb1eabc 38 38 39 39 char 40 a'a' ' ' a 'a'aa41 a'a' ' ' a 'a'aa40 a'a' ' '"a"<a> a 'a' "a" {a} aa 41 a'a' ' '"a"<a> a 'a' "a" {a} aa 42 42 141 0141 141 0141 61 0x61 61 0x61 43 43 141 0141 141 0141 61 0X61 61 0x61 1100001 0B1100001 1100001 0b1100001 44 44 45 45 char * 46 abcd "abcd" abcd "abcd" abcd abcd "abcd"47 abcd "abcd" abcd "abcd" abcd abcd "abcd"46 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 47 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 48 48 141 142 143 144 0141 0142 0143 0144 141 142 143 144 0141 0142 0143 0144 49 49 61 62 63 64 0X61 0X62 0X63 0X64 61 62 63 64 0x61 0x62 0x63 0x64 -
tests/io/.expect/manipulatorsOutput1.x86.txt
r8403b32 rbb1eabc 38 38 39 39 char 40 a'a' ' ' a 'a'aa41 a'a' ' ' a 'a'aa40 a'a' ' '"a"<a> a 'a' "a" {a} aa 41 a'a' ' '"a"<a> a 'a' "a" {a} aa 42 42 141 0141 141 0141 61 0x61 61 0x61 43 43 141 0141 141 0141 61 0X61 61 0x61 1100001 0B1100001 1100001 0b1100001 44 44 45 45 char * 46 abcd "abcd" abcd "abcd" abcd abcd "abcd"47 abcd "abcd" abcd "abcd" abcd abcd "abcd"46 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 47 abcd "abcd" abcd "abcd" 'abcd' <abcd> abcd abcd "abcd" 48 48 141 142 143 144 0141 0142 0143 0144 141 142 143 144 0141 0142 0143 0144 49 49 61 62 63 64 0X61 0X62 0X63 0X64 61 62 63 64 0x61 0x62 0x63 0x64 -
tests/io/manipulatorsOutput1.cfa
r8403b32 rbb1eabc 7 7 // Created On : Sat Jun 8 18:04:11 2019 8 8 // Last Modified By : Peter A. Buhr 9 // Last Modified On : S at May 2 18:50:48202610 // Update Count : 659 // Last Modified On : Sun May 3 23:31:09 2026 10 // Update Count : 76 11 11 // 12 12 … … 100 100 101 101 sout | nl | "char"; 102 char c = 'a', * qc = "'a'"; 103 printf( "%c%s%c'%c'%8c%8s%5c%-5c\n", c, qc, ' ', ' ', c, qc, c, c ); 104 sout | c | quote(c) | ' ' | quote(' ') | wd(8,c) | quote( wd(8,c) ) | wd(5,c) | left(wd(5,c)); 102 char c = 'a'; 103 printf( "%c'%c'%c'%c'\"%c\"<%c>%8c%8s%8s%8s%5c%-5c\n", c, c, ' ', ' ', c, c, c, "'a'", "\"a\"", "{a}", c, c ); 104 sout | c | quote(c) | ' ' | quote(' ') | quote( c, '"' ) | quote( c, '<', '>' ) 105 | wd(8,c) | quote( wd(8,c) ) | quote( wd(8,c), '"' ) | quote( wd(8,c), '{', '}' ) | wd(5,c) | left(wd(5,c)); 105 106 printf( "%hho %#hho %8hho %#-8hho %hhx %#hhx %8hhx %#-8hhx\n", c, c, c, c, c, c, c, c ); 106 107 sout | nobase(oct(c)) | upcase(oct(c)) | nobase(wd(8,oct(c))) | left(wd(-8,oct(c))) | nonl; … … 109 110 110 111 sout | nl | "char *"; 111 const char * s = "abcd", * qs = "\"abcd\""; 112 printf( "%s %s %8s %8s %6.8s %-8s %-8s\n", s, qs, s, qs, s, s, qs ); 113 sout | s | quote( s ) | wd(8,s) | quote(wd(8,s)) | wd(6,8,s) | left(wd(8,s)) | quote(left(wd(8,s))); 114 sout | nobase(oct(s)) | upcase(oct(s)) | nobase(wd(8,oct(s))) | left(wd(-8,oct(s))); 115 sout | nobase(hex(s)) | upcase(hex(s)) | nobase(wd(8,hex(s))) | left(wd(-8,hex(s))); 116 sout | nobase(bin(s)) | upcase(bin(s)) | nobase(wd(12,bin(s))) | left(wd(-12,bin(s))); 112 const char * cs = "abcd"; 113 printf( "%s %s %8s %8s %8s %8s %6.8s %-8s %-8s\n", cs, "\"abcd\"", cs, "\"abcd\"", "'abcd'", "<abcd>", cs, cs, "\"abcd\"" ); 114 sout | cs | quote(cs) | wd(8,cs) | quote(wd(8,cs)) | quote(wd(8,cs), '\'')| quote(wd(8,cs), '<', '>') 115 | wd(6,8,cs) | left(wd(8,cs)) | quote(left(wd(8,cs))); 116 sout | nobase(oct(cs)) | upcase(oct(cs)) | nobase(wd(8,oct(cs))) | left(wd(-8,oct(cs))); 117 sout | nobase(hex(cs)) | upcase(hex(cs)) | nobase(wd(8,hex(cs))) | left(wd(-8,hex(cs))); 118 sout | nobase(bin(cs)) | upcase(bin(cs)) | nobase(wd(12,bin(cs))) | left(wd(-12,bin(cs))); 117 119 } 118 120
Note:
See TracChangeset
for help on using the changeset viewer.