summaryrefslogtreecommitdiffstats
path: root/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java')
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
new file mode 100644
index 0000000000..813de0ff56
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
@@ -0,0 +1,82 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+/*
+ * A C or C++ macro as it is used in the source code
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+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);
+ }
+} \ No newline at end of file