Package org.jical

Source Code of org.jical.ContentLineParser

package org.jical;

//import java.io.InputStreamReader;
//import java.io.FileInputStream;
//import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ContentLineParser {

    private static final String RR_ALPHA = "A-Za-z";
    private static final String RR_DIGIT = "0-9";
    private static final String RR_DQUOTE = "\\\"";
    private static final String RR_WSP = " \\t";
    private static final String RR_CTL = "\\x00-\\x08\\x0A-\\x1F\\x7F";
    private static final String RR_SEP = ";:,";

    private static final String R_QSAFE_CHAR = "[^"+RR_CTL+RR_DQUOTE+"]";
    private static final String R_SAFE_CHAR = "[^"+RR_CTL+RR_DQUOTE+RR_SEP+"]";
    private static final String R_VALUE_CHAR = "[^"+RR_CTL+"]";
    private static final String R_NAME_CHAR = "[\\-"+RR_ALPHA+RR_DIGIT+"]";

    private static final String RC_PARAM_VALUE = "(?:(?:"+RR_DQUOTE+"("+R_QSAFE_CHAR+"*)"+RR_DQUOTE+")|("+R_SAFE_CHAR+"*))";
    private static final String RC_PARAM = "("+R_NAME_CHAR+"*)="+RC_PARAM_VALUE+"[;:]";
    private static final String RC_NAME = "("+R_NAME_CHAR+"*)[;:]";

    private static final Pattern NAME_PATTERN = Pattern.compile( RC_NAME );
    private static final Pattern PARAM_PATTERN = Pattern.compile( RC_PARAM );

    public static ContentLine parse( CharSequence cs ) {
  Matcher nameMatcher = NAME_PATTERN.matcher( cs );
  Matcher paramMatcher = PARAM_PATTERN.matcher( cs );
  int start = 0;
  if ( nameMatcher.find( start ) ) {
      MutableContentLine contentLine = new MutableContentLine();
      {
    contentLine.setRawLine( cs.toString() );
      }
      {
    contentLine.setName( nameMatcher.group( 1 ) );
    start = nameMatcher.end();
      }
      if ( cs.charAt( start - 1 ) == ';' ) {
    Map params = contentLine.getMutableParameters();
    while ( paramMatcher.find( start ) ) {
        String key = paramMatcher.group(1);
        String val = paramMatcher.group(2);
        if ( val == null ) {
      val = paramMatcher.group(3);
        }
        params.put( key, val );
        start = paramMatcher.end();
    }
      }
      {
    contentLine.setValue( cs.subSequence( start, cs.length() ).toString() );
      }
      return contentLine;
  }
  return null;
    }
}
TOP

Related Classes of org.jical.ContentLineParser

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.