X-Git-Url: http://git.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 fc456a4..b1a1371 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java @@ -7,33 +7,39 @@ 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.core.runtime.IStatus; import org.eclipse.jface.preference.IPreferenceStore; import org.w3c.dom.Attr; 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) @@ -44,14 +50,13 @@ public class PHPSyntaxRdr { 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"; - private static final String KEYWORD_ATTR = "keyword"; - private static final String TYPE_ATTR = "type"; - private static final String CONSTANT_ATTR = "constant"; - private static final String FN_ATTR = "function"; - private static final String DESCRIPTION = "description"; - private static final String USAGE_ATTR = "usage"; - private static final String TOKENVAL_ATTR = "tokenval"; + 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 USAGE_ATTR = "usage"; //$NON-NLS-1$ + private static final String TOKENVAL_ATTR = "tokenval"; //$NON-NLS-1$ private static IPreferenceStore store; private static boolean hasXMLFileBeenRead = true; @@ -59,12 +64,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 +91,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,17 +108,20 @@ 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) { + } } } } @@ -120,8 +129,9 @@ public class PHPSyntaxRdr { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); + org.apache.crimson.parser.Parser2 pp; 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 +146,29 @@ 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 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)); } 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, usage)); } } } @@ -158,13 +176,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 +200,8 @@ public class PHPSyntaxRdr { } } - public static Vector getUserDefinitions() { - return (Vector) userdefsyntaxdata.clone(); + public static ArrayList getUserSyntaxData() { + return userdefsyntaxdata; } private static File getSyntaxFile() { @@ -229,8 +254,8 @@ 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); @@ -238,39 +263,46 @@ public class PHPSyntaxRdr { 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); + // usage.setValue(((PHPFunction) bufferobj).getUsage()); + // attributes.setNamedItem(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); } }