/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.instruction;
import java.util.regex.Pattern;
import org.springframework.web.util.HtmlUtils;
import com.enonic.cms.framework.util.UrlPathEncoder;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: Dec 15, 2010
* Time: 10:51:39 AM
*/
public class PostProcessInstructionPatterns
{
public static final String PPI_PREFIX = "__##";
public static final String PPI_POSTFIX = "##__";
public static final String PPI_PREFIX_ENCODED = UrlPathEncoder.encode( PPI_PREFIX );
private static final String PREFIX_VARIANTS = PPI_PREFIX + "|" + PPI_PREFIX_ENCODED;
private static final String POSTFIX_VARIANTS = PPI_POSTFIX + "|" + UrlPathEncoder.encode( PPI_POSTFIX );
public static final String PPI_SEPARATOR = "&";
private static final String PPI_SEPARATOR_ESCAPED = HtmlUtils.htmlEscape( PPI_SEPARATOR );
private static final String PPI_SEPARATOR_ENCODED = UrlPathEncoder.encode( PPI_SEPARATOR );
private static final String PPI_SEPARATOR_ESCAPED_AND_ENCODED = UrlPathEncoder.encode( PPI_SEPARATOR_ESCAPED );
private static final String SEPARATOR_VARIANTS =
PPI_SEPARATOR + "|" + PPI_SEPARATOR_ESCAPED + "|" + PPI_SEPARATOR_ESCAPED_AND_ENCODED + "|" + PPI_SEPARATOR_ENCODED;
private static final String PPI_NAME_ALLOWED_CHARS = "[a-zA-Z_]";
private static final String PPI_VALUE_ALLOWED_CHARS = "0-9a-zA-Z\\+=/";
private static final String EQUALS_ENC = UrlPathEncoder.encode( "=" );
private static final String PLUS_ENC = UrlPathEncoder.encode( "+" );
private static final String BACKSLASH_ENC = UrlPathEncoder.encode( "\\" );
private static final String SLASH_ENC = UrlPathEncoder.encode( "/" );
private static final String SEMICOLON_ENC = UrlPathEncoder.encode( ";" );
public static final String SERIALIZED_VALUE_PATTERN =
PPI_VALUE_ALLOWED_CHARS + "|" + EQUALS_ENC + "|" + PLUS_ENC + "|" + BACKSLASH_ENC + "|" + SLASH_ENC + "|" + SEMICOLON_ENC;
public static final Pattern SERIALIZED_PATTERN =
Pattern.compile( "(" + PPI_NAME_ALLOWED_CHARS + "+)(" + SEPARATOR_VARIANTS + ")(" + "[" + SERIALIZED_VALUE_PATTERN + "]+)" );
public static final Pattern POST_PROCESS_INSTRUCTION_PATTERN =
Pattern.compile( "(" + PREFIX_VARIANTS + ")" + SERIALIZED_PATTERN + "(" + POSTFIX_VARIANTS + ")" );
public static boolean instructionHasBeenUrlEncoded( String prefix )
{
return prefix.equals( PPI_PREFIX_ENCODED );
}
public static boolean instructionHtmlEscaped( String separator )
{
if ( separator.equals( PostProcessInstructionPatterns.PPI_SEPARATOR_ESCAPED ) )
{
return true;
}
return false;
}
}