summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormongo <andmarti@gmail.com>2023-06-01 09:28:44 -0300
committermongo <andmarti@gmail.com>2023-06-01 09:28:44 -0300
commit0662dcadf247c7ebd8922ad413d29c195fcc3150 (patch)
tree5b54bc34fcf1264d37174f83e0288d28682ab58f
parentde24a4c257fb7fd69bed8d204fe6eef50302ce38 (diff)
work on issue 816
-rw-r--r--examples/csv/countries.csv257
-rw-r--r--src/file.c167
2 files changed, 326 insertions, 98 deletions
diff --git a/examples/csv/countries.csv b/examples/csv/countries.csv
new file mode 100644
index 0000000..4a210a1
--- /dev/null
+++ b/examples/csv/countries.csv
@@ -0,0 +1,257 @@
+"Country","Alpha-2 code","Alpha-3 code","Numeric code","Latitude (average)","Longitude (average)"
+"Afghanistan", "AF", "AFG", "4", "33", "65"
+"Albania", "AL", "ALB", "8", "41", "20"
+"Algeria", "DZ", "DZA", "12", "28", "3"
+"American Samoa", "AS", "ASM", "16", "-14.3333", "-170"
+"Andorra", "AD", "AND", "20", "42.5", "1.6"
+"Angola", "AO", "AGO", "24", "-12.5", "18.5"
+"Anguilla", "AI", "AIA", "660", "18.25", "-63.1667"
+"Antarctica", "AQ", "ATA", "10", "-90", "0"
+"Antigua and Barbuda", "AG", "ATG", "28", "17.05", "-61.8"
+"Argentina", "AR", "ARG", "32", "-34", "-64"
+"Armenia", "AM", "ARM", "51", "40", "45"
+"Aruba", "AW", "ABW", "533", "12.5", "-69.9667"
+"Australia", "AU", "AUS", "36", "-27", "133"
+"Austria", "AT", "AUT", "40", "47.3333", "13.3333"
+"Azerbaijan", "AZ", "AZE", "31", "40.5", "47.5"
+"Bahamas", "BS", "BHS", "44", "24.25", "-76"
+"Bahrain", "BH", "BHR", "48", "26", "50.55"
+"Bangladesh", "BD", "BGD", "50", "24", "90"
+"Barbados", "BB", "BRB", "52", "13.1667", "-59.5333"
+"Belarus", "BY", "BLR", "112", "53", "28"
+"Belgium", "BE", "BEL", "56", "50.8333", "4"
+"Belize", "BZ", "BLZ", "84", "17.25", "-88.75"
+"Benin", "BJ", "BEN", "204", "9.5", "2.25"
+"Bermuda", "BM", "BMU", "60", "32.3333", "-64.75"
+"Bhutan", "BT", "BTN", "64", "27.5", "90.5"
+"Bolivia, Plurinational State of", "BO", "BOL", "68", "-17", "-65"
+"Bolivia", "BO", "BOL", "68", "-17", "-65"
+"Bosnia and Herzegovina", "BA", "BIH", "70", "44", "18"
+"Botswana", "BW", "BWA", "72", "-22", "24"
+"Bouvet Island", "BV", "BVT", "74", "-54.4333", "3.4"
+"Brazil", "BR", "BRA", "76", "-10", "-55"
+"British Indian Ocean Territory", "IO", "IOT", "86", "-6", "71.5"
+"Brunei Darussalam", "BN", "BRN", "96", "4.5", "114.6667"
+"Brunei", "BN", "BRN", "96", "4.5", "114.6667"
+"Bulgaria", "BG", "BGR", "100", "43", "25"
+"Burkina Faso", "BF", "BFA", "854", "13", "-2"
+"Burundi", "BI", "BDI", "108", "-3.5", "30"
+"Cambodia", "KH", "KHM", "116", "13", "105"
+"Cameroon", "CM", "CMR", "120", "6", "12"
+"Canada", "CA", "CAN", "124", "60", "-95"
+"Cape Verde", "CV", "CPV", "132", "16", "-24"
+"Cayman Islands", "KY", "CYM", "136", "19.5", "-80.5"
+"Central African Republic", "CF", "CAF", "140", "7", "21"
+"Chad", "TD", "TCD", "148", "15", "19"
+"Chile", "CL", "CHL", "152", "-30", "-71"
+"China", "CN", "CHN", "156", "35", "105"
+"Christmas Island", "CX", "CXR", "162", "-10.5", "105.6667"
+"Cocos (Keeling) Islands", "CC", "CCK", "166", "-12.5", "96.8333"
+"Colombia", "CO", "COL", "170", "4", "-72"
+"Comoros", "KM", "COM", "174", "-12.1667", "44.25"
+"Congo", "CG", "COG", "178", "-1", "15"
+"Congo, the Democratic Republic of the", "CD", "COD", "180", "0", "25"
+"Cook Islands", "CK", "COK", "184", "-21.2333", "-159.7667"
+"Costa Rica", "CR", "CRI", "188", "10", "-84"
+"Côte d'Ivoire", "CI", "CIV", "384", "8", "-5"
+"Ivory Coast", "CI", "CIV", "384", "8", "-5"
+"Croatia", "HR", "HRV", "191", "45.1667", "15.5"
+"Cuba", "CU", "CUB", "192", "21.5", "-80"
+"Cyprus", "CY", "CYP", "196", "35", "33"
+"Czech Republic", "CZ", "CZE", "203", "49.75", "15.5"
+"Denmark", "DK", "DNK", "208", "56", "10"
+"Djibouti", "DJ", "DJI", "262", "11.5", "43"
+"Dominica", "DM", "DMA", "212", "15.4167", "-61.3333"
+"Dominican Republic", "DO", "DOM", "214", "19", "-70.6667"
+"Ecuador", "EC", "ECU", "218", "-2", "-77.5"
+"Egypt", "EG", "EGY", "818", "27", "30"
+"El Salvador", "SV", "SLV", "222", "13.8333", "-88.9167"
+"Equatorial Guinea", "GQ", "GNQ", "226", "2", "10"
+"Eritrea", "ER", "ERI", "232", "15", "39"
+"Estonia", "EE", "EST", "233", "59", "26"
+"Ethiopia", "ET", "ETH", "231", "8", "38"
+"Falkland Islands (Malvinas)", "FK", "FLK", "238", "-51.75", "-59"
+"Faroe Islands", "FO", "FRO", "234", "62", "-7"
+"Fiji", "FJ", "FJI", "242", "-18", "175"
+"Finland", "FI", "FIN", "246", "64", "26"
+"France", "FR", "FRA", "250", "46", "2"
+"French Guiana", "GF", "GUF", "254", "4", "-53"
+"French Polynesia", "PF", "PYF", "258", "-15", "-140"
+"French Southern Territories", "TF", "ATF", "260", "-43", "67"
+"Gabon", "GA", "GAB", "266", "-1", "11.75"
+"Gambia", "GM", "GMB", "270", "13.4667", "-16.5667"
+"Georgia", "GE", "GEO", "268", "42", "43.5"
+"Germany", "DE", "DEU", "276", "51", "9"
+"Ghana", "GH", "GHA", "288", "8", "-2"
+"Gibraltar", "GI", "GIB", "292", "36.1833", "-5.3667"
+"Greece", "GR", "GRC", "300", "39", "22"
+"Greenland", "GL", "GRL", "304", "72", "-40"
+"Grenada", "GD", "GRD", "308", "12.1167", "-61.6667"
+"Guadeloupe", "GP", "GLP", "312", "16.25", "-61.5833"
+"Guam", "GU", "GUM", "316", "13.4667", "144.7833"
+"Guatemala", "GT", "GTM", "320", "15.5", "-90.25"
+"Guernsey", "GG", "GGY", "831", "49.5", "-2.56"
+"Guinea", "GN", "GIN", "324", "11", "-10"
+"Guinea-Bissau", "GW", "GNB", "624", "12", "-15"
+"Guyana", "GY", "GUY", "328", "5", "-59"
+"Haiti", "HT", "HTI", "332", "19", "-72.4167"
+"Heard Island and McDonald Islands", "HM", "HMD", "334", "-53.1", "72.5167"
+"Holy See (Vatican City State)", "VA", "VAT", "336", "41.9", "12.45"
+"Honduras", "HN", "HND", "340", "15", "-86.5"
+"Hong Kong", "HK", "HKG", "344", "22.25", "114.1667"
+"Hungary", "HU", "HUN", "348", "47", "20"
+"Iceland", "IS", "ISL", "352", "65", "-18"
+"India", "IN", "IND", "356", "20", "77"
+"Indonesia", "ID", "IDN", "360", "-5", "120"
+"Iran, Islamic Republic of", "IR", "IRN", "364", "32", "53"
+"Iraq", "IQ", "IRQ", "368", "33", "44"
+"Ireland", "IE", "IRL", "372", "53", "-8"
+"Isle of Man", "IM", "IMN", "833", "54.23", "-4.55"
+"Israel", "IL", "ISR", "376", "31.5", "34.75"
+"Italy", "IT", "ITA", "380", "42.8333", "12.8333"
+"Jamaica", "JM", "JAM", "388", "18.25", "-77.5"
+"Japan", "JP", "JPN", "392", "36", "138"
+"Jersey", "JE", "JEY", "832", "49.21", "-2.13"
+"Jordan", "JO", "JOR", "400", "31", "36"
+"Kazakhstan", "KZ", "KAZ", "398", "48", "68"
+"Kenya", "KE", "KEN", "404", "1", "38"
+"Kiribati", "KI", "KIR", "296", "1.4167", "173"
+"Korea, Democratic People's Republic of", "KP", "PRK", "408", "40", "127"
+"Korea, Republic of", "KR", "KOR", "410", "37", "127.5"
+"South Korea", "KR", "KOR", "410", "37", "127.5"
+"Kuwait", "KW", "KWT", "414", "29.3375", "47.6581"
+"Kyrgyzstan", "KG", "KGZ", "417", "41", "75"
+"Lao People's Democratic Republic", "LA", "LAO", "418", "18", "105"
+"Latvia", "LV", "LVA", "428", "57", "25"
+"Lebanon", "LB", "LBN", "422", "33.8333", "35.8333"
+"Lesotho", "LS", "LSO", "426", "-29.5", "28.5"
+"Liberia", "LR", "LBR", "430", "6.5", "-9.5"
+"Libyan Arab Jamahiriya", "LY", "LBY", "434", "25", "17"
+"Libya", "LY", "LBY", "434", "25", "17"
+"Liechtenstein", "LI", "LIE", "438", "47.1667", "9.5333"
+"Lithuania", "LT", "LTU", "440", "56", "24"
+"Luxembourg", "LU", "LUX", "442", "49.75", "6.1667"
+"Macao", "MO", "MAC", "446", "22.1667", "113.55"
+"Macedonia, the former Yugoslav Republic of", "MK", "MKD", "807", "41.8333", "22"
+"Madagascar", "MG", "MDG", "450", "-20", "47"
+"Malawi", "MW", "MWI", "454", "-13.5", "34"
+"Malaysia", "MY", "MYS", "458", "2.5", "112.5"
+"Maldives", "MV", "MDV", "462", "3.25", "73"
+"Mali", "ML", "MLI", "466", "17", "-4"
+"Malta", "MT", "MLT", "470", "35.8333", "14.5833"
+"Marshall Islands", "MH", "MHL", "584", "9", "168"
+"Martinique", "MQ", "MTQ", "474", "14.6667", "-61"
+"Mauritania", "MR", "MRT", "478", "20", "-12"
+"Mauritius", "MU", "MUS", "480", "-20.2833", "57.55"
+"Mayotte", "YT", "MYT", "175", "-12.8333", "45.1667"
+"Mexico", "MX", "MEX", "484", "23", "-102"
+"Micronesia, Federated States of", "FM", "FSM", "583", "6.9167", "158.25"
+"Moldova, Republic of", "MD", "MDA", "498", "47", "29"
+"Monaco", "MC", "MCO", "492", "43.7333", "7.4"
+"Mongolia", "MN", "MNG", "496", "46", "105"
+"Montenegro", "ME", "MNE", "499", "42", "19"
+"Montserrat", "MS", "MSR", "500", "16.75", "-62.2"
+"Morocco", "MA", "MAR", "504", "32", "-5"
+"Mozambique", "MZ", "MOZ", "508", "-18.25", "35"
+"Myanmar", "MM", "MMR", "104", "22", "98"
+"Burma", "MM", "MMR", "104", "22", "98"
+"Namibia", "NA", "NAM", "516", "-22", "17"
+"Nauru", "NR", "NRU", "520", "-0.5333", "166.9167"
+"Nepal", "NP", "NPL", "524", "28", "84"
+"Netherlands", "NL", "NLD", "528", "52.5", "5.75"
+"Netherlands Antilles", "AN", "ANT", "530", "12.25", "-68.75"
+"New Caledonia", "NC", "NCL", "540", "-21.5", "165.5"
+"New Zealand", "NZ", "NZL", "554", "-41", "174"
+"Nicaragua", "NI", "NIC", "558", "13", "-85"
+"Niger", "NE", "NER", "562", "16", "8"
+"Nigeria", "NG", "NGA", "566", "10", "8"
+"Niue", "NU", "NIU", "570", "-19.0333", "-169.8667"
+"Norfolk Island", "NF", "NFK", "574", "-29.0333", "167.95"
+"Northern Mariana Islands", "MP", "MNP", "580", "15.2", "145.75"
+"Norway", "NO", "NOR", "578", "62", "10"
+"Oman", "OM", "OMN", "512", "21", "57"
+"Pakistan", "PK", "PAK", "586", "30", "70"
+"Palau", "PW", "PLW", "585", "7.5", "134.5"
+"Palestinian Territory, Occupied", "PS", "PSE", "275", "32", "35.25"
+"Panama", "PA", "PAN", "591", "9", "-80"
+"Papua New Guinea", "PG", "PNG", "598", "-6", "147"
+"Paraguay", "PY", "PRY", "600", "-23", "-58"
+"Peru", "PE", "PER", "604", "-10", "-76"
+"Philippines", "PH", "PHL", "608", "13", "122"
+"Pitcairn", "PN", "PCN", "612", "-24.7", "-127.4"
+"Poland", "PL", "POL", "616", "52", "20"
+"Portugal", "PT", "PRT", "620", "39.5", "-8"
+"Puerto Rico", "PR", "PRI", "630", "18.25", "-66.5"
+"Qatar", "QA", "QAT", "634", "25.5", "51.25"
+"Réunion", "RE", "REU", "638", "-21.1", "55.6"
+"Romania", "RO", "ROU", "642", "46", "25"
+"Russian Federation", "RU", "RUS", "643", "60", "100"
+"Russia", "RU", "RUS", "643", "60", "100"
+"Rwanda", "RW", "RWA", "646", "-2", "30"
+"Saint Helena, Ascension and Tristan da Cunha", "SH", "SHN", "654", "-15.9333", "-5.7"
+"Saint Kitts and Nevis", "KN", "KNA", "659", "17.3333", "-62.75"
+"Saint Lucia", "LC", "LCA", "662", "13.8833", "-61.1333"
+"Saint Pierre and Miquelon", "PM", "SPM", "666", "46.8333", "-56.3333"
+"Saint Vincent and the Grenadines", "VC", "VCT", "670", "13.25", "-61.2"
+"Saint Vincent & the Grenadines", "VC", "VCT", "670", "13.25", "-61.2"
+"St. Vincent and the Grenadines", "VC", "VCT", "670", "13.25", "-61.2"
+"Samoa", "WS", "WSM", "882", "-13.5833", "-172.3333"
+"San Marino", "SM", "SMR", "674", "43.7667", "12.4167"
+"Sao Tome and Principe", "ST", "STP", "678", "1", "7"
+"Saudi Arabia", "SA", "SAU", "682", "25", "45"
+"Senegal", "SN", "SEN", "686", "14", "-14"
+"Serbia", "RS", "SRB", "688", "44", "21"
+"Seychelles", "SC", "SYC", "690", "-4.5833", "55.6667"
+"Sierra Leone", "SL", "SLE", "694", "8.5", "-11.5"
+"Singapore", "SG", "SGP", "702", "1.3667", "103.8"
+"Slovakia", "SK", "SVK", "703", "48.6667", "19.5"
+"Slovenia", "SI", "SVN", "705", "46", "15"
+"Solomon Islands", "SB", "SLB", "90", "-8", "159"
+"Somalia", "SO", "SOM", "706", "10", "49"
+"South Africa", "ZA", "ZAF", "710", "-29", "24"
+"South Georgia and the South Sandwich Islands", "GS", "SGS", "239", "-54.5", "-37"
+"South Sudan", "SS", "SSD", "728", "8", "30"
+"Spain", "ES", "ESP", "724", "40", "-4"
+"Sri Lanka", "LK", "LKA", "144", "7", "81"
+"Sudan", "SD", "SDN", "736", "15", "30"
+"Suriname", "SR", "SUR", "740", "4", "-56"
+"Svalbard and Jan Mayen", "SJ", "SJM", "744", "78", "20"
+"Swaziland", "SZ", "SWZ", "748", "-26.5", "31.5"
+"Sweden", "SE", "SWE", "752", "62", "15"
+"Switzerland", "CH", "CHE", "756", "47", "8"
+"Syrian Arab Republic", "SY", "SYR", "760", "35", "38"
+"Taiwan, Province of China", "TW", "TWN", "158", "23.5", "121"
+"Taiwan", "TW", "TWN", "158", "23.5", "121"
+"Tajikistan", "TJ", "TJK", "762", "39", "71"
+"Tanzania, United Republic of", "TZ", "TZA", "834", "-6", "35"
+"Thailand", "TH", "THA", "764", "15", "100"
+"Timor-Leste", "TL", "TLS", "626", "-8.55", "125.5167"
+"Togo", "TG", "TGO", "768", "8", "1.1667"
+"Tokelau", "TK", "TKL", "772", "-9", "-172"
+"Tonga", "TO", "TON", "776", "-20", "-175"
+"Trinidad and Tobago", "TT", "TTO", "780", "11", "-61"
+"Tunisia", "TN", "TUN", "788", "34", "9"
+"Turkey", "TR", "TUR", "792", "39", "35"
+"Turkmenistan", "TM", "TKM", "795", "40", "60"
+"Turks and Caicos Islands", "TC", "TCA", "796", "21.75", "-71.5833"
+"Tuvalu", "TV", "TUV", "798", "-8", "178"
+"Uganda", "UG", "UGA", "800", "1", "32"
+"Ukraine", "UA", "UKR", "804", "49", "32"
+"United Arab Emirates", "AE", "ARE", "784", "24", "54"
+"United Kingdom", "GB", "GBR", "826", "54", "-2"
+"United States", "US", "USA", "840", "38", "-97"
+"United States Minor Outlying Islands", "UM", "UMI", "581", "19.2833", "166.6"
+"Uruguay", "UY", "URY", "858", "-33", "-56"
+"Uzbekistan", "UZ", "UZB", "860", "41", "64"
+"Vanuatu", "VU", "VUT", "548", "-16", "167"
+"Venezuela, Bolivarian Republic of", "VE", "VEN", "862", "8", "-66"
+"Venezuela", "VE", "VEN", "862", "8", "-66"
+"Viet Nam", "VN", "VNM", "704", "16", "106"
+"Vietnam", "VN", "VNM", "704", "16", "106"
+"Virgin Islands, British", "VG", "VGB", "92", "18.5", "-64.5"
+"Virgin Islands, U.S.", "VI", "VIR", "850", "18.3333", "-64.8333"
+"Wallis and Futuna", "WF", "WLF", "876", "-13.3", "-176.2"
+"Western Sahara", "EH", "ESH", "732", "24.5", "-13"
+"Yemen", "YE", "YEM", "887", "15", "48"
+"Zambia", "ZM", "ZMB", "894", "-15", "30"
+"Zimbabwe", "ZW", "ZWE", "716", "-20", "30" \ No newline at end of file
diff --git a/src/file.c b/src/file.c
index f08be9d..68e8d36 100644
--- a/src/file.c
+++ b/src/file.c
@@ -515,7 +515,7 @@ void write_fd(FILE * f, struct roman * doc) {
sprintf(strcolor, " fg=%.*s", BUFFERSIZE-5, &line[0]);
free(e);
} else if ((cc = get_custom_color_by_number((*pp)->ucolor->fg - 7)) != NULL) {
- sprintf(strcolor, " fg=%.*s", BUFFERSIZE-5, cc->name);
+ sprintf(strcolor, " fg=%.*s", BUFFERSIZE, cc->name);
}
}
@@ -526,10 +526,10 @@ void write_fd(FILE * f, struct roman * doc) {
decompile(e, 0);
uppercase(line);
del_char(line, 0);
- snprintf(strcolor + strlen(strcolor), strlen(line)+5, " bg=%s", &line[0]);
+ sprintf(strcolor + strlen(strcolor), " bg=%s", &line[0]);
free(e);
} else if ((cc = get_custom_color_by_number((*pp)->ucolor->bg - 7)) != NULL) {
- sprintf(strcolor + strlen(strcolor), " bg=%.*s", BUFFERSIZE-5, cc->name);
+ sprintf(strcolor + strlen(strcolor), " bg=%.*s", BUFFERSIZE, cc->name);
}
}
@@ -625,9 +625,6 @@ void write_fd(FILE * f, struct roman * doc) {
sh = sh->next;
}
- // save movetosheet in sc file
- if (doc->cur_sh != NULL) fprintf (f, "movetosheet \"%s\"\n", doc->cur_sh->name);
-
// write marks of document
write_marks(f);
@@ -1100,8 +1097,10 @@ int import_csv(char * fname, char d) {
int r = 0, c = 0, cf = 0;
wchar_t line_interp[FBUFLEN] = L"";
char * token;
- char * next;
- int eol = 0;
+
+ int quote = 0; // if value has '"'. ex: 12,"1234,450.00",56
+ char delim[2] = ""; //strtok receives a char *, not a char
+ add_char(delim, d, 0);
if ((f = fopen(fname , "r")) == NULL) {
sc_error("Can't read file \"%s\"", fname);
@@ -1123,10 +1122,14 @@ int import_csv(char * fname, char d) {
int i=0;
+ // handle ","
+ char lookf[4], repls[2], replb[2];
+ sprintf(lookf, "\"%c\"", d);
+ sprintf(repls, "%c", 6);
+ sprintf(replb, "%c", d);
+
// CSV file traversing
while ( ! feof(f) && (fgets(line_in, sizeof(line_in), f) != NULL) ) {
- eol = 0;
-
// show file loading progress
if (++i % 10 == 0 ) sc_info("loading line %d of %d", i, max_lines);
@@ -1138,46 +1141,59 @@ int import_csv(char * fname, char d) {
break;
}
- next = line_in;
+ //char * str_rep = str_replace(line_in, lookf, repls); // handle "," case
+ //strcpy(line_in, str_rep);
+ //free(str_rep);
+ // Split string using the delimiter
+ token = xstrtok(line_in, delim);
c = 0;
- while( !eol ) {
+ while( token != NULL ) {
if (r > MAXROWS - GROWAMT - 1 || c > ABSMAXCOLS - 1) break;
+ clean_carrier(token);
+ if ( token[0] == '\"' && token[strlen(token)-1] == '\"') {
+ quote = 1;
- // Split string using the delimiter
- token = next;
- next += next_unquot_delim(token, d);
- if (*next == '\0')
- eol = 1;
- else {
- *next = '\0';
- next++;
- }
+ // to handle # 816
+ } else if (( token[0] == '\"' || (token[0] == ' ' && token[1] == '\"')) && token[strlen(token)-1] == '\"') {
+ quote = 1;
- clean_carrier(token);
+ } else if ( (token[0] == '\"' || quote) && strlen(token) && (token[strlen(token)-1] != '\"' || strlen(token) == 1) ) {
+ quote = 1;
+ char * next = xstrtok(NULL, delim);
- // remove quotes
- if ( token[0] == '\"' && token[strlen(token)-1] == '\"') {
- token[strlen(token)-1] = '\0';
- token++;
+ if (next != NULL) {
+ sprintf(token + strlen(token), "%c%s", d, next);
+ continue;
+ }
+ }
+ if (quote) { // Remove quotes
+ del_char(token, 0);
+ del_char(token, strlen(token)-1);
+ if (token[0]=='\"') del_char(token, 0); // to handle # 816
}
+ char * st = str_replace (token, repls, replb); // handle "," case
+
// number import
- if (strlen(token) && isnumeric(token) && ! get_conf_int("import_delimited_to_text")
+ if (strlen(st) && isnumeric(st) && ! get_conf_int("import_delimited_as_text")
) {
//wide char
- swprintf(line_interp, BUFFERSIZE, L"let %s%d=%s", coltoa(c), r, token);
+ swprintf(line_interp, BUFFERSIZE, L"let %s%d=%s", coltoa(c), r, st);
// text import
- } else if (strlen(token)){
+ } else if (strlen(st)){
//wide char
- swprintf(line_interp, BUFFERSIZE, L"label %s%d=\"%s\"", coltoa(c), r, token);
+ swprintf(line_interp, BUFFERSIZE, L"label %s%d=\"%s\"", coltoa(c), r, st);
}
//wide char
- if (strlen(token)) send_to_interp(line_interp);
+ if (strlen(st)) send_to_interp(line_interp);
if (++c > cf) cf = c;
+ quote = 0;
+ token = xstrtok(NULL, delim);
+ free(st);
}
r++;
@@ -1196,34 +1212,6 @@ int import_csv(char * fname, char d) {
/**
- * \brief find next unquoted delimiter
- * \details Helper function to import_csv(). Returns the
- * relative position of the next delimiter character that
- * is not quoted with double-quotes (").
- * \param[in] start where we are in the line
- * \param[in] d the delimiter character
- * \return number of characters to move from start to next
- * delimiter or EOL
- */
-int next_unquot_delim(char *start, char d) {
- int quote = 0;
- char *p = start;
- int count = 0;
-
- while(1) {
- if (*p == '\0')
- return count;
- if (*p == d && !quote)
- return count;
- if (*p == '\"')
- quote = !quote;
- count++;
- p++;
- }
-}
-
-
-/**
* \brief Import Markdown to sc
* \param[in] fname file name
* \param[in] d
@@ -1336,7 +1324,7 @@ int import_markdown(char * fname) {
char * st = str_replace(token, "\"", "''"); //replace double quotes inside string
// number import
- if (isnumeric(st) && strlen(st) && ! atoi(get_conf_value("import_delimited_to_text"))) {
+ if (isnumeric(st) && strlen(st) && ! atoi(get_conf_value("import_delimited_as_text"))) {
//wide char
swprintf(line_interp, BUFFERSIZE, L"let %s%d=%s", coltoa(c), rownr, st);
@@ -1514,13 +1502,11 @@ void export_markdown(char * fname, int r0, int c0, int rn, int cn) {
int dash_num;
int rowfmt;
- int ignore_hidden = get_conf_int("ignore_hidden");
-
for (row = r0; row <= rn; row++) {
for (rowfmt=0; rowfmt < roman->cur_sh->row_format[row]; rowfmt++) {
// ignore hidden rows
- if (ignore_hidden && roman->cur_sh->row_hidden[row]) continue;
+ //if (row_hidden[row]) continue;
for (pp = ATBL(roman->cur_sh, roman->cur_sh->tbl, row, col = c0); col <= cn; col++, pp++) {
// ignore hidden cols
@@ -1666,13 +1652,11 @@ void export_plain(char * fname, int r0, int c0, int rn, int cn) {
int align = 1;
int rowfmt;
- int ignore_hidden = get_conf_int("ignore_hidden");
-
for (row = r0; row <= rn; row++) {
for (rowfmt = 0; rowfmt < roman->cur_sh->row_format[row]; rowfmt++) {
// ignore hidden rows
- if (ignore_hidden && roman->cur_sh->row_hidden[row]) continue;
+ //if (row_hidden[row]) continue;
for (pp = ATBL(roman->cur_sh, roman->cur_sh->tbl, row, col = c0); col <= cn; col++, pp++) {
// ignore hidden cols
@@ -1827,40 +1811,32 @@ void export_latex(char * fname, int r0, int c0, int rn, int cn, int verbose) {
/**
- * \brief escape special characters and output cell to file
+ * \brief unspecial()
*
- * \details For the export formats delimiter-separated value
- * and LaTex. Escapes the special characters in one cell value
- * and appends the cell to the file.
+ * \details Unspecial (backquotes - > ") things that are special
+ * chars in a table
*
* \param[in] f file pointer
- * \param[in] str string pointer
+ * \param[in] srt string pointer
* \param[in] delim
*
* \return none
*/
void unspecial(FILE * f, char * str, int delim) {
int backquote = 0;
- if (strchr(str, delim) != NULL) backquote = 1;
+ if (str_in_str(str, ",") != -1) backquote = 1;
+ if (backquote) putc('\"', f);
if (*str == '\\') str++; // delete wheeling string operator, OK?
-
- if (delim == '&') { // the export format is LaTex
- while (*str) {
- if ( (*str == '&') || (*str == '$') || (*str == '#') ||
- (*str == '%') || (*str == '{') || (*str == '}') || (*str == '_') )
- putc('\\', f);
- putc(*str, f);
- str++;
- }
- } else {
- if (backquote) putc('\"', f);
- while (*str) {
- putc(*str, f);
- str++;
- }
- if (backquote) putc('\"', f);
- }
+ while (*str) {
+ // for LATEX export
+ if (delim == '&' && ( (*str == '&') || (*str == '$') ||
+ (*str == '#') || (*str == '%') || (*str == '{') || (*str == '}') || (*str == '&')))
+ putc('\\', f);
+ putc(*str, f);
+ str++;
+ }
+ if (backquote) putc('\"', f);
}
@@ -1900,9 +1876,7 @@ void export_delim(char * fname, char coldelim, int r0, int c0, int rn, int cn, i
}
}
- int ignore_hidden = get_conf_int("ignore_hidden");
for (row = r0; row <= rn; row++) {
- if (ignore_hidden && sh->row_hidden[row]) continue;
for (pp = ATBL(sh, sh->tbl, row, col = c0); col <= cn; col++, pp++) {
int last_valid_col = right_limit(sh, row)->col; // for issue #374
if (col > last_valid_col) continue;
@@ -2175,13 +2149,10 @@ int backup_exists(char * file) {
void openfile_nested(char * file) {
char * cmd = get_conf_value("default_open_file_under_cursor_cmd");
if (cmd == NULL || ! strlen(cmd)) return;
- pid_t pid = fork();
- if (pid == 0) {
- execlp(cmd, cmd, file, NULL);
- exit(EXIT_FAILURE);
- } else if (pid > 0) {
- waitpid(pid, NULL, 0);
- }
+ char syscmd[PATHLEN + strlen(cmd)];
+ sprintf(syscmd, "%s", cmd);
+ sprintf(syscmd + strlen(syscmd), " %s", file);
+ system(syscmd);
}