From: Dale A. <dal...@us...> - 2006-05-30 14:59:00
|
Update of /cvsroot/jedit/plugins/HtmlSideKick/src/sidekick/html In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv25088/src/sidekick/html Modified Files: HtmlAsset.java HtmlParser.java Added Files: HtmlActions.java Log Message: Added "go to matching tag" feature. --- NEW FILE: HtmlActions.java --- package sidekick.html; import java.awt.Point; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.buffer.JEditBuffer; import org.gjt.sp.jedit.textarea.*; import sidekick.*; import sidekick.html.parser.html.*; public class HtmlActions { /** * Moves the caret to the matching tag. */ public static void matchTag( View view, JEditTextArea textArea ) { try { SideKickParsedData data = SideKickParsedData.getParsedData( view ); int cp = textArea.getCaretPosition(); HtmlAsset asset = ( HtmlAsset ) data.getAssetAtOffset( cp ); HtmlDocument.HtmlElement element = asset.getHtmlElement(); if ( element instanceof HtmlDocument.TagBlock ) { HtmlDocument.TagBlock block = ( HtmlDocument.TagBlock ) element; HtmlDocument.Tag start_tag = block.startTag; HtmlDocument.EndTag end_tag = block.endTag; if ( cp >= start_tag.getStartPosition().getOffset() && cp <= start_tag.getEndPosition().getOffset() ) { // caret is in start tag, jump to end tag. Need to add 1 to go just past the closing >. textArea.setSelection( new Selection.Range( end_tag.getStartPosition().getOffset(), end_tag.getEndPosition().getOffset() + 1 ) ); textArea.moveCaretPosition( end_tag.getEndPosition().getOffset() + 1 ); } else if ( cp >= end_tag.getStartPosition().getOffset() && cp <= end_tag.getEndPosition().getOffset() ) { // caret is in end tag, jump to end tag textArea.setSelection( new Selection.Range( start_tag.getStartPosition().getOffset(), start_tag.getEndPosition().getOffset() + 1 ) ); textArea.moveCaretPosition( start_tag.getStartPosition().getOffset() ); } else { textArea.getToolkit().beep(); } } } catch ( Exception e ) { // ignore } } } Index: HtmlParser.java =================================================================== RCS file: /cvsroot/jedit/plugins/HtmlSideKick/src/sidekick/html/HtmlParser.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- HtmlParser.java 23 May 2006 20:03:42 -0000 1.4 +++ HtmlParser.java 30 May 2006 14:58:42 -0000 1.5 @@ -52,7 +52,7 @@ public HtmlParser() { super( "html" ); } - + public void activate( EditPane editPane ) { super.activate( editPane ); currentView = editPane.getView(); @@ -63,14 +63,14 @@ super.deactivate( editPane ); EditBus.removeFromBus( this ); } - - public void handleMessage(EBMessage msg) { + + public void handleMessage( EBMessage msg ) { if ( msg instanceof PropertiesChanged ) { parse(); } } - - + + public void parse() { if ( currentView != null ) { parse( currentView.getBuffer(), null ); @@ -85,57 +85,74 @@ String filename = buffer.getPath(); SideKickParsedData parsedData = new HtmlSideKickParsedData( filename ); DefaultMutableTreeNode root = parsedData.root; - - StringReader reader = new StringReader(buffer.getText( 0, buffer.getLength() )); + + StringReader reader = new StringReader( buffer.getText( 0, buffer.getLength() ) ); HtmlTreeBuilder builder = null; try { // parse - sidekick.html.parser.html.HtmlParser parser = new sidekick.html.parser.html.HtmlParser(reader); + sidekick.html.parser.html.HtmlParser parser = new sidekick.html.parser.html.HtmlParser( reader ); HtmlDocument document = parser.HtmlDocument(); - document.setShowBrackets(jEdit.getBooleanProperty("options.sidekick.html.showBrackets", true)); - document.setShowTagAttributes(jEdit.getBooleanProperty("options.sidekick.html.showTagAttributes", true)); - document.setShowCoreAttributes(jEdit.getBooleanProperty("options.sidekick.html.showCoreAttributes", true)); - document.setShowLangAttributes(jEdit.getBooleanProperty("options.sidekick.html.showLangAttributes", true)); - document.setShowScriptAttributes(jEdit.getBooleanProperty("options.sidekick.html.showScriptAttributes", true)); - document.setShowJspTags(jEdit.getBooleanProperty("options.sidekick.html.showJspElements", true)); - + document.setShowBrackets( jEdit.getBooleanProperty( "options.sidekick.html.showBrackets", true ) ); + document.setShowTagAttributes( jEdit.getBooleanProperty( "options.sidekick.html.showTagAttributes", true ) ); + document.setShowCoreAttributes( jEdit.getBooleanProperty( "options.sidekick.html.showCoreAttributes", true ) ); + document.setShowLangAttributes( jEdit.getBooleanProperty( "options.sidekick.html.showLangAttributes", true ) ); + document.setShowScriptAttributes( jEdit.getBooleanProperty( "options.sidekick.html.showScriptAttributes", true ) ); + document.setShowJspTags( jEdit.getBooleanProperty( "options.sidekick.html.showJspElements", true ) ); + // collect and clean document.accept( new HtmlCollector() ); - document.accept( new HtmlScrubber( HtmlScrubber.DEFAULT_OPTIONS | HtmlScrubber.TRIM_SPACES) ); - + document.accept( new HtmlScrubber( HtmlScrubber.DEFAULT_OPTIONS | HtmlScrubber.TRIM_SPACES ) ); + // make a tree - builder = new HtmlTreeBuilder(root); - builder.setShowAll(jEdit.getBooleanProperty("options.sidekick.html.showAllElements", true)); - builder.setShowAll(showAll); + builder = new HtmlTreeBuilder( root ); + builder.setShowAll( jEdit.getBooleanProperty( "options.sidekick.html.showAllElements", true ) ); + builder.setShowAll( showAll ); document.accept( builder ); - - /* need to convert the HtmlDocument.HtmlElements that are currently the + + /* need to convert the HtmlDocument.HtmlElements that are currently the user objects in the tree nodes to SideKick Assets */ - convert(buffer, root); - - } catch ( Exception e ) { + convert( buffer, root ); + + } + catch ( Exception e ) { e.printStackTrace(); - } finally { + } + finally { reader.close(); } return parsedData; } - - private void convert(Buffer buffer, DefaultMutableTreeNode node) { + + private void convert( Buffer buffer, DefaultMutableTreeNode node ) { // convert the children of the node Enumeration children = node.children(); - while(children.hasMoreElements()) { - convert(buffer, (DefaultMutableTreeNode)children.nextElement()); + while ( children.hasMoreElements() ) { + convert( buffer, ( DefaultMutableTreeNode ) children.nextElement() ); } - + // convert the node itself - if (!(node.getUserObject() instanceof IAsset)) { - HtmlDocument.HtmlElement userObject = (HtmlDocument.HtmlElement)node.getUserObject(); - HtmlAsset asset = new HtmlAsset(userObject.toString()); - asset.setLongString(userObject.toLongString()); - asset.setStart(createStartPosition(buffer, userObject)); - asset.setEnd(createEndPosition(buffer, userObject)); - node.setUserObject(asset); + if ( !( node.getUserObject() instanceof IAsset ) ) { + HtmlDocument.HtmlElement userObject = ( HtmlDocument.HtmlElement ) node.getUserObject(); + Position start_position = null; + Position end_position = null; + if (userObject instanceof HtmlDocument.TagBlock) { + HtmlDocument.TagBlock block = (HtmlDocument.TagBlock)userObject; + HtmlDocument.Tag start_tag = block.startTag; + HtmlDocument.EndTag end_tag = block.endTag; + start_position = createStartPosition(buffer, start_tag); + createEndPosition(buffer, start_tag); + createStartPosition(buffer, end_tag); + end_position = createEndPosition(buffer, end_tag); + } + else { + start_position = createStartPosition(buffer, userObject); + end_position = createEndPosition(buffer, userObject); + } + HtmlAsset asset = new HtmlAsset( userObject ); + asset.setLongString( userObject.toLongString() ); + asset.setStart( start_position ); + asset.setEnd( end_position ); + node.setUserObject( asset ); } } @@ -147,15 +164,17 @@ * the Buffer, need to use getOffsetOfVirtualColumn to account for soft and * hard tab handling. */ - private Position createStartPosition( Buffer buffer, HtmlDocument.HtmlElement child ) { + public static Position createStartPosition( Buffer buffer, HtmlDocument.HtmlElement child ) { final int line_offset = buffer.getLineStartOffset( Math.max( child.getStartLocation().line - 1, 0 ) ); final int col_offset = buffer.getOffsetOfVirtualColumn( Math.max( child.getStartLocation().line - 1, 0 ), Math.max( child.getStartLocation().column - 1, 0 ), null ); - return new Position() { - public int getOffset() { - return line_offset + col_offset; - } - }; + Position p = new Position() { + public int getOffset() { + return line_offset + col_offset; + } + }; + child.setStartPosition( p ); + return p; } @@ -166,16 +185,17 @@ * the Buffer, need to use getOffsetOfVirtualColumn to account for soft and * hard tab handling. */ - private Position createEndPosition( Buffer buffer, HtmlDocument.HtmlElement child ) { + public static Position createEndPosition( Buffer buffer, HtmlDocument.HtmlElement child ) { final int line_offset = buffer.getLineStartOffset( Math.max( child.getEndLocation().line - 1, 0 ) ); final int col_offset = buffer.getOffsetOfVirtualColumn( Math.max( child.getEndLocation().line - 1, 0 ), Math.max( child.getEndLocation().column - 1, 0 ), null ); - return new Position() { - public int getOffset() { - return line_offset + col_offset; - } - }; + Position p = new Position() { + public int getOffset() { + return line_offset + col_offset; + } + }; + child.setEndPosition( p ); + return p; } } - Index: HtmlAsset.java =================================================================== RCS file: /cvsroot/jedit/plugins/HtmlSideKick/src/sidekick/html/HtmlAsset.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- HtmlAsset.java 23 May 2006 20:03:42 -0000 1.2 +++ HtmlAsset.java 30 May 2006 14:58:42 -0000 1.3 @@ -1,17 +1,25 @@ package sidekick.html; +import sidekick.html.parser.html.HtmlDocument; import sidekick.Asset; import javax.swing.Icon; public class HtmlAsset extends Asset { + private HtmlDocument.HtmlElement element = null; private String name = ""; private String longString = null; - public HtmlAsset(String name) { - super(name); - this.name = name; + public HtmlAsset(HtmlDocument.HtmlElement element) { + super(element.toString()); + this.element = element; + this.name = element.toString(); + } + + public HtmlDocument.HtmlElement getHtmlElement() { + return element; } + public Icon getIcon() { return null; } public String getShortString() { return name; } @@ -23,6 +31,4 @@ public void setLongString(String s) { longString = s; } - - } |