diff options
Diffstat (limited to 'swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java')
-rw-r--r-- | swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java b/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java new file mode 100644 index 000000000000..a0ed06ab4399 --- /dev/null +++ b/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java @@ -0,0 +1,188 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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_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 ( 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; + } + } + } + + +} |