blob: 3833f014d7abcf8422c012edc3155c5dbf9b0b01 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001/*
2 * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26#include <ctype.h>
27
28#include "bool.h"
29#include "utf.h"
30
31 $$Tables
32
33/* Take pointer to a string. Skip over the longest part of the string that
34 * could be taken as a fieldname. Allow '/' if slash_okay is TRUE.
35 *
36 * Return a pointer to just past the fieldname. Return NULL if no fieldname
37 * at all was found, or in the case of slash_okay being true, we saw
38 * consecutive slashes (meaning we were looking for a qualified path but
39 * found something that was badly-formed).
40 */
41
42#define bool_t int
43
44char *
45skip_over_fieldname(char *name, bool_t slash_okay)
46{
47 char *p = name;
48 char *last_p;
49 unicode ch;
50 unicode last_ch = 0;
51
52 ch = *p;
53 if (ch == (ch & 0x7F))
54 ++p;
55 else
56 ch = next_utf2unicode(&p);
57 if (($$Lookup(ch) & $$bitJavaStart) == 0)
58 return 0;
59 for (;;) {
60 last_p = p;
61 last_ch = ch;
62 ch = *p;
63 if (ch == (ch & 0x7F))
64 ++p;
65 else
66 ch = next_utf2unicode(&p);
67 if (($$Lookup(ch) & $$bitJavaPart) == 0) {
68 if (ch == '/' && slash_okay) {
69 if (last_ch == '/')
70 return 0;
71 }
72 else {
73 return last_p;
74 }
75 }
76 }
77}
78
79void main() {
80 int j;
81 for (j = 0; j < (1 << 16); j++) {
82 int q = $$Lookup(j);
83 printf("%04x%s%s\n", j,
84 (q & $$bitJavaStart ? " Start" : ""),
85 (q & $$bitJavaPart ? " Part" : ""));
86 }
87}