⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 antstructure.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            out.println("          basedir CDATA #IMPLIED>");            out.println("");        }        /**         * Prints the definition for the target element.         */        public void printTargetDecl(PrintWriter out) {            out.print("<!ELEMENT target (");            out.print(TASKS);            out.print(" | ");            out.print(TYPES);            out.println(")*>");            out.println("");            out.println("<!ATTLIST target");            out.println("          id          ID    #IMPLIED");            out.println("          name        CDATA #REQUIRED");            out.println("          if          CDATA #IMPLIED");            out.println("          unless      CDATA #IMPLIED");            out.println("          depends     CDATA #IMPLIED");            out.println("          description CDATA #IMPLIED>");            out.println("");        }        /**         * Print the definition for a given element.         */        public void printElementDecl(PrintWriter out, Project p,                                     String name, Class element) {            if (visited.containsKey(name)) {                return;            }            visited.put(name, "");            IntrospectionHelper ih = null;            try {                ih = IntrospectionHelper.getHelper(p, element);            } catch (Throwable t) {                /*                 * XXX - failed to load the class properly.                 *                 * should we print a warning here?                 */                return;            }            StringBuffer sb = new StringBuffer("<!ELEMENT ");            sb.append(name).append(" ");            if (org.apache.tools.ant.types.Reference.class.equals(element)) {                sb.append("EMPTY>").append(LINE_SEP);                sb.append("<!ATTLIST ").append(name);                sb.append(LINE_SEP).append("          id ID #IMPLIED");                sb.append(LINE_SEP).append("          refid IDREF #IMPLIED");                sb.append(">").append(LINE_SEP);                out.println(sb);                return;            }            Vector v = new Vector();            if (ih.supportsCharacters()) {                v.addElement("#PCDATA");            }            if (TaskContainer.class.isAssignableFrom(element)) {                v.addElement(TASKS);            }            Enumeration e = ih.getNestedElements();            while (e.hasMoreElements()) {                v.addElement(e.nextElement());            }            if (v.isEmpty()) {                sb.append("EMPTY");            } else {                sb.append("(");                final int count = v.size();                for (int i = 0; i < count; i++) {                    if (i != 0) {                        sb.append(" | ");                    }                    sb.append(v.elementAt(i));                }                sb.append(")");                if (count > 1 || !v.elementAt(0).equals("#PCDATA")) {                    sb.append("*");                }            }            sb.append(">");            out.println(sb);            sb = new StringBuffer("<!ATTLIST ");            sb.append(name);            sb.append(LINE_SEP).append("          id ID #IMPLIED");            e = ih.getAttributes();            while (e.hasMoreElements()) {                String attrName = (String) e.nextElement();                if ("id".equals(attrName)) {                    continue;                }                sb.append(LINE_SEP).append("          ")                    .append(attrName).append(" ");                Class type = ih.getAttributeType(attrName);                if (type.equals(java.lang.Boolean.class)                    || type.equals(java.lang.Boolean.TYPE)) {                    sb.append(BOOLEAN).append(" ");                } else if (Reference.class.isAssignableFrom(type)) {                    sb.append("IDREF ");                } else if (EnumeratedAttribute.class.isAssignableFrom(type)) {                    try {                        EnumeratedAttribute ea =                            (EnumeratedAttribute) type.newInstance();                        String[] values = ea.getValues();                        if (values == null                            || values.length == 0                            || !areNmtokens(values)) {                            sb.append("CDATA ");                        } else {                            sb.append("(");                            for (int i = 0; i < values.length; i++) {                                if (i != 0) {                                    sb.append(" | ");                                }                                sb.append(values[i]);                            }                            sb.append(") ");                        }                    } catch (InstantiationException ie) {                        sb.append("CDATA ");                    } catch (IllegalAccessException ie) {                        sb.append("CDATA ");                    }                } else if (type.getSuperclass() != null                           && type.getSuperclass().getName().equals("java.lang.Enum")) {                    try {                        Object[] values = (Object[]) type.getMethod("values", (Class[])  null)                            .invoke(null, (Object[]) null);                        if (values.length == 0) {                            sb.append("CDATA ");                        } else {                            sb.append('(');                            for (int i = 0; i < values.length; i++) {                                if (i != 0) {                                    sb.append(" | ");                                }                                sb.append(type.getMethod("name", (Class[]) null)                                          .invoke(values[i], (Object[]) null));                            }                            sb.append(") ");                        }                    } catch (Exception x) {                        sb.append("CDATA ");                    }                } else {                    sb.append("CDATA ");                }                sb.append("#IMPLIED");            }            sb.append(">").append(LINE_SEP);            out.println(sb);            final int count = v.size();            for (int i = 0; i < count; i++) {                String nestedName = (String) v.elementAt(i);                if (!"#PCDATA".equals(nestedName)                    && !TASKS.equals(nestedName)                    && !TYPES.equals(nestedName)) {                    printElementDecl(out, p, nestedName, ih.getElementType(nestedName));                }            }        }        /**         * Does this String match the XML-NMTOKEN production?         * @param s the string to test         * @return true if the string matches the XML-NMTOKEN         */        public static final boolean isNmtoken(String s) {            final int length = s.length();            for (int i = 0; i < length; i++) {                char c = s.charAt(i);                // XXX - we are committing CombiningChar and Extender here                if (!Character.isLetterOrDigit(c)                    && c != '.' && c != '-' && c != '_' && c != ':') {                    return false;                }            }            return true;        }        /**         * Do the Strings all match the XML-NMTOKEN production?         *         * <p>Otherwise they are not suitable as an enumerated attribute,         * for example.</p>         * @param s the array of string to test         * @return true if all the strings in the array math XML-NMTOKEN         */        public static final boolean areNmtokens(String[] s) {            for (int i = 0; i < s.length; i++) {                if (!isNmtoken(s[i])) {                    return false;                }            }            return true;        }    }    /**     * Does this String match the XML-NMTOKEN production?     * @param s the string to test     * @return true if the string matches the XML-NMTOKEN     */    protected boolean isNmtoken(String s) {        return DTDPrinter.isNmtoken(s);    }    /**     * Do the Strings all match the XML-NMTOKEN production?     *     * <p>Otherwise they are not suitable as an enumerated attribute,     * for example.</p>     * @param s the array of string to test     * @return true if all the strings in the array math XML-NMTOKEN     */    protected boolean areNmtokens(String[] s) {        return DTDPrinter.areNmtokens(s);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -