| /* |
| ******************************************************************************* |
| * |
| * Copyright (C) 2003, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| * |
| ******************************************************************************* |
| * file name: ucdstrip.c |
| * encoding: US-ASCII |
| * tab size: 8 (not used) |
| * indentation:4 |
| * |
| * created on: 2003feb20 |
| * created by: Markus W. Scherer |
| * |
| * Simple tool for Unicode Character Database files with semicolon-delimited fields. |
| * Removes comments behind data lines but not in others. |
| * |
| * To compile, just call a C compiler/linker with this source file. |
| * On Windows: cl ucdstrip.c |
| */ |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| |
| /* return the first character position after the end of the data */ |
| static char * |
| endOfData(const char *l) { |
| char *end; |
| char c; |
| |
| end=strchr(l, '#'); |
| if(end!=NULL) { |
| /* ignore whitespace before the comment */ |
| while(l!=end && ((c=*(end-1))==' ' || c=='\t')) { |
| --end; |
| } |
| } else { |
| end=strchr(l, 0); |
| } |
| return end; |
| } |
| |
| extern int |
| main(int argc, const char *argv[]) { |
| static char line[2000]; |
| char *end; |
| |
| while(gets(line)!=NULL) { |
| if(strtol(line, &end, 16)>=0 && end!=line) { |
| /* code point or range followed by semicolon and data, remove comment */ |
| *endOfData(line)=0; |
| } |
| puts(line); |
| } |
| |
| return 0; |
| } |