Skip to content

Commit 0cc216c

Browse files
PaulWesselleouiedaseisman
authored
Explore adding long-format GMT options (#230)
* WIP Explore adding long-format GMT options This branch is work in progress on adding long-format option parsing to GMT. E.g., --region=w/e/s/n instead of -Rw/e/s/n, --registration=pixel instead of -r, and so on. At the moment only the common options and their most basic forms have been implemented, as well as local options for blockmean. I will write more later about how this all works and what is required to be added to each module - blockmean.c static variable local_kw shows how. * More common option long-format words Update long-syntax for -U and -s. * Update mgd77track.c Merge from master missed the new NULL argument.. * Add separator variable to GMT_KW_DICT Needed to split parsing of options that are given as a series of arguments separated by slashes (e.g., xinc/yinc) or commas (e.g., input columns). * Let -T option be a modifer under -C The -T and -C are dealing with the same issue: The text bounding box atrributes. I have combined these with -T now being a modifer +t<shape> under -C. Tests pass, documentation has been updated. * Remove the ifdef USE_GMT_KWD No point having this since this is a separate branch for testing anyway. * Implement parsing of sections Added code to handle multi-section arguments such as --increments=30+e/50+n * Documentation Improve the documentation of the new gmtinit_kw_replace function that converts long-format GMT options to standard short-format options. * Fix a few issues missing args to gmt_init_module. * Seppl out structure name KEYWORD_DICTIONARY * rename a few keywords Sucn as read-columns and write-columns. * Add grdinterpolate to the mix and fix some errors * Let keyword dictionary be ifdef under USE_LONG_OPTIONS This means it can be merged into master with no side-effects since developers must define USE_LONG_OPTIONS for any keywords to be defined. * Minor text improvements * Fix the use of USE_LONG_OPTIONS * Update ConfigUserTemplate.cmake Forgot it has to be a define, not cmake variable. * Add --frame * Rename kw arrays to make it clearer that one is module-specific * Update src/blockmean.c Co-Authored-By: Dongdong Tian <[email protected]> * Fix issues in block_subs.c * Update src/gmt_init.c Co-Authored-By: Dongdong Tian <[email protected]> * Update src/gmt_init.c Co-Authored-By: Dongdong Tian <[email protected]> * Adding axes as keyword Better docs for code, longer variables, fixing some bugs. * Escape +? strings that should not be seen as modifiers * Move --increment to block_subs.c, update commons, use --axis --frame=axes sets which axes to draw, and --axis specifies the settings of an axis. * Enable CI testing for long options (#2305) * Add a long-format option test to test/modern * Improve coments only Co-authored-by: Leonardo Uieda <[email protected]> Co-authored-by: Dongdong Tian <[email protected]>
1 parent 7ddd092 commit 0cc216c

File tree

160 files changed

+475
-243
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+475
-243
lines changed

ci/config-gmt-unix.sh

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ set (DO_API_TESTS ON)
3030
set (N_TEST_JOBS 2)
3131
set (SUPPORT_EXEC_IN_BINARY_DIR TRUE)
3232
set (CMAKE_C_FLAGS "-coverage -O0 ${CMAKE_C_FLAGS}")
33+
34+
# Turn on testing of upcoming long-option syntax for common GMT options
35+
add_definitions(-DUSE_COMMON_LONG_OPTIONS)
36+
# Turn on testing of upcoming long-option syntax for module options
37+
add_definitions(-DUSE_MODULE_LONG_OPTIONS)
3338
EOF
3439
fi
3540

ci/config-gmt-windows.sh

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ set (DO_EXAMPLES TRUE)
2424
set (DO_TESTS TRUE)
2525
set (DO_API_TESTS ON)
2626
set (SUPPORT_EXEC_IN_BINARY_DIR TRUE)
27+
28+
# Turn on testing of upcoming long-option syntax for common GMT options
29+
add_definitions(-DUSE_COMMON_LONG_OPTIONS)
30+
# Turn on testing of upcoming long-option syntax for module options
31+
add_definitions(-DUSE_MODULE_LONG_OPTIONS)
2732
EOF
2833
fi
2934

cmake/ConfigUserTemplate.cmake

+2
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@
258258
# Uncomment these two statements if you are a developer debugging GMT:
259259
#add_definitions(-DDEBUG)
260260
#add_definitions(-DMEMDEBUG) # Turn on memory tracking see gmt_support.c for extra info
261+
#add_definitions(-DUSE_COMMON_LONG_OPTIONS) # Turn on testing of upcoming long-option syntax for common GMT options
262+
#add_definitions(-DUSE_MODULE_LONG_OPTIONS) # Turn on testing of upcoming long-option syntax for module options
261263
#set (CMAKE_C_FLAGS "-Wall -Wdeclaration-after-statement") # recommended even for release build
262264
#set (CMAKE_C_FLAGS "-Wextra ${CMAKE_C_FLAGS}") # extra warnings
263265
#set (CMAKE_C_FLAGS_DEBUG -ggdb3) # gdb debugging symbols

src/begin.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ int GMT_begin (void *V_API, int mode, void *args) {
141141

142142
/* Parse the command-line arguments */
143143

144-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) return (API->error); /* Save current state */
144+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) return (API->error); /* Save current state */
145145
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
146146
if ((error = parse (GMT, options)) != 0) Return (error);
147147

src/block_subs.h

+27
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,33 @@ struct BLOCK_CTRL {
8787
} W;
8888
};
8989

90+
GMT_LOCAL struct GMT_KEYWORD_DICTIONARY module_kw[] = { /* Local options for all the block* modules */
91+
/* separator, short-option, long-option, short-directives, long-directives, short-modifiers, long-modifiers */
92+
{ 0, 'A', "fields", "", "", "", "" },
93+
{ 0, 'C', "center", "", "", "", "" },
94+
#if defined(BLOCKMODE) /* Only blockmode has a -D option */
95+
{ 0, 'D', "bin-width", "", "", "a,c,h,l", "average,center,high,low" },
96+
#endif
97+
#if defined(BLOCKMEAN)
98+
{ 0, 'E', "extend", "", "", "P,p", "prop-simple,prop-weighted" },
99+
#elif defined(BLOCKMODE)
100+
{ 0, 'E', "extend", "r,s", "record,source", "l,h", "lower,higher" },
101+
#else
102+
{ 0, 'E', "extend", "b,r,s", "box-whisker,record,source", "l,h", "lower,higher" },
103+
#endif
104+
{ 0, 'G', "gridfile", "", "", "", "" },
105+
{ '/', 'I', "increment", "", "", "e,n", "exact,number" },
106+
#if !defined(BLOCKMEAN) /* Only blockmedian & blockmode have a -Q option */
107+
{ 0, 'Q', "quicker", "", "", "", "" },
108+
#endif
109+
{ 0, 'S', "select", "m,n,s,w", "mean,count,sum,weight", "", "" },
110+
#if defined(BLOCKMEDIAN) /* Only blockmedian has a -T option */
111+
{ 0, 'T', "quantile", "", "", "", "" },
112+
#endif
113+
{ 0, 'W', "weights", "i,o", "in,out", "s", "sigma" },
114+
{ 0, '\0', "", "", "", "", ""} /* End of list marked with empty option and strings */
115+
};
116+
90117
#if 0
91118
enum GMT_grdval_blks { /* mode for selected item for gridding */
92119
BLK_ITEM_MEAN = 0,

src/blockmean.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
#include "block_subs.h"
4242

4343
enum Block_Modes {
44-
BLK_MODE_NOTSET = 0, /* No -E+p|P (or -Ep) set */
45-
BLK_MODE_OBSOLETE = 1, /* Old -Ep for backwards compatibility; assumes input weights are already set to 1/s^ */
44+
BLK_MODE_NOTSET = 0, /* No -E+p|P (or -Ep) set */
45+
BLK_MODE_OBSOLETE = 1, /* Old -Ep for backwards compatibility; assumes input weights are already set to 1/s^2 */
4646
BLK_MODE_WEIGHTED = 2, /* -E+p computes weighted z means and error propagation on weighted z mean, using input s and w = 1/s^2 */
4747
BLK_MODE_SIMPLE = 3 /* -E+P computes simple z means and error propagation on simple z mean, using input s and w = 1/s^2 */
4848
};
@@ -307,7 +307,7 @@ int GMT_blockmean (void *V_API, int mode, void *args) {
307307

308308
/* Parse the command-line arguments */
309309

310-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
310+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, module_kw, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
311311
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
312312
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
313313
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/blockmedian.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ int GMT_blockmedian (void *V_API, int mode, void *args) {
395395

396396
/* Parse the command-line arguments */
397397

398-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
398+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, module_kw, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
399399
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
400400
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
401401
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/blockmode.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ int GMT_blockmode (void *V_API, int mode, void *args) {
519519

520520
/* Parse the command-line arguments */
521521

522-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
522+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, module_kw, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
523523
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
524524
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
525525
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/clear.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ int GMT_clear (void *V_API, int mode, void *args) {
150150

151151
/* Parse the command-line arguments */
152152

153-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
153+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
154154
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
155155
if ((error = parse (GMT, options)) != 0) Return (error);
156156

src/dimfilter.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ int GMT_dimfilter (void *V_API, int mode, void *args) {
584584

585585
/* Parse the command-line arguments */
586586

587-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
587+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
588588
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
589589
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
590590
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/docs.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ int GMT_docs (void *V_API, int mode, void *args) {
104104

105105
/* Parse the command-line arguments */
106106

107-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
107+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
108108

109109
/*---------------------------- This is the docs main code ----------------------------*/
110110

src/end.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ int GMT_end (void *V_API, int mode, void *args) {
108108

109109
/* Parse the command-line arguments */
110110

111-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
111+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
112112
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
113113
if ((error = parse (GMT, options, &show)) != 0) Return (error);
114114

src/figure.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ int GMT_figure (void *V_API, int mode, void *args) {
149149

150150
/* Parse the command-line arguments */
151151

152-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
152+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
153153
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
154154
if ((error = parse (GMT, options)) != 0) Return (error);
155155

src/filter1d.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,7 @@ int GMT_filter1d (void *V_API, int mode, void *args) {
870870

871871
/* Parse the command-line arguments */
872872

873-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
873+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
874874
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error, "Error parsing filter1d options\n");
875875
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
876876
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error, "Error parsing filter1d options\n");

src/fitcircle.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ int GMT_fitcircle (void *V_API, int mode, void *args) {
381381

382382
/* Parse the command-line arguments */
383383

384-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
384+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
385385
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
386386
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
387387
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/geodesy/earthtide.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1448,7 +1448,7 @@ int GMT_earthtide (void *V_API, int mode, void *args) {
14481448

14491449
/* Parse the command-line arguments */
14501450

1451-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
1451+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
14521452
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
14531453
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
14541454
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/geodesy/gpsgridder.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ int GMT_gpsgridder (void *V_API, int mode, void *args) {
554554

555555
/* Parse the command-line arguments */
556556

557-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
557+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
558558
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
559559
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
560560
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/geodesy/psvelo.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ int GMT_psvelo (void *V_API, int mode, void *args) {
353353

354354
/* Parse the command-line arguments; return if errors are encountered */
355355

356-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
356+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
357357
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
358358
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
359359
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/gmt2kml.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ int GMT_gmt2kml (void *V_API, int mode, void *args) {
859859

860860
/* Parse the command-line arguments */
861861

862-
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
862+
if ((GMT = gmt_init_module (API, THIS_MODULE_LIB, THIS_MODULE_CLASSIC_NAME, THIS_MODULE_KEYS, THIS_MODULE_NEEDS, NULL, &options, &GMT_cpy)) == NULL) bailout (API->error); /* Save current state */
863863
if (GMT_Parse_Common (API, THIS_MODULE_OPTIONS, options)) Return (API->error);
864864
Ctrl = New_Ctrl (GMT); /* Allocate and initialize a new control structure */
865865
if ((error = parse (GMT, Ctrl, options)) != 0) Return (error);

src/gmt_constants.h

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
#define GMT_CONV6_LIMIT 1.0e-6 /* 1 ppm */
7676
#define GMT_CONV4_LIMIT 1.0e-4 /* Less tight convergence limit or "close to zero" limit */
7777

78+
#define GMT_ASCII_ES 27 /* ASCII code for escape (used to prevent +? strings in plain text from being seen as modifiers) */
7879
#define GMT_ASCII_GS 29 /* ASCII code for group separator (temporarily replacing tabs) */
7980
#define GMT_ASCII_RS 30 /* ASCII code for record separator (temporarily replacing spaces in filenames) */
8081
#define GMT_ASCII_US 31 /* ASCII code for unit separator (temporarily replacing spaces in quoted text) */

0 commit comments

Comments
 (0)