001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: ElemDesc.java 468655 2006-10-28 07:12:06Z minchau $ 020 */ 021 package org.apache.xml.utils; 022 023 import java.util.Hashtable; 024 025 /** 026 * This class is in support of SerializerToHTML, and acts as a sort 027 * of element representative for HTML elements. 028 * @xsl.usage internal 029 */ 030 class ElemDesc 031 { 032 033 /** Table of attributes for the element */ 034 Hashtable m_attrs = null; 035 036 /** Element's flags, describing the role this element plays during 037 * formatting of the document. This is used as a bitvector; more than one flag 038 * may be set at a time, bitwise-ORed together. Mnemonic and bits 039 * have been assigned to the flag values. NOTE: Some bits are 040 * currently assigned multiple mnemonics; it is the caller's 041 * responsibility to disambiguate these if necessary. */ 042 int m_flags; 043 044 /** Defines mnemonic and bit-value for the EMPTY flag */ 045 static final int EMPTY = (1 << 1); 046 047 /** Defines mnemonic and bit-value for the FLOW flag */ 048 static final int FLOW = (1 << 2); 049 050 /** Defines mnemonic and bit-value for the BLOCK flag */ 051 static final int BLOCK = (1 << 3); 052 053 /** Defines mnemonic and bit-value for the BLOCKFORM flag */ 054 static final int BLOCKFORM = (1 << 4); 055 056 /** Defines mnemonic and bit-value for the BLOCKFORMFIELDSET flag */ 057 static final int BLOCKFORMFIELDSET = (1 << 5); 058 059 /** Defines mnemonic and bit-value for the CDATA flag */ 060 static final int CDATA = (1 << 6); 061 062 /** Defines mnemonic and bit-value for the PCDATA flag */ 063 static final int PCDATA = (1 << 7); 064 065 /** Defines mnemonic and bit-value for the RAW flag */ 066 static final int RAW = (1 << 8); 067 068 /** Defines mnemonic and bit-value for the INLINE flag */ 069 static final int INLINE = (1 << 9); 070 071 /** Defines mnemonic and bit-value for the INLINEA flag */ 072 static final int INLINEA = (1 << 10); 073 074 /** Defines mnemonic and bit-value for the INLINELABEL flag */ 075 static final int INLINELABEL = (1 << 11); 076 077 /** Defines mnemonic and bit-value for the FONTSTYLE flag */ 078 static final int FONTSTYLE = (1 << 12); 079 080 /** Defines mnemonic and bit-value for the PHRASE flag */ 081 static final int PHRASE = (1 << 13); 082 083 /** Defines mnemonic and bit-value for the FORMCTRL flag */ 084 static final int FORMCTRL = (1 << 14); 085 086 /** Defines mnemonic and bit-value for the SPECIAL flag */ 087 static final int SPECIAL = (1 << 15); 088 089 /** Defines mnemonic and bit-value for the ASPECIAL flag */ 090 static final int ASPECIAL = (1 << 16); 091 092 /** Defines mnemonic and bit-value for the HEADMISC flag */ 093 static final int HEADMISC = (1 << 17); 094 095 /** Defines mnemonic and bit-value for the HEAD flag */ 096 static final int HEAD = (1 << 18); 097 098 /** Defines mnemonic and bit-value for the LIST flag */ 099 static final int LIST = (1 << 19); 100 101 /** Defines mnemonic and bit-value for the PREFORMATTED flag */ 102 static final int PREFORMATTED = (1 << 20); 103 104 /** Defines mnemonic and bit-value for the WHITESPACESENSITIVE flag */ 105 static final int WHITESPACESENSITIVE = (1 << 21); 106 107 /** Defines mnemonic and bit-value for the ATTRURL flag */ 108 static final int ATTRURL = (1 << 1); 109 110 /** Defines mnemonic and bit-value for the ATTREMPTY flag */ 111 static final int ATTREMPTY = (1 << 2); 112 113 /** 114 * Construct an ElementDescription with an initial set of flags. 115 * 116 * @param flags Element flags 117 * @see m_flags 118 */ 119 ElemDesc(int flags) 120 { 121 m_flags = flags; 122 } 123 124 /** 125 * "is (this element described by these flags)". 126 * 127 * This might more properly be called areFlagsSet(). It accepts an 128 * integer (being used as a bitvector) and checks whether all the 129 * corresponding bits are set in our internal flags. Note that this 130 * test is performed as a bitwise AND, not an equality test, so a 131 * 0 bit in the input means "don't test", not "must be set false". 132 * 133 * @param flags Vector of flags to compare against this element's flags 134 * 135 * @return true if the flags set in the parameter are also set in the 136 * element's stored flags. 137 * 138 * @see m_flags 139 * @see isAttrFlagSet 140 */ 141 boolean is(int flags) 142 { 143 // int which = (m_flags & flags); 144 return (m_flags & flags) != 0; 145 } 146 147 /** 148 * Set a new attribute for this element 149 * 150 * 151 * @param name Attribute name 152 * @param flags Attibute flags 153 */ 154 void setAttr(String name, int flags) 155 { 156 157 if (null == m_attrs) 158 m_attrs = new Hashtable(); 159 160 m_attrs.put(name, new Integer(flags)); 161 } 162 163 /** 164 * Find out if a flag is set in a given attribute of this element 165 * 166 * 167 * @param name Attribute name 168 * @param flags Flag to check 169 * 170 * @return True if the flag is set in the attribute. Returns false 171 * if the attribute is not found 172 * @see m_flags 173 */ 174 boolean isAttrFlagSet(String name, int flags) 175 { 176 177 if (null != m_attrs) 178 { 179 Integer _flags = (Integer) m_attrs.get(name); 180 181 if (null != _flags) 182 { 183 return (_flags.intValue() & flags) != 0; 184 } 185 } 186 187 return false; 188 } 189 }