X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java index 00e287c..fb51811 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java @@ -6,16 +6,26 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.util.Vector; +import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import net.sourceforge.phpeclipse.IPreferenceConstants; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.phpeditor.php.PHPConstant; +import net.sourceforge.phpeclipse.phpeditor.php.PHPElement; +import net.sourceforge.phpeclipse.phpeditor.php.PHPFunction; +import net.sourceforge.phpeclipse.phpeditor.php.PHPKeyword; +import net.sourceforge.phpeclipse.phpeditor.php.PHPType; -import org.apache.xml.serialize.OutputFormat; -import org.apache.xml.serialize.Serializer; -import org.apache.xml.serialize.SerializerFactory; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.preference.IPreferenceStore; @@ -24,34 +34,27 @@ import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.w3c.dom.Text; import org.xml.sax.InputSource; import org.xml.sax.SAXException; - -import net.sourceforge.phpeclipse.IPreferenceConstants; -import net.sourceforge.phpeclipse.PHPeclipsePlugin; -import net.sourceforge.phpeclipse.phpeditor.php.PHPConstant; -import net.sourceforge.phpeclipse.phpeditor.php.PHPElement; -import net.sourceforge.phpeclipse.phpeditor.php.PHPFunction; -import net.sourceforge.phpeclipse.phpeditor.php.PHPKeyword; -import net.sourceforge.phpeclipse.phpeditor.php.PHPType; +import org.xml.sax.SAXParseException; /** * PHPSyntaxRdr reads PHP specifics from an XML file (eg. keywords) */ public class PHPSyntaxRdr { - private static final String PHPDEFAULT_FILE = "default-phpsyntax.xml"; //$NON-NLS-1$ - private static final String PHPSYNTAX_FILE = "phpsyntax.xml"; //$NON-NLS-1$ - private static final String USERSYNTAX_FILE = "usersyntax.xml"; //$NON-NLS-1$ - private static final String USERDEFAULT_FILE = "default-usersyntax.xml"; //$NON-NLS-1$ - private static final String PHPSYNTAX_TAG = "phpsyntax"; //$NON-NLS-1$ - private static final String KEYWORD_ATTR = "keyword"; //$NON-NLS-1$ - private static final String TYPE_ATTR = "type"; //$NON-NLS-1$ - private static final String CONSTANT_ATTR = "constant"; //$NON-NLS-1$ - private static final String FN_ATTR = "function"; //$NON-NLS-1$ - private static final String DESCRIPTION = "description"; //$NON-NLS-1$ - private static final String USAGE_ATTR = "usage"; //$NON-NLS-1$ - private static final String TOKENVAL_ATTR = "tokenval"; //$NON-NLS-1$ +// private static final String PHPDEFAULT_FILE = "default-syntax.xml"; //$NON-NLS-1$ + private static final String PHPSYNTAX_FILE = "syntax.xml"; //$NON-NLS-1$ +// private static final String USERSYNTAX_FILE = "usersyntax.xml"; //$NON-NLS-1$ +// private static final String USERDEFAULT_FILE = "default-usersyntax.xml"; //$NON-NLS-1$ + private static final String PHPSYNTAX_TAG = "s"; //$NON-NLS-1$ + private static final String KEYWORD_ATTR = "k"; //$NON-NLS-1$ + private static final String TYPE_ATTR = "t"; //$NON-NLS-1$ + private static final String CONSTANT_ATTR = "c"; //$NON-NLS-1$ + private static final String FN_ATTR = "f"; //$NON-NLS-1$ + private static final String USAGE_ATTR = "u"; //$NON-NLS-1$ +// private static final String TOKENVAL_ATTR = "tokenval"; //$NON-NLS-1$ private static IPreferenceStore store; private static boolean hasXMLFileBeenRead = true; @@ -59,12 +62,13 @@ public class PHPSyntaxRdr { //the suers custom file - if that file should be changed, //then all entries in this variable should be removed from //the word list, reread from the file and then reinserted. - private static Vector userdefsyntaxdata; + private static ArrayList userdefsyntaxdata; - private static Vector syntaxdata; + private static ArrayList syntaxdata; public PHPSyntaxRdr() { - syntaxdata = new Vector(); + // see getSyntaxData() + syntaxdata = null; store = PHPeclipsePlugin.getDefault().getPreferenceStore(); } @@ -85,7 +89,7 @@ public class PHPSyntaxRdr { if (store == null) store = PHPeclipsePlugin.getDefault().getPreferenceStore(); String buffer = new String(store.getString(IPreferenceConstants.PHP_USERDEF_XMLFILE)); - if (!buffer.equals("") || buffer != null) { + if (!(buffer.equals("") || buffer == null)) { readFromFile(buffer); } } catch (CoreException ce) { @@ -102,18 +106,21 @@ public class PHPSyntaxRdr { public static void readFromFile(File file) throws CoreException { InputStream stream = null; - try { - stream = new FileInputStream(file); - readFromStream(stream); - } catch (IOException e) { - throwReadException(e); - } finally { + + if (file.exists()) { try { - if (stream != null) { - stream.close(); - } + stream = new FileInputStream(file); + readFromStream(stream); } catch (IOException e) { - } + throwReadException(e); + } finally { + try { + if (stream != null) { + stream.close(); + } + } catch (IOException e) { + } + } } } public static void readFromStream(InputStream stream) throws CoreException { @@ -121,7 +128,7 @@ public class PHPSyntaxRdr { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); Document document = parser.parse(new InputSource(stream)); - //Read in the Standard PHPSyntax "stuff" + // Read in the Standard PHPSyntax "stuff" NodeList elements = document.getElementsByTagName(PHPSYNTAX_TAG); int count = elements.getLength(); @@ -136,21 +143,30 @@ public class PHPSyntaxRdr { String Type = getAttributeValue(attributes, TYPE_ATTR); String Function = getAttributeValue(attributes, FN_ATTR); String Constant = getAttributeValue(attributes, CONSTANT_ATTR); - String Description = getAttributeValue(attributes, DESCRIPTION); - String Usage = getAttributeValue(attributes, USAGE_ATTR); - String Tokenval = getAttributeValue(attributes, TOKENVAL_ATTR); + String usage = getAttributeValue(attributes, USAGE_ATTR); +// String Tokenval = getAttributeValue(attributes, TOKENVAL_ATTR); + + StringBuffer buffer = new StringBuffer(); + NodeList children = node.getChildNodes(); + for (int j = 0; j != children.getLength(); j++) { + String value = children.item(j).getNodeValue(); + if (value != null) + buffer.append(value); + } + String description = buffer.toString().trim(); if (Keyword == null && Type == null && Function == null && Constant == null) { //ignore as it is not a valid phpsyntax tag } else { if (Keyword != null) { - syntaxdata.addElement(new PHPKeyword(Keyword, Description, Tokenval)); +// syntaxdata.add(new PHPKeyword(Keyword, usage, Tokenval)); + syntaxdata.add(new PHPKeyword(Keyword, usage)); } else if (Type != null) { - syntaxdata.addElement(new PHPType(Type, Description)); + syntaxdata.add(new PHPType(Type, usage)); } else if (Function != null) { - syntaxdata.addElement(new PHPFunction(Function, Description, Usage)); + syntaxdata.add(new PHPFunction(Function, usage, description)); } else if (Constant != null) { - syntaxdata.addElement(new PHPConstant(Constant, Description)); + syntaxdata.add(new PHPConstant(Constant, null, description)); } } } @@ -158,13 +174,20 @@ public class PHPSyntaxRdr { throwReadException(e); } catch (IOException e) { throwReadException(e); + } catch (SAXParseException e) { + System.out.println("SAXParseException in line:"+e.getLineNumber()+" column:"+e.getColumnNumber()); + throwReadException(e); } catch (SAXException e) { throwReadException(e); } } - public static Vector getsyntaxdata() { - return (Vector) syntaxdata.clone(); + public static ArrayList getSyntaxData() { + if (syntaxdata == null) { + syntaxdata = new ArrayList(); + readInSyntax(); + } + return syntaxdata; } public static void replaceUserDefFile() { @@ -175,8 +198,8 @@ public class PHPSyntaxRdr { } } - public static Vector getUserDefinitions() { - return (Vector) userdefsyntaxdata.clone(); + public static ArrayList getUserSyntaxData() { + return userdefsyntaxdata; } private static File getSyntaxFile() { @@ -229,48 +252,58 @@ public class PHPSyntaxRdr { name = document.createAttribute(CONSTANT_ATTR); name.setValue(((PHPElement) bufferobj).getName()); attributes.setNamedItem(name); - Attr description = document.createAttribute(DESCRIPTION); - description.setValue(((PHPElement) bufferobj).getDescription()); + Attr description = document.createAttribute(USAGE_ATTR); + description.setValue(((PHPElement) bufferobj).getUsage()); attributes.setNamedItem(description); - if (bufferobj instanceof PHPKeyword) { - Attr tokenval = document.createAttribute(TOKENVAL_ATTR); - tokenval.setValue((new Integer(((PHPKeyword) bufferobj).gettokenval())).toString()); - attributes.setNamedItem(tokenval); - } +// if (bufferobj instanceof PHPKeyword) { +// Attr tokenval = document.createAttribute(TOKENVAL_ATTR); +// tokenval.setValue((new Integer(((PHPKeyword) bufferobj).gettokenval())).toString()); +// attributes.setNamedItem(tokenval); +// } if (bufferobj instanceof PHPFunction) { - Attr usage = document.createAttribute(USAGE_ATTR); - usage.setValue(((PHPFunction) bufferobj).getUsage()); - attributes.setNamedItem(usage); + // Attr usage = document.createAttribute(USAGE_ATTR); + Text usage = document.createTextNode(((PHPFunction) bufferobj).getDescription()); + node.appendChild(usage); } + if (bufferobj instanceof PHPConstant) { + // Attr usage = document.createAttribute(USAGE_ATTR); + Text usage = document.createTextNode(((PHPConstant) bufferobj).getDescription()); + node.appendChild(usage); + } } - OutputFormat format = new OutputFormat(); - format.setPreserveSpace(true); - try { - Serializer serializer = SerializerFactory.getSerializerFactory("xml").makeSerializer(stream, format); - serializer.asDOMSerializer().serialize(document); - } catch (UnsupportedEncodingException e) { - } catch (IOException e) { - } //$NON-NLS-1$ - // Serializer serializer = SerializerFactory.getSerializer().makeSerializer(stream, format); //$NON-NLS-1$ - } catch (ParserConfigurationException e) { - throwWriteException(e); - // } catch (IOException e) { - // throwWriteException(e); - } + Transformer transformer=TransformerFactory.newInstance().newTransformer(); + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$ + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$ + DOMSource source = new DOMSource(document); + StreamResult result = new StreamResult(stream); + + transformer.transform(source, result); + + } catch (ParserConfigurationException e) { + throwWriteException(e); + } catch (TransformerException e) { + throwWriteException(e); + } +// OutputFormat format = new OutputFormat(); +// format.setPreserveSpace(true); +// try { +// Serializer serializer = SerializerFactory.getSerializerFactory("xml").makeSerializer(stream, format); +// serializer.asDOMSerializer().serialize(document); +// } catch (UnsupportedEncodingException e) { +// } catch (IOException e) { +// } //$NON-NLS-1$ +// // Serializer serializer = SerializerFactory.getSerializer().makeSerializer(stream, format); //$NON-NLS-1$ +// } catch (ParserConfigurationException e) { +// throwWriteException(e); +// } } private static void throwReadException(Throwable t) throws CoreException { PHPeclipsePlugin.log(t); - // IStatus status= new JavaUIStatus(JavaStatusConstants.TEMPLATE_IO_EXCEPTION, - // TemplateMessages.getString("TemplateSet.error.read"), t); //$NON-NLS-1$ - // throw new JavaUIException(status); } private static void throwWriteException(Throwable t) throws CoreException { PHPeclipsePlugin.log(t); - // IStatus status= new JavaUIStatus(JavaStatusConstants.TEMPLATE_IO_EXCEPTION, - // TemplateMessages.getString("TemplateSet.error.write"), t); //$NON-NLS-1$ - // throw new JavaUIException(status); } }