Package org.w3c.tools.offline.command

Source Code of org.w3c.tools.offline.command.CommandLine

// CommandLine.java
// $Id: CommandLine.java,v 1.7 2002/02/04 17:28:12 cbournez Exp $
// (c) COPYRIGHT MIT and INRIA, 2002.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.tools.offline.command;

import java.io.StringReader;
import java.io.StreamTokenizer;
import java.io.IOException;
import java.util.Vector;


import org.apache.oro.text.regex.Perl5Matcher;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.MalformedPatternException;

/**
* <p>The jigshell command line class.
*/
public class CommandLine {

  /** static members: jigshell commands syntax */
  public static String WHERE = "where";
  public static String LIST = "list";
  public static String GO = "go" ;
  public static String REC = "r" ;
  public static String ATTR = "a" ;
  public static String UP = ".." ;

  public static String NO_OPT = "none" ;

  /* private class members */
  private String cmd = null ;
  private String action = null ;
  private String target = null ;
  private String option = NO_OPT ;

  /**
   * a Vector to handle elements of a parsed command
   */
  protected Vector parsedCmd ;

  /* protected static members */
  protected static Perl5Matcher pmatcher = new Perl5Matcher() ;
  protected static Perl5Compiler pcompiler = new Perl5Compiler() ;
  protected static Pattern srPattern  ;


   /**
  *  Initialize a CommandLine instance. 
  * @param s the command line.
  */
  public CommandLine(String s){
    try {
      cmd = s ;
      parsedCmd = new Vector ();
      srPattern = pcompiler.compile(
      "^s/[\\w|=|\\*|\\-|\\\\/]+?/[\\w|\\-|\\\\/]+/$",
            Perl5Compiler.DEFAULT_MASK);
    }
    catch (org.apache.oro.text.regex.MalformedPatternException ex){
      ex.printStackTrace();
    }
  }


   /**
  * Parse a CommandLine instance. 
  */
  public void parse() throws CommandParseException {

    StringReader r = new StringReader(cmd) ;
    StreamTokenizer st = new StreamTokenizer(r);

    st.ordinaryChar('.');
  //equivalent to (ascii codes):  st.wordChars(33,44)
    st.wordChars('!',',');
  //equivalent to:  st.wordChars(46,47)
    st.wordChars('.','/');
    st.wordChars('=','=');
  //equivalent to:  st.wordChars(63,64)
    st.wordChars('?','@');
  //equivalent to:  st.wordChars(91,96)
    st.wordChars('[','`');

    try {
      while (st.nextToken() != st.TT_EOF){
        if (st.ttype == st.TT_WORD){
          parsedCmd.addElement(new String(st.sval));
        }
        if (st.ttype == '-'){
          parsedCmd.addElement(new String("-"));
        }
        if (st.ttype == st.TT_NUMBER){
        }
      }
    }
    catch (IOException e){
      throw new CommandParseException() ;
    }

    switch (parsedCmd.size()){
      case 0:
        break;
      case 1: // simple command
        action = (String)parsedCmd.elementAt(0);
        if (action.compareTo(LIST) ==0 ||
          action.compareTo(WHERE) == 0){
          target = ".*"
        }
        else {
          throw new CommandParseException() ;
        }
        break;

      default : // more than 1 element in the command line
        action = (String)parsedCmd.elementAt(0);
        if ( isaReplaceAction(action) == true ||
          action.compareTo(LIST)==0 ||
          action.compareTo(GO)==0){

          boolean isOption = false ;
          for (int i = 1 ; i < parsedCmd.size() ; i++){
            String curWord = (String)parsedCmd.elementAt(i);
        //    System.out.println(curWord+"  "+option);
            if (isOption){
              /* we already met an option modifier, we're
              waiting for an option */
              isOption = false ;
              if (curWord.compareTo(REC) == 0
                    || curWord.compareTo(ATTR) == 0
                    || curWord.compareTo(REC+ATTR) == 0
                    || curWord.compareTo(ATTR+REC) == 0 ){
                option = curWord ;
              } else {
                // unknown option
                System.out.println("option discarded "+curWord);
              }
            } else {
                /* beginning of an option (modifier) */
              if (curWord.compareTo("-")==0){
                isOption = true ;
              } else {
                /* we're not waiting for an option so
                it's the command target */
                target = curWord ;
                break ;
              }
            }
          }
        }
        else {
          throw new CommandParseException() ;
        }
        if (target == null){
          throw new CommandParseException() ;
        }
    }
  }

  /**
   * Get the command line action
   * @return the string action (should be a jigshell action).
   */
  public String getAction(){
    return (action) ;
  }

  /**
   * Get the command target
   * @return the string target (should be a name or regexp).
   */
  public String getTarget(){
    return (target) ;
  }

  /**
   * Get the command option
   * @return the command option ("none" if no option specified in
   * the command line).
   */
  public String getOption(){
    return (option) ;
  }

  /* check whether a string is a s/truc/chose/ regexp. */
  private boolean isaReplaceAction(String s){
   
   
    if (pmatcher.matches(s, srPattern)){
      return true ;
    }
    return false ;
  }
}
TOP

Related Classes of org.w3c.tools.offline.command.CommandLine

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.