/[csv2latex]/csv2latex.c
ViewVC logotype

Diff of /csv2latex.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 44, Mon Oct 24 14:45:53 2016 UTC revision 45, Mon Oct 24 15:29:10 2016 UTC
# Line 182  config* parseOptions (config* conf, int Line 182  config* parseOptions (config* conf, int
182                                          }                                          }
183                                          break;                                          break;
184                          case 'r': /* reduce table size (original idea thx to <boaz.gezer@gmail.com>) */                          case 'r': /* reduce table size (original idea thx to <boaz.gezer@gmail.com>) */
                   
185                                          if (isdigit(optarg[0])) {                                          if (isdigit(optarg[0])) {
186                                                  tmp = atoi(optarg);                                                  tmp = atoi(optarg);
187                                                  conf->red = (tmp>4) ? 4 : (tmp<0) ? 0 : tmp; /* [1-4] */                                                  conf->red = (tmp>4) ? 4 : (tmp<0) ? 0 : tmp; /* [1-4] */
# Line 208  config* parseOptions (config* conf, int Line 207  config* parseOptions (config* conf, int
207  int guessCSV(config* conf, FILE* in) {  int guessCSV(config* conf, FILE* in) {
208  /* guess the block delimiter and the csv separator */  /* guess the block delimiter and the csv separator */
209          int token;          int token;
210            
211          token = getc(in); /* first char is block delimiter */          token = getc(in); /* first char is block delimiter */
212          if (token == EOF) {          if (token == EOF) {
213                  fprintf(stderr, "ERROR: emtpy file ?\n");                  fprintf(stderr, "ERROR: emtpy file ?\n");
214                  return(-1);                  return -1;
215          } else if (ispunct(token) || token == ' ') {          } else if (ispunct(token) || token == ' ') {
216                  /* found first block delimiter, act this way */                  /* found first block delimiter, act this way */
217                  conf->block = token;                  conf->block = token;
# Line 228  int guessCSV(config* conf, FILE* in) { Line 227  int guessCSV(config* conf, FILE* in) {
227                          conf->sep = getc(in);                          conf->sep = getc(in);
228                          fprintf(stderr, "Guessed '%c' as Separator\n",                          fprintf(stderr, "Guessed '%c' as Separator\n",
229                                          conf->sep);                                          conf->sep);
230                          return(0);                          return 0;
231                  }else{                  } else {
232                          return (-1); /* what else ? */                          return -1; /* what else ? */
233                  }                  }
234          }else{ /* no block delimiter, act this way */          } else { /* no block delimiter, act this way */
235                  conf->block = 0;                  conf->block = 0;
236                  fprintf(stderr, "Guessed No Block Delimiter\n");                  fprintf(stderr, "Guessed No Block Delimiter\n");
237                  /* stream file while input is not a control char */                  /* stream file while input is not a control char */
238                  while (isalnum((token = getc(in))) &&                  while (!ispunct((token = getc(in))) &&
239                                  token != '\n' &&                                  token != '\n' &&
240                                  token != EOF)                                  token != EOF)
241                  {/* getc has been done */}                  {/* getc has been done */}
# Line 244  int guessCSV(config* conf, FILE* in) { Line 243  int guessCSV(config* conf, FILE* in) {
243                  if (ispunct(token) || token == '\t' || token == ' ') {                  if (ispunct(token) || token == '\t' || token == ' ') {
244                          conf->sep = token;                          conf->sep = token;
245                          fprintf(stderr, "Guessed %c as Separator\n", conf->sep);                          fprintf(stderr, "Guessed %c as Separator\n", conf->sep);
246                          return(0);                          return 0;
247                  } else { /* did not found any separator */                  } else { /* did not found any separator */
248                          fprintf(stderr, "ERROR: Did not guess any Separator!\n");                          fprintf(stderr, "ERROR: Did not guess any Separator!\n");
249                          return(-1);                          return -1;
250                  }                  }
251          }          }
252          return(0);          return 0;
253  }  }
254    
255  void getMaximums(config* conf, FILE* in)  {  void getMaximums(config* conf, FILE* in)  {
256  /* gets the number of cols and chars of a csv file assuming a separator */  /* gets the number of cols and chars of a csv file assuming a separator */
257          int token = 0;          int token = 0;
258            int nosep = 0;
259          unsigned int curcol = 0;          unsigned int curcol = 0;
260          unsigned int curchar = 0;          unsigned int curchar = 0;
261          unsigned int inblock = 0;          unsigned int inblock = 0;
# Line 266  void getMaximums(config* conf, FILE* in) Line 266  void getMaximums(config* conf, FILE* in)
266    
267          while (token != EOF) {          while (token != EOF) {
268                  token = getc(in);                  token = getc(in);
269                    
270                  /* EOF ? */                  /* EOF ? */
271                  if (token == EOF) {                  if (token == EOF) {
272                          continue;                          continue;
# Line 284  void getMaximums(config* conf, FILE* in) Line 284  void getMaximums(config* conf, FILE* in)
284                          continue;                          continue;
285                  }                  }
286    
287                    /* check implicit, non-guessed, block */
288                    if (token == '\"') {
289                            if (nosep == 0)
290                                    nosep = 1;
291                            else
292                                    nosep = 0;
293                    }
294    
295                  /* enter/quit a block */                  /* enter/quit a block */
296                  if (conf->block && token == conf->block) {                  if (conf->block && token == conf->block) {
297                          inblock = !inblock;                          inblock = !inblock;
# Line 291  void getMaximums(config* conf, FILE* in) Line 299  void getMaximums(config* conf, FILE* in)
299                  }                  }
300    
301                  /* count cols in current line */                  /* count cols in current line */
302                  if (token == conf->sep && ((conf->block && !inblock) || !conf->block)) {                  if (token == conf->sep && ((conf->block && !inblock) || !conf->block) && nosep == 0) {
303                          curcol++;                          curcol++;
304                          continue;                          continue;
305                  }                  }
# Line 329  void doTeXsub(config* conf, char newsep, Line 337  void doTeXsub(config* conf, char newsep,
337                  token2 = token1;        /* second last character, used for detection of quotation marks */                  token2 = token1;        /* second last character, used for detection of quotation marks */
338                  token1 = token; /* last character, used for detection of quotation marks */                  token1 = token; /* last character, used for detection of quotation marks */
339                  token = getc(in);                  token = getc(in);
340                    
341                  /* EOF ? */                  /* EOF ? */
342                  if (token == EOF) {                  if (token == EOF) {
343                          continue;                          continue;
# Line 404  void doTeXsub(config* conf, char newsep, Line 412  void doTeXsub(config* conf, char newsep,
412                          else                          else
413                                  nosep = 0;                                  nosep = 0;
414                  }                  }
415                    
416                  /* new column ? */                  /* new column ? */
417                  if ((token == conf->sep && ((conf->block && !inblock) || !conf->block)) && nosep == 0) {                                          if ((token == conf->sep && ((conf->block && !inblock) || !conf->block)) && nosep == 0) {
418                          if (!(firstrow && (conf->longtable && conf->repeat)))                          if (!(firstrow && (conf->longtable && conf->repeat)))
419                                  putc(newsep, out);                                  putc(newsep, out);
420                          numcols--;                          numcols--;
# Line 490  void doTeXdoc(config* conf, FILE* in, FI Line 498  void doTeXdoc(config* conf, FILE* in, FI
498          if (conf->header) {          if (conf->header) {
499                  fprintf(out, "\\documentclass[a4paper]{article}\n");                  fprintf(out, "\\documentclass[a4paper]{article}\n");
500                  fprintf(out, "\\usepackage[T1]{fontenc}\n");                  fprintf(out, "\\usepackage[T1]{fontenc}\n");
501                  fprintf(out, "\\usepackage[latin1]{inputenc}\n");                  fprintf(out, "\\usepackage[utf8]{inputenc}\n");
502                  if (conf->red) {                  if (conf->red) {
503                          fprintf(out, "\\usepackage{relsize}\n");                          fprintf(out, "\\usepackage{relsize}\n");
504                  }                  }
# Line 571  int main (int argc, char **argv) { Line 579  int main (int argc, char **argv) {
579          conf->repeat = 0;      /* default; do not repeat the header row */          conf->repeat = 0;      /* default; do not repeat the header row */
580          conf->vlines = 1;      /* default; draw lines between columns */          conf->vlines = 1;      /* default; draw lines between columns */
581          conf->hlines = 1;      /* default; draw lines between rows */          conf->hlines = 1;      /* default; draw lines between rows */
582            
583          /* TeX charaters to escape */          /* TeX charaters to escape */
584          conf->tex = (texcape*)malloc(sizeof(texcape));          conf->tex = (texcape*)malloc(sizeof(texcape));
585          conf->tex->tab = "\\_#$%^&{}~";          conf->tex->tab = "\\_#$%^&{}~";
586          conf->tex->size = strlen(conf->tex->tab);          conf->tex->size = strlen(conf->tex->tab);
587            
588    
589          conf = parseOptions(conf, argc, argv);          conf = parseOptions(conf, argc, argv);
590    

Legend:
Removed from v.44  
changed lines
  Added in v.45

  ViewVC Help
Powered by ViewVC 1.1.26