package net.sourceforge.phpeclipse.wiki.actions.mediawiki.connect; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; import org.apache.crimson.tree.ElementNode; import org.eclipse.core.runtime.CoreException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; /** * XMLReader reads Wikipedia XML export pages */ public class XMLReader { private static final String TITLE_TAG = "title"; //$NON-NLS-1$ private static final String TIMESTAMP_TAG = "timestamp"; //$NON-NLS-1$ private static final String TEXT_TAG = "text"; //$NON-NLS-1$ private static final String PAGE_TAG = "page"; //$NON-NLS-1$ public XMLReader() { } // public static void readInSyntax() { // try { // hasXMLFileBeenRead = true; // /* // * Attempt to read the syntax file from the metadata if this does not work, create metadata from default // */ // File syntaxFile = getSyntaxFile(); // if (syntaxFile.exists()) { // readFromFile(syntaxFile); // } else { // readFromStream(PHPSyntaxRdr.class.getResourceAsStream(PHPSYNTAX_FILE)); // saveToFile(syntaxFile); // } // // } catch (CoreException ce) { // ce.printStackTrace(); // } // } public static void readFromFile(String filename) { try { readFromFile(new File(filename)); } catch (CoreException e) { } } public static void readFromFile(File file) throws CoreException { InputStream stream = null; if (file.exists()) { try { stream = new FileInputStream(file); readFromStream(new InputStreamReader(stream)); } catch (IOException e) { throwReadException(e); } finally { try { if (stream != null) { stream.close(); } } catch (IOException e) { } } } } private static void traverse(String eleName, Node cNode, Parsed parsed) { switch (cNode.getNodeType()) { case Node.DOCUMENT_NODE: // System.out.println("DOCUMENT_NODE " + cNode.getNodeName()); processChildren(eleName, cNode.getChildNodes(), parsed); break; case Node.ELEMENT_NODE: eleName = cNode.getNodeName(); // System.out.println("ELEMENT_NODE " + eleName); // NamedNodeMap attributeMap = cNode.getAttributes(); // int numAttrs = attributeMap.getLength(); // for (int i = 0; i < attributeMap.getLength(); i++) { // Attr attribute = (Attr) attributeMap.item(i); // String attrName = attribute.getNodeName(); // String attrValue = attribute.getNodeValue(); // } processChildren(eleName, cNode.getChildNodes(), parsed); break; case Node.CDATA_SECTION_NODE: case Node.TEXT_NODE: if (eleName.equals(TITLE_TAG)) { // element name from the corresp tag parsed.title = cNode.getNodeValue(); } else if (eleName.equals(TIMESTAMP_TAG)) { parsed.timestamp = cNode.getNodeValue(); } else if (eleName.equals(TEXT_TAG)) { parsed.body = cNode.getNodeValue(); } break; } } private static void processChildren(String eleName, NodeList nList, Parsed parsed) { if (nList.getLength() != 0) { for (int i = 0; i < nList.getLength(); i++) { traverse(eleName, nList.item(i), parsed); if (eleName.equals(TEXT_TAG)) { break; } } } } /** * Read the first timestamp found in the Wikipedia xml stream * * @param stream * @return * @throws Exception */ public static String getTimestamp(InputStream stream) throws Exception { // Create a factory object for creating DOM parsers DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // Now use the factory to create a DOM parser (a.k.a. a DocumentBuilder) DocumentBuilder parser = factory.newDocumentBuilder(); // Parse the file and build a Document tree to represent its content Document document = parser.parse(stream); // Ask the document for a list of all tags it contains NodeList timestamps = document.getElementsByTagName(TIMESTAMP_TAG); // Loop through those elements one at a time, and extract the // content of their tags. int numPages = timestamps.getLength(); for (int i = 0; i < numPages; i++) { ElementNode page = (ElementNode) timestamps.item(i); // A return page.getChildNodes().item(0).getNodeValue(); } return null; } /** * Get the timestamp as java Date Format String * * @param stream * @return * @throws Exception */ public static String getDateTimestamp(InputStream stream) throws Exception { String timestamp = getTimestamp(stream); if (timestamp!=null) { StringBuffer buffer = new StringBuffer(); // 2004-11-22T12:41:10Z buffer.append(timestamp.substring(0,4)); //year buffer.append(timestamp.substring(5,7)); //month buffer.append(timestamp.substring(8,10)); //day buffer.append(timestamp.substring(11,13));//hour buffer.append(timestamp.substring(14,16));//minute buffer.append(timestamp.substring(17,19));//second return buffer.toString(); } return null; } /** * Reads the wikipedia xml data from the given stream * * @param stream * @return * @throws CoreException */ public static ArrayList readFromStream(Reader stream) throws CoreException { ArrayList list = new ArrayList(); try { // Create a factory object for creating DOM parsers DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // Now use the factory to create a DOM parser (a.k.a. a DocumentBuilder) DocumentBuilder parser = factory.newDocumentBuilder(); // Parse the file and build a Document tree to represent its content Document document = parser.parse(new InputSource(stream)); // Ask the document for a list of all tags it contains NodeList pages = document.getElementsByTagName(PAGE_TAG); // Loop through those elements one at a time int numPages = pages.getLength(); for (int i = 0; i < numPages; i++) { ElementNode page = (ElementNode) pages.item(i); // A Parsed parsed = new Parsed(); // set raw xml data: parsed.xmlData = page.toString(); traverse("", page, parsed); list.add(parsed); } return list; } catch (ParserConfigurationException e) { 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); } return list; } private static String getAttributeValue(NamedNodeMap attributes, String name) { Node node = attributes.getNamedItem(name); return node == null ? null : node.getNodeValue(); } // public static void saveToFile(File file) throws CoreException { // OutputStream stream = null; // try { // stream = new FileOutputStream(file); // saveToStream(stream); // } catch (IOException e) { // throwWriteException(e); // } finally { // try { // if (stream != null) // stream.close(); // } catch (IOException e) { // } // } // } // public static void saveToStream(OutputStream stream) throws CoreException { // try { // DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // DocumentBuilder builder = factory.newDocumentBuilder(); // Document document = builder.newDocument(); // Node root = document.createElement("PHPStandardSyntax"); // $NON-NLS-1$ //$NON-NLS-1$ // document.appendChild(root); // for (int i = 0; i != syntaxdata.size(); i++) { // Object bufferobj = (Object) syntaxdata.get(i); // Attr name = null; // Node node = document.createElement(REVISION_TAG); // $NON-NLS-1$ //$NON-NLS-1$ // root.appendChild(node); // NamedNodeMap attributes = node.getAttributes(); // // if (bufferobj instanceof PHPType) // // name = document.createAttribute(TYPE_ATTR); // // if (bufferobj instanceof PHPKeyword) // // name = document.createAttribute(KEYWORD_ATTR); // // if (bufferobj instanceof PHPFunction) // // name = document.createAttribute(FN_ATTR); // // if (bufferobj instanceof PHPConstant) // // name = document.createAttribute(CONSTANT_ATTR); // // name.setValue(((PHPElement) bufferobj).getName()); // // attributes.setNamedItem(name); // // 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 PHPFunction) { // // // 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); // // } // } // 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); // } // // } private static void throwReadException(Throwable t) throws CoreException { WikiEditorPlugin.log(t); } private static void throwWriteException(Throwable t) throws CoreException { WikiEditorPlugin.log(t); } public static void main(String[] args) { try { String test = "\r\n" + "\r\n" + " \r\n" + " Mechanisches Fernsehen\r\n" + " \r\n" + " 2004-11-22T12:41:10Z\r\n" + " Electrocat\r\n" + " Als \'\'\'mechanisches Fernsehen\'\'\' bezeichnet man [[Fernsehen]], bei dem die Bildzerlegung und -zusammensetzung im Gegensatz zum [[elektronisches Fernsehen|elektronischen Fernsehen]] mechanisch erfolgt. Die eigentliche Übertragung findet natürlich auf elektrischem Wege statt.\r\n" + "\r\n" + "Das mechanische Fernsehen war die erste Form des Fernsehens. Die erste brauchbare Realisierung erfolgte mit Hilfe der nach ihrem Erfinder [[Paul Nipkow]] benannten [[Nipkow-Scheibe]]. Hierbei ist insbesondere die Pionierarbeit des ungarischen Ingenieurs [[D. von Mihaly]] und des schottischen Erfinders [[John Logie Baird]] zu erwähnen. [[D. von Mihaly]] entwickelte ebenfalls ein vollkommen anderes Verfahren, bei dem ein Spiegel zwischen einem Hufeisenmagneten schnell oszillierte. In einem verbesserten Verfahren wurde ein Spiegel auf Drahtsaiten befestigt, welche nach Stromdurchleitung in eine schnelle Schwingung versetzt wurden. Ein wieder anderes Verfahren entwickelte [[Dr. Carolus]] bei [[Telefunken]], wo mit schnell rotierenden Spiegeln gearbeitet wurde. Durch Carolus wurden auch beide Systeme miteinander kombiniert (Spiegelrad für horizontale Abtastung, oszillierende Spiegel für vertikale Abtastung. \r\n" + "\r\n" + "Dennoch sollte beim mechanischen Fernsehen insbesondere die Nipkow-Scheibe Verwendung finden, welche auf der Senderseite bis in die 1940er Jahre zur Bildzerlegung von Filmen Verwendung fand. \r\n" + "\r\n" + "Auch heute ist das mechanische Fernsehen nicht vollkommen bedeutungslos. Insbesondere Spiegelsysteme finden heute wieder Verwendung beim Bau von [[Videoprojektoren]]. \r\n" + "\r\n" + "===Hinweis:===\r\n" + "Die Begriffsbildung "Mechanisches Fernsehen" beruht auf der laienhaften Anschauung, die sichtbar drehende Nipkow-Lochscheibe als wesentlichstes Funktionselement oder anders ausgedrückt, den Vorgang der Bildpunkt-Zerlegung als Hauptteil des Fernseh-Gesamtsystems wahrzunehmen\r\n" + "\r\n" + "Demgegenüber besteht die nipkowsche Vorrichtung größtenteils aus elektrisch betriebenen Bauteilen, von denen mindestens eines - die [[Selen]]zelle - bereits ein elektronisches Bauelement darstellt. Desweiteren erfolgt die Übertragung vom Sender zum Empfänger elektrisch. <br />\r\n" + "\r\n" + "Auf der Empfänger-Seite wird bei der nipkowschen Ausführung raffinierterweise ein [[Polarisation|polarisierter]] Lichstrahl von dem Magnetfeld einer Spule in Abhängigkeit von dem Signal der Sender-Selenzelle soweit gedreht und durch nachfolgende Linsen gefiltert, dass für das Auge der gleiche Helligkeits-Eindruck hervorgerufen wird, wie er auf der Sender-Seite besteht.<br />\r\n" + "Dieser polarisierte Lichtstrahl wurde mit Hilfe entweder eines speziellen optischen Glases oder einer mit Schwefelkohlenstoff gefüllten Röhre erzeugt(sog. "Glimmlampe") und ersetzte damals die noch nicht erfundene Braunsche Elektronenstrahlröhre. \r\n" + "\r\n" + "Damit wird sichtbar, dass der Begriff des "mechanischen Fernsehens" weitgehend irreführend ist. Nipkow selbst nannte seinen Apparat in der Patentschrift etwas treffender ein "Elektrisches Teleskop". \r\n" + "Allenfalls korrekt wäre noch die Begriffsbildung "mechanische Bildzerlegung". \r\n" + "\r\n" + "== Weblinks ==\r\n" + "*http://www.kefk.net/Research/Funk/HA-Funk/ha_2-3.html\r\n" + "\r\n" + "[[Kategorie:Fernsehtechnik]]\r\n" + " \r\n" + " \r\n" + "\r\n" + ""; String test2 = "\r\n" + "\r\n" + " \r\n" + " Anrechenbare Kosten\r\n" + " \r\n" + " 2004-09-22T17:18:23Z\r\n" + " Fenice\r\n" + " cat\r\n" + "\r\n" + " Die \'\'\'anrechenbaren Kosten\'\'\' sind eines der Regelkriterien bei der Ermittlung des [[Honorar]]s von Architekten und Ingenieuren nach der [[HOAI]]. Sie werden aus einem fachspezifischen Kostenanteil auf Basis der Kostenermittlungen nach [[DIN 276]] errechnet und können daher innerhalb eines Projektes je nach [[Leistungsphasen|Leistungsphase]] unterschiedlich hoch sein.\r\n" + "\r\n" + "[[Kategorie:Rechnungswesen]]\r\n" + " \r\n" + " \r\n" + " \r\n" + " Synästhesie\r\n" + " \r\n" + " 2004-12-01T12:19:53Z\r\n" + "\r\n" + " 145.253.155.135\r\n" + " vorübergehender statt verübergehender\r\n" + " \'\'\'Synästhesie\'\'\' (griech. \'\'Mitempfindung\'\') ist die Kopplung zweier physikalisch getrennter Domänen der [[Wahrnehmung]] , etwa [[Farbe]] und [[Temperatur]] (\'\'"warmes Grün"\'\'), im engeren Sinne die [[Wahrnehmung]] von Sinnesreizen eines [[Sinnesorgan]]s als die eines anderen. Menschen, bei denen derart verknüpfte Wahrnehmungen auftreten, werden als [[Synästhetiker]] bezeichnet. Synästhesie kann auch als vorübergehender Effekt nach der Einnahme von [[Halluzinogen]]en auftreten.\r\n" + "\r\n" + "Synästhetiker haben also häufig zu einem Sinnesreiz zwei oder mehrere [[Wahrnehmung]]en. Sie können beispielsweise Geräusche nicht nur hören, sondern auch [[Form]]en und Farben dazu sehen. Das Geräusch bekommt zusätzlich zu den üblichen Eigenschaften diese weiteren Eigenschaften. Das Bild, das dabei entsteht, überlagert sich jedoch nur bei den wenigsten Synästhetikern mit dem Gesehenen, sondern wird vor einem "inneren Auge" sichtbar. Diese Synästhesie ist als \'\'Farbenhören\'\' bekannt.\r\n" + "\r\n" + "Viel häufiger als das Farbenhören ist jedoch das Sehen von farbigen Buchstaben, Wörtern oder Zahlen, unabhängig von der eigentlichen Schriftfarbe. \r\n" + "\r\n" + "Synästhesien müssen nicht notwendigerweise mit den 5 Hauptsinnen zu tun haben. Bei Gefühlssynästhetikern erzeugen beispielsweise Sinnesreize Gefühle, oder umgekehrt. Auch abstrakte Begriffe wie eine Jahreszahl oder der Charakter einer Person können bei einem Synästhetiker als Form, als Farbe oder sonstige Sinnesqualität wahrgenommen werden.\r\n" + "\r\n" + "Synästhesien sind z. B.\r\n" + "*individuell verschieden\r\n" + "*nicht umkehrbar (z. B. ruft ein bestimmtes Grün eine Fünf hervor, aber nicht umgekehrt)\r\n" + "*identitätsstiftend\r\n" + "*für den Betroffenen "schon immer da gewesen", d. h., so lange dieser sich erinnern kann\r\n" + "*unwillkürlich, d. h., ohne Willensanstrengung des Betroffenen\r\n" + "*ohne Einfluss von Alkohol, Drogen oder Medikamenten entstanden\r\n" + "*nicht an eine bestimmte Situation, Erinnerung oder einen Eindruck gebunden\r\n" + "\r\n" + "Alkohol verstärkt Synästhesien, Amphetamine verringern sie.\r\n" + "\r\n" + "\r\n" + "Über die Häufigkeit synästhetischer Wahrnehmung gibt es widersprüchliche Angaben. In der Fachliteratur wird eine Häufigkeit zwischen 1:2000 und 1:500 bei Erwachsenen genannt. 95% der Betroffenen sind Frauen. Viele Synästhetiker sind sich der Besonderheit ihrer Wahrnehmung selbst nicht bewusst und werden erst durch Medienberichte darauf aufmerksam.\r\n" + "\r\n" + "<!-- auskommentiert wegen siehe Diskussion\r\n" + "Synästhesie tritt teilweise auch zusammen mit anderen Eigenschaften, wie beispielsweise starke Empfindsamkeit, ein überdurchschnittliches Gedächtnis und Linkshändigkeit auf.\r\n" + "-->\r\n" + "\r\n" + "Synästhesie ist im deutschsprachigen Raum derzeit ein populärer Forschungsgegenstand, da sie Rückschlüsse auf die Funktionsweise der menschlichen Wahrnehmung zulässt. Auch das Medienecho hat in den letzten Jahren stark zugenommen.\r\n" + "\r\n" + "== Siehe auch ==\r\n" + "* [[Synästhetiker]]\r\n" + "* [[Musikpsychologie]]\r\n" + "* [[Geruchsorgel]]\r\n" + "\r\n" + "== Weblinks ==\r\n" + "* [http://www.mhh-synaesthesie.de/synaesthesie.htm Synästhesieforschung an der medizinischen Hochschule in Hannover]\r\n" + "* [http://www.ch-forschung.ch/alt/fs/0110/S1-1_synest.rtf Synästhesieforschung am neuropsychologischen Institut des Unispitals Zürich]\r\n" + "* [http://www.synaesthesieforum.de Deutschsprachiges Forum von und für Synästhetiker mit ausführlicher Linksammlung zum Thema]\r\n" + "\r\n" + "[[Kategorie:Rhetorischer Begriff]]\r\n" + "[[en:Synaesthesia]] [[es:Sinestesia]] [[sv:Synestesi]] [[tr:Sinestezi]]\r\n" + " \r\n" + " \r\n" + ""; StringReader st = new StringReader(test); System.out.println(readFromStream(st)); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }