Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2003-2007 the original author or authors.
   *
   * Licensed 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 org.codehaus.groovy.antlr;
 import java.awt.*;
 import java.io.*;
 
 import javax.swing.*;
 
 import  antlr.*;

Author(s):
Santhosh Kumar T
Version:
1.0
 
 
 public class LexerFrame extends JFrame implements ActionListener{
     JSplitPane jSplitPane1 = new JSplitPane();
     JScrollPane jScrollPane1 = new JScrollPane();
     JScrollPane jScrollPane2 = new JScrollPane();
     JButton jbutton = new JButton("open");
     JPanel mainPanel = new JPanel(new BorderLayout());
     JTextArea scriptPane = new JTextArea();
     Border border1;
     Border border2;
 
     Class lexerClass;
 
     public LexerFrame(Class lexerClassClass tokenTypesClass){
         super("Token Steam Viewer");
         this. = lexerClass;
         try{
             jbInit();
             setSize(500, 500);
             listTokens(tokenTypesClass);
 
             final JPopupMenu popup = new JPopupMenu();
             popup.add();
 
             .setSize(30,30);
             .addMouseListener(new MouseAdapter(){
                 public void mouseReleased(MouseEvent e) {
                     //if(e.isPopupTrigger())
                         popup.show(e.getX(), e.getY());
                 }
             });
             setDefaultCloseOperation(.);
         } catch(Exception e){
             e.printStackTrace();
         }
     }
 
     Hashtable tokens = new Hashtable();
 
     private void listTokens(Class tokenTypesthrows Exception{
         Field field[] = tokenTypes.getDeclaredFields();
         for(int i = 0; i<field.lengthi++)
             .put(field[i].get(null), field[i].getName());
     }
 
     public void actionPerformed(ActionEvent ae){
         Token token = (Token) ((JComponentae.getSource()).getClientProperty("token");
         if(token.getType()==Token.EOF_TYPE){
             .select(0, 0);
             return;
         }
         try{
             int start = .getLineStartOffset(token.getLine()-1)+token.getColumn()-1;
             .select(startstart+token.getText().length());
             .requestFocus();
         } catch(BadLocationException ex){
             // IGNORE
         }
     }
 
     private Action loadFileAction = new AbstractAction("Open File..."){
         public void actionPerformed(ActionEvent ae){
             JFileChooser jfc = new JFileChooser();
             int response = jfc.showOpenDialog(LexerFrame.this);
            if(response!=.)
                return;
            try{
                scanScript(jfc.getSelectedFile());
            } catch(Exception ex){
                ex.printStackTrace();
            }
        }
    };
    private void scanScript(File filethrows Exception{
        .read(new FileReader(file), null);
        // create lexer
        Constructor constructor = .getConstructor(new Class[]{InputStream.class});
        CharScanner lexer = (CharScanner) constructor.newInstance(new Object[]{new FileInputStream(file)});
        .setEditable(true);
        .setText("");
        int line = 1;
        ButtonGroup bg = new ButtonGroup();
        Token token = null;
        while(true){
            token = lexer.nextToken();
            JToggleButton tokenButton = new JToggleButton((String.get(Integer.valueOf(token.getType())));
            bg.add(tokenButton);
            tokenButton.addActionListener(this);
            tokenButton.setToolTipText(token.getText());
            tokenButton.putClientProperty("token"token);
            tokenButton.setMargin(new Insets(0, 1, 0, 1));
            tokenButton.setFocusPainted(false);
            if(token.getLine()>line){
                .getDocument().insertString(.getDocument().getLength(), "\n"null);
                line = token.getLine();
            }
            insertComponent(tokenButton);
            if(token.getType()==Token.EOF_TYPE)
                break;
        }
        .setEditable(false);
        .setCaretPosition(0);
    }
    private void insertComponent(JComponent comp){
        try{
            .getDocument().insertString(.getDocument().getLength(), " "null);
        } catch(BadLocationException ex1){
            // Ignore
        }
        try{
        } catch(Exception ex){
            .setCaretPosition(0);
        }
        .insertComponent(comp);
    }
    private void jbInit() throws Exception{
         = BorderFactory.createEmptyBorder();
         = BorderFactory.createEmptyBorder();
        .setEditable(false);
        .setText("");
        .setFont(new java.awt.Font("DialogInput", 0, 12));
        .setEditable(false);
        .setMargin(new Insets(5, 5, 5, 5));
        .setText("");
        .setMinimumSize(new Dimension(800,600));
        this.getContentPane().add();
        .getViewport().add(null);
        .getViewport().add(null);
        .setColumnHeaderView(new JLabel(" Token Stream:"));
        .setColumnHeaderView(new JLabel(" Input Script:"));
        .setResizeWeight(0.5);
    }
    public static void main(String[] argsthrows Exception{
        try{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch(Exception ignore){
            // Ignore
        }
        new LexerFrame(GroovyLexer.classGroovyTokenTypes.class).setVisible(true);
    }
    public boolean getScrollableTracksViewportWidth(){
        return(getSize().<getParent().getSize().);
    }
    public void setSize(Dimension d){
        if(d.width<getParent().getSize().){
            d.width = getParent().getSize().;
        }
        super.setSize(d);
    }