| /* |
| * Copyright 2003-2004 The Apache Software Foundation. |
| // (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.axis.tools.common; |
| |
| |
| /** |
| * A C or C++ macro as it is used in the source code |
| */ |
| class MacroPart extends FilePart { |
| /** |
| * Factory method to create a MacroPart. |
| * @param s unparsed source code which may start with a define or macro. |
| */ |
| static MacroPart create(String s) { |
| String orig = getOriginalText(s); |
| if (null == orig) |
| return null; |
| return new MacroPart(orig); |
| } |
| |
| MacroPart(String s) { |
| super(s, FilePart.MACRO); |
| } |
| |
| /** |
| * @param s unparsed source code which may start with a define or macro. |
| * @return all of s up to the end of the define or macro. |
| */ |
| private static String getOriginalText(String s) { |
| String name = getName(s); |
| int len = name.length(); |
| if (null == name) |
| return null; |
| else if (Configuration.isDefine(name)) { |
| return s.substring(0, len); |
| } else if (Configuration.isMacro(name)) { |
| String rest = s.substring(len); |
| len += Utils.findMatching(rest, '(', ')'); |
| return s.substring(0, len + 1); |
| } else |
| return null; |
| } |
| |
| static boolean isAMacro(String s) { |
| if (s == null || 0 == s.length()) |
| return false; |
| String name = getName(s); |
| return Configuration.isMacro(name) || Configuration.isDefine(name); |
| } |
| |
| private static String getName(String s) { |
| int i; |
| for (i = 0; i < s.length(); i++) |
| if (!Character.isLetterOrDigit(s.charAt(i)) && '_' != s.charAt(i)) |
| break; |
| if (s.length() == i) |
| return null; |
| return s.substring(0, i); |
| } |
| } |