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

📄 xstringtype.java

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 JAVA
字号:
// Copyright (c) 2007  Per M.A. Bothner.// This is free software;  for specifics see ../../../COPYING.package gnu.kawa.xml;import gnu.bytecode.*;import gnu.xml.*;/* #ifdef use:java.util.regex */import java.util.regex.Pattern;import java.util.regex.Matcher;/* #endif */public class XStringType extends XDataType{  /* #ifdef use:java.util.regex */  Pattern pattern;  /* #endif */  static ClassType XStringType = ClassType.make("gnu.kawa.xml.XString");  public XStringType (String name, XDataType base, int typeCode,                      String pattern)  {    super(name, XStringType, typeCode);    baseType = base;    /* #ifdef use:java.util.regex */    if (pattern != null)      this.pattern = Pattern.compile(pattern);    /* #endif */  }  public static final XStringType normalizedStringType =    new XStringType ("normalizedString", stringType,                     NORMALIZED_STRING_TYPE_CODE, null);  public static final XStringType tokenType =    new XStringType ("token", normalizedStringType,                     TOKEN_TYPE_CODE, null);  public static final XStringType languageType =    new XStringType ("language", tokenType,                     LANGUAGE_TYPE_CODE, "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*");  public static final XStringType NMTOKENType =    new XStringType ("NMTOKEN", tokenType,                     NMTOKEN_TYPE_CODE, "\\c+"); // FIXME check pattern  public static final XStringType NameType =    new XStringType ("Name", tokenType,                     NAME_TYPE_CODE, null);  public static final XStringType NCNameType =    new XStringType ("NCName", NameType,                     NCNAME_TYPE_CODE, null);  public static final XStringType IDType =    new XStringType ("ID", NCNameType,                     ID_TYPE_CODE, null);  public static final XStringType IDREFType =    new XStringType ("IDREF", NCNameType,                     IDREF_TYPE_CODE, null);  public static final XStringType ENTITYType =    new XStringType ("ENTITY", NCNameType,                     ENTITY_TYPE_CODE, null);  public boolean isInstance (Object obj)  {    if (! (obj instanceof XString))      return false;    /*    if (this == stringType)      return true;    */    XDataType objType = ((XString) obj).getStringType();    while (objType != null)      {        if (objType == this)          return true;        objType = objType.baseType;      }    return false;  }  /** Check if the String matches the restrictions on this type.   * Assumes any normalization has been done.   * @return null on success or an error message otherwise.   */  public String matches (String value)  {    boolean status;    switch (typeCode)      {      case NORMALIZED_STRING_TYPE_CODE:      case TOKEN_TYPE_CODE:        // Assumes that TextUtils.replaceWhitespace returns the original        // string if it was original normalized.        // This is suboptimal, but the extra cost is minor when the string        // is already normalized, which presumably is the common case.        boolean collapse = typeCode == TOKEN_TYPE_CODE;        status = value == TextUtils.replaceWhitespace(value, collapse);        break;      case NAME_TYPE_CODE:        status = XName.isName(value);        break;      case NCNAME_TYPE_CODE:      case ID_TYPE_CODE:      case IDREF_TYPE_CODE:      case ENTITY_TYPE_CODE:        status = XName.isNCName(value);        break;      case NMTOKEN_TYPE_CODE:        status = XName.isNmToken(value);        break;      default:        status = pattern == null || pattern.matcher(value).matches();      }    // If we haven't returned a more specific error message:    return status ? null : "not a valid XML "+getName();  }  public Object valueOf (String value)  {    value = TextUtils.replaceWhitespace(value, this != normalizedStringType);    String err = matches(value);    if (err != null) // we're not using err yet.  FIXME.      throw new ClassCastException("cannot cast "+value+" to "+name);    return new XString(value, this);  }  public Object cast (Object value)  {    if (value instanceof XString)      {        XString xvalue = (XString) value;        if (xvalue.getStringType() == this)          return xvalue;      }    return valueOf((String) stringType.cast(value));  }  public static XString makeNCName (String value)  {    return (XString) NCNameType.valueOf(value);  }}

⌨️ 快捷键说明

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