/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package com.sun.star.wiki; import javax.swing.text.html.*; import javax.swing.text.MutableAttributeSet; public class EditPageParser extends HTMLEditorKit.ParserCallback { protected String m_sEditTime = ""; protected String m_sEditToken = ""; protected String m_sLoginToken = ""; protected String m_sMainURL = ""; private int m_nWikiArticleHash = 0; private boolean m_bHTMLStartFound = false; private boolean m_bInHead = false; protected int m_nWikiArticleStart = -1; protected int m_nWikiArticleEnd = -1; protected int m_nHTMLArticleStart = -1; protected int m_nHTMLArticleEnd = -1; protected int m_nNoArticleInd = -1; protected int m_nErrorInd = -1; /** Creates a new instance of WikiHTMLParser */ public EditPageParser() { } public void handleComment( char[] data,int pos ) { // insert code to handle comments } public void handleEndTag( HTML.Tag t,int pos ) { if ( t == HTML.Tag.TEXTAREA ) { m_nWikiArticleEnd = pos; } else if ( t == HTML.Tag.DIV ) { if ( m_bHTMLStartFound ) { m_nHTMLArticleStart = pos+6; m_bHTMLStartFound = false; } } else if ( t == HTML.Tag.HEAD ) { m_bInHead = false; } } public void handleError( String errorMsg,int pos ) { //System.out.println( errorMsg ); } public void handleSimpleTag( HTML.Tag t, MutableAttributeSet a,int pos ) { // insert code to handle simple tags if ( t == HTML.Tag.INPUT ) { String sName = ( String ) a.getAttribute( HTML.Attribute.NAME ); if ( sName != null ) { if ( sName.equalsIgnoreCase( "wpEdittime" ) ) { this.m_sEditTime = ( String ) a.getAttribute( HTML.Attribute.VALUE ); } else if ( sName.equalsIgnoreCase( "wpEditToken" ) ) { this.m_sEditToken = ( String ) a.getAttribute( HTML.Attribute.VALUE ); } else if ( sName.equalsIgnoreCase( "wpLoginToken" ) ) { this.m_sLoginToken = ( String ) a.getAttribute( HTML.Attribute.VALUE ); } } } else if ( t == HTML.Tag.LINK ) { if ( m_bInHead ) { String sName = ( String ) a.getAttribute( HTML.Attribute.HREF ); if ( sName != null ) { int nIndexStart = sName.indexOf( "index.php" ); // get the main URL from the first header-link with index.php // the link with "action=edit" inside is preferable if ( nIndexStart>= 0 && ( m_sMainURL.length() == 0 || sName.indexOf( "action=edit" ) >= 0 ) ) { m_sMainURL = sName.substring( 0, nIndexStart ); } } } } } public void handleStartTag( HTML.Tag t, MutableAttributeSet a,int pos ) { // insert code to handle starting tags String sName = ""; String sId = ""; String sClass = ""; if ( t == HTML.Tag.HEAD ) { m_bInHead = true; } if ( t == HTML.Tag.TEXTAREA ) { sName = ( String ) a.getAttribute( HTML.Attribute.NAME ); if ( sName != null ) { if ( sName.equalsIgnoreCase( "wpTextbox1" ) ) { m_nWikiArticleHash = t.hashCode(); m_nWikiArticleStart = pos; } } } else if ( t == HTML.Tag.DIV ) { sId = ( String ) a.getAttribute( HTML.Attribute.ID ); sClass = ( String ) a.getAttribute( HTML.Attribute.CLASS ); if ( sId != null ) { if ( sId.equalsIgnoreCase( "contentSub" ) ) { m_bHTMLStartFound = true; } } if ( sClass != null ) { if ( sClass.equalsIgnoreCase( "printfooter" ) ) { m_nHTMLArticleEnd = pos; } else if ( sClass.equalsIgnoreCase( "noarticletext" ) ) { m_nNoArticleInd = pos; } else if ( sClass.equalsIgnoreCase( "errorbox" ) ) { m_nErrorInd = pos; } } } else if ( t == HTML.Tag.P ) { sClass = ( String ) a.getAttribute( HTML.Attribute.CLASS ); if ( sClass != null && sClass.equalsIgnoreCase( "error" ) ) { m_nErrorInd = pos; } } } }