summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-4.4/tools/genprops/misc/ucdmerge.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-4.4/tools/genprops/misc/ucdmerge.c')
-rw-r--r--Build/source/libs/icu/icu-4.4/tools/genprops/misc/ucdmerge.c149
1 files changed, 0 insertions, 149 deletions
diff --git a/Build/source/libs/icu/icu-4.4/tools/genprops/misc/ucdmerge.c b/Build/source/libs/icu/icu-4.4/tools/genprops/misc/ucdmerge.c
deleted file mode 100644
index 35f6850cea2..00000000000
--- a/Build/source/libs/icu/icu-4.4/tools/genprops/misc/ucdmerge.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-*******************************************************************************
-*
-* Copyright (C) 2003, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-*******************************************************************************
-* file name: ucdmerge.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.
-* Merges adjacent, identical per-code point data lines into one line with range syntax.
-*
-* To compile, just call a C compiler/linker with this source file.
-* On Windows: cl ucdmerge.c
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-static const char *
-skipWhitespace(const char *s) {
- while(*s==' ' || *s=='\t') {
- ++s;
- }
- return s;
-}
-
-/* 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;
-}
-
-static int
-sameData(const char *l1, const char *l2) {
- char *end1, *end2;
- int length;
-
- /* find the first semicolon in each line - there must be one */
- l1=strchr(l1, ';')+1;
- l2=strchr(l2, ';')+1;
-
- /* find the end of data: end of string or start of comment */
- end1=endOfData(l1);
- end2=endOfData(l2);
-
- /* compare the line data portions */
- length=end1-l1;
- return length==(end2-l2) && 0==memcmp(l1, l2, length);
-}
-
-extern int
-main(int argc, const char *argv[]) {
- static char line[2000], firstLine[2000], lastLine[2000];
- char *end;
- long first, last, c;
- int finished;
-
- first=last=-1;
- finished=0;
-
- for(;;) {
- if(gets(line)!=NULL) {
- /* parse the initial code point, if any */
- c=strtol(line, &end, 16);
- if(end!=line && *skipWhitespace(end)==';') {
- /* single code point followed by semicolon and data, keep c */
- } else {
- c=-1;
- }
- } else {
- line[0]=0;
- c=-1;
- finished=1;
- }
-
- if(last>=0 && (c!=(last+1) || !sameData(firstLine, line))) {
- /* output the current range */
- if(first==last) {
- /* there was no range, just output the one line we found */
- puts(firstLine);
- } else {
- /* there was a real range, merge their lines */
- end=strchr(lastLine, '#');
- if(end==NULL) {
- /* no comment in second line */
- printf("%04lX..%04lX%s\n",
- first, last, /* code point range */
- strchr(firstLine, ';'));/* first line starting from the first ; */
- } else if(strchr(firstLine, '#')==NULL) {
- /* no comment in first line */
- printf("%04lX..%04lX%s%s\n",
- first, last, /* code point range */
- strchr(firstLine, ';'), /* first line starting from the first ; */
- end); /* comment from second line */
- } else {
- /* merge comments from both lines */
- printf("%04lX..%04lX%s..%s\n",
- first, last, /* code point range */
- strchr(firstLine, ';'), /* first line starting from the first ; */
- skipWhitespace(end+1)); /* comment from second line, after # and spaces */
- }
- }
- first=last=-1;
- }
-
- if(c<0) {
- if(finished) {
- break;
- }
-
- /* no data on this line, output as is */
- puts(line);
- } else {
- /* data on this line, store for possible range compaction */
- if(last<0) {
- /* set as the first line in a possible range */
- first=last=c;
- strcpy(firstLine, line);
- lastLine[0]=0;
- } else /* must be c==(last+1) && sameData() because of previous conditions */ {
- /* continue with the current range */
- last=c;
- strcpy(lastLine, line);
- }
- }
- }
-
- return 0;
-}