1ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho/*
2ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*******************************************************************************
3ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*
4ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   Copyright (C) 2003, International Business Machines
5ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   Corporation and others.  All Rights Reserved.
6ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*
7ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*******************************************************************************
8ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   file name:  ucdstrip.c
9ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   encoding:   US-ASCII
10ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   tab size:   8 (not used)
11ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   indentation:4
12ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*
13ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   created on: 2003feb20
14ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   created by: Markus W. Scherer
15ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*
16ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   Simple tool for Unicode Character Database files with semicolon-delimited fields.
17ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   Removes comments behind data lines but not in others.
18ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*
19ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   To compile, just call a C compiler/linker with this source file.
20ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*   On Windows: cl ucdstrip.c
21ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho*/
22ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho
23ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho#include <stdio.h>
24ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho#include <string.h>
25ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho#include <stdlib.h>
26ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho
27ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho/* return the first character position after the end of the data */
28ea1f1813c8b13a850b13f256aeb5152bb0942e81clairehostatic char *
29ea1f1813c8b13a850b13f256aeb5152bb0942e81clairehoendOfData(const char *l) {
30ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    char *end;
31ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    char c;
32ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho
33ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    end=strchr(l, '#');
34ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    if(end!=NULL) {
35ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        /* ignore whitespace before the comment */
36ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        while(l!=end && ((c=*(end-1))==' ' || c=='\t')) {
37ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho            --end;
38ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        }
39ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    } else {
40ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        end=strchr(l, 0);
41ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    }
42ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    return end;
43ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho}
44ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho
45ea1f1813c8b13a850b13f256aeb5152bb0942e81clairehoextern int
46ea1f1813c8b13a850b13f256aeb5152bb0942e81clairehomain(int argc, const char *argv[]) {
47ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    static char line[2000];
48ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    char *end;
49ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho
50ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    while(gets(line)!=NULL) {
51ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        if(strtol(line, &end, 16)>=0 && end!=line) {
52ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho            /* code point or range followed by semicolon and data, remove comment */
53ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho            *endOfData(line)=0;
54ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        }
55ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho        puts(line);
56ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    }
57ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho
58ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho    return 0;
59ea1f1813c8b13a850b13f256aeb5152bb0942e81claireho}
60