Package devutilsplugin.views

Source Code of devutilsplugin.views.RegexView

package devutilsplugin.views;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.part.ViewPart;

import devutilsplugin.utils.ActionNewView;

public class RegexView extends ViewPart {
  public static final String ID = "DevUtilsPlugin.views.RegexView";
  final int pad_frame = 10;
  final int pad_ctrl = 5;

  public RegexView() {
  }
 
  void setMultiView(final IViewPart view){
    try {
      Display.getDefault().asyncExec(new Runnable() {
        @Override
        public void run() {
          getViewSite().getPage().hideView(view);
          ActionNewView anv = new ActionNewView(getViewSite().getId());
          anv.run();
        }
      });
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  @Override
  public void createPartControl(final Composite parent) {
    String secondaryId = getViewSite().getSecondaryId();
    if (secondaryId == null) {
      setMultiView(this);
      return;
    }

    FormData layoutData = null;
    FormLayout layout = new FormLayout();
    parent.setLayout(layout);
   
    final StyledText txtSource = new StyledText(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP);
    final Text txtResult = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP);
    final Label lblPattern = new Label(parent, SWT.NONE);
    final Label lblReplace = new Label(parent, SWT.NONE);
    final Text txtPattern = new Text(parent, SWT.BORDER);
    final Text txtReplace = new Text(parent, SWT.BORDER);
    final Button chkCaseInsensitive = new Button(parent, SWT.CHECK);
    final Button chkMultiline = new Button(parent, SWT.CHECK);
    final Button chkDotall = new Button(parent, SWT.CHECK);
    final Button chkUnicodeCase = new Button(parent, SWT.CHECK);
    final Button chkCanonEq = new Button(parent, SWT.CHECK);
    final Button chkUnixLines = new Button(parent, SWT.CHECK);
    final Button chkLiteral = new Button(parent, SWT.CHECK);
    final Button chkComments = new Button(parent, SWT.CHECK);
   
    Button btnMatch = new Button(parent, SWT.PUSH);
    Button btnReplace = new Button(parent, SWT.PUSH);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    chkCaseInsensitive.setLayoutData(layoutData);
    chkCaseInsensitive.setText("CASE_INSENSITIVE");
    chkCaseInsensitive.setSelection(false);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(chkCaseInsensitive, pad_ctrl);
    chkMultiline.setLayoutData(layoutData);
    chkMultiline.setText("MULTILINE");
    chkMultiline.setSelection(false);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(chkMultiline, pad_ctrl);
    chkDotall.setLayoutData(layoutData);
    chkDotall.setText("DOTALL");
    chkDotall.setSelection(false);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(chkDotall, pad_ctrl);
    chkUnicodeCase.setLayoutData(layoutData);
    chkUnicodeCase.setText("UNICODE_CASE");
    chkUnicodeCase.setSelection(false);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(chkUnicodeCase, pad_ctrl);
    layoutData.left = new FormAttachment(0, pad_frame);
    chkCanonEq.setLayoutData(layoutData);
    chkCanonEq.setText("CANON_EQ");
    chkCanonEq.setSelection(false);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(chkUnicodeCase, pad_ctrl);
    layoutData.left = new FormAttachment(chkCanonEq, pad_ctrl);
    chkUnixLines.setLayoutData(layoutData);
    chkUnixLines.setText("UNIX_LINES");
    chkUnixLines.setSelection(false);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(chkUnicodeCase, pad_ctrl);
    layoutData.left = new FormAttachment(chkUnixLines, pad_ctrl);
    chkLiteral.setLayoutData(layoutData);
    chkLiteral.setText("LITERAL");
    chkLiteral.setSelection(false);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(chkUnicodeCase, pad_ctrl);
    layoutData.left = new FormAttachment(chkLiteral, pad_ctrl);
    chkComments.setLayoutData(layoutData);
    chkComments.setText("COMMENTS");
    chkComments.setSelection(false);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(chkComments, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    layoutData.right = new FormAttachment(100, -pad_frame);
    layoutData.bottom = new FormAttachment(50, -pad_ctrl);
    txtSource.setLayoutData(layoutData);
    txtSource.setText("123456");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(txtSource, pad_frame);
    layoutData.right = new FormAttachment(100, -pad_frame);
    btnMatch.setLayoutData(layoutData);
    btnMatch.setText("match");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(txtSource, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    lblPattern.setLayoutData(layoutData);
    lblPattern.setText("Pattern");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(txtSource, pad_frame);
    layoutData.left = new FormAttachment(lblPattern, pad_ctrl);
    layoutData.right = new FormAttachment(btnMatch, -pad_ctrl);
    txtPattern.setLayoutData(layoutData);
    txtPattern.setText("([0-9]{3})([0-9]{3})");
   
    //
    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnMatch, pad_frame);
    layoutData.right = new FormAttachment(100, -pad_frame);
    btnReplace.setLayoutData(layoutData);
    btnReplace.setText("replace");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnMatch, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    lblReplace.setLayoutData(layoutData);
    lblReplace.setText("Replace");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnMatch, pad_frame);
    layoutData.left = new FormAttachment(lblReplace, pad_ctrl);
    layoutData.right = new FormAttachment(btnReplace, -pad_ctrl);
    txtReplace.setLayoutData(layoutData);
    txtReplace.setText("$1-$2");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnReplace, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    layoutData.right = new FormAttachment(100, -pad_frame);
    layoutData.bottom = new FormAttachment(100, -pad_frame);
    txtResult.setLayoutData(layoutData);
    txtResult.setText("");

    btnMatch.addSelectionListener(new SelectionListener() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        String regex = txtPattern.getText();
        String source = txtSource.getText();
       
        int flags = 0;
        if(chkCaseInsensitive.getSelection()){
          flags |= Pattern.CASE_INSENSITIVE;
        }
        if(chkMultiline.getSelection()){
          flags |= Pattern.MULTILINE;
        }
        if(chkDotall.getSelection()){
          flags |= Pattern.DOTALL;
        }
        if(chkUnicodeCase.getSelection()){
          flags |= Pattern.UNICODE_CASE;
        }
        if(chkCanonEq.getSelection()){
          flags |= Pattern.CANON_EQ;
        }
        if(chkUnixLines.getSelection()){
          flags |= Pattern.UNIX_LINES;
        }
        if(chkLiteral.getSelection()){
          flags |= Pattern.LITERAL;
        }
        if(chkComments.getSelection()){
          flags |= Pattern.COMMENTS;
        }
       
        Pattern pattern = null;
        if(flags == 0){
          pattern = Pattern.compile(regex);
        }else{
          pattern = Pattern.compile(regex, flags);
        }
       
        Matcher match = pattern.matcher(source);
       
        txtSource.setStyleRange(null);
       
        while(match.find()){
          int groupCount = match.groupCount();
          System.out.println("groupCount" + match.groupCount());
          for(int i=0; i<=groupCount; i++){
            System.out.println("start(" + i + "):" + match.start(i));
            System.out.println("end(" + i + "):" + match.end(i));
            StyleRange style = new StyleRange();
            style.start = match.start(i);
            style.length = match.end(i) - match.start(i);
            System.out.println("style.length:" + style.length);
            if(i==0){
              style.fontStyle = SWT.BOLD;
              style.foreground = new Color(parent.getDisplay(), 255, 0, 0);
            }else{
              style.fontStyle = SWT.BOLD;
              int color = 200/(groupCount+1)*(i+1);
              //if(i%2 == 0){
                style.background = new Color(parent.getDisplay(), 0, color, 0);
              //}else{
              //  style.background = new Color(parent.getDisplay(), 0, 255, 127);
              //}
            }
            txtSource.setStyleRange(style);
          }
        }
        }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
      }
    });
   
    btnReplace.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        txtResult.setText("");
        String source = txtSource.getText();
        String regex = txtPattern.getText();
        String replace = txtReplace.getText();
        int flags = 0;
        if(chkCaseInsensitive.getSelection()){
          flags |= Pattern.CASE_INSENSITIVE;
        }
        if(chkMultiline.getSelection()){
          flags |= Pattern.MULTILINE;
        }
        if(chkDotall.getSelection()){
          flags |= Pattern.DOTALL;
        }
        if(chkUnicodeCase.getSelection()){
          flags |= Pattern.UNICODE_CASE;
        }
        if(chkCanonEq.getSelection()){
          flags |= Pattern.CANON_EQ;
        }
        if(chkUnixLines.getSelection()){
          flags |= Pattern.UNIX_LINES;
        }
        if(chkLiteral.getSelection()){
          flags |= Pattern.LITERAL;
        }
        if(chkComments.getSelection()){
          flags |= Pattern.COMMENTS;
        }
       
        Pattern pattern = null;
        if(flags == 0){
          pattern = Pattern.compile(regex);
        }else{
          pattern = Pattern.compile(regex, flags);
        }
        String ret = pattern.matcher(source).replaceAll(replace);
       
//        String ret = source.replaceAll(regex, replace);
        txtResult.setText(ret);
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
      }
    });
  }

  @Override
  public void setFocus() {

  }

}
TOP

Related Classes of devutilsplugin.views.RegexView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.