blob: 55a246cb6956a662e5697d25ead8d80ce12cb0ff [file] [log] [blame]
/**************************************************************
*
* 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;
}
}
}
}