package uk.org.smithfamily.utils.normaliser;
import java.util.regex.Pattern;
/**
* RegEx patterns used to parse MegaSquirt INI firmware file
*/
public class Patterns
{
public static Pattern bits = Pattern.compile("(\\w*)\\s*=\\s*bits\\s*,\\s*(.*?),\\s*(.*?),*\\s*\\[(\\d):(.*?)\\](\\s*,\\s*(\".*\"))*.*");
public static Pattern scalar = Pattern.compile("(\\w*)\\s*=\\s*scalar\\s*,\\s*(.*?)\\s*,\\s*(\\d*)\\s*,\\s*\"(.*)\"\\s*,\\s*(.*?)\\s*,\\s*([-+]?\\d*\\.?\\d*)\\s*");
public static Pattern expr = Pattern.compile("(\\w*)\\s*=\\s*\\{\\s*(.*)\\s*\\}.*");
public static Pattern ternary = Pattern.compile("(.*?)\\?(.*)");
public static Pattern log = Pattern.compile("\\s*entry\\s*=\\s*(\\w+)\\s*,\\s*\"(.*?)\",\\s*(.*?),\\s*\"(.*?)\"");
public static Pattern binary = Pattern.compile("(.*)0b([01]{8})(.*)");
/*
* Comms
*/
public static Pattern queryCommand = Pattern.compile("\\s*queryCommand\\s*=\\s*\"(.*)\".*");
public static Pattern signature = Pattern.compile("\\s*signature\\s*=\\s*\"(.*)\".*");
public static Pattern byteSignature = Pattern.compile("\\s*signature\\s*=\\s*(\\d*).*");
public static Pattern ochGetCommand = Pattern.compile("\\s*ochGetCommand\\s*=\\s*\"(.*)\".*");
public static Pattern ochBlockSize = Pattern.compile("\\s*ochBlockSize\\s*=\\s*(\\d*).*");
public static Pattern pageActivationDelay = Pattern.compile("\\s*pageActivationDelay\\s*=\\s*(\\d*).*");
public static Pattern interWriteDelay = Pattern.compile("\\s*interWriteDelay\\s*=\\s*(\\d*).*");
/*
* Gauge
*/
public static Pattern defaultGauge = Pattern.compile("\\s*gauge\\d\\s*=\\s*(\\w*)");
public static Pattern gauge = Pattern.compile("\\s*(.*?)\\s*=\\s*(.*?)\\s*,\\s*\"(.*?)\"\\s*,\\s*\"(.*?)\"\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*)");
/*
* Page
*/
public static Pattern page = Pattern.compile("\\s*page\\s*=\\s*(\\d*)");
// public static Pattern nPages = Pattern.compile("\\s*nPages\\s*=\\s*(\\d*)");
public static Pattern pageSize = Pattern.compile("\\s*pageSize\\s*=\\s*(.*)");
public static Pattern pageIdentifier = Pattern.compile("\\s*pageIdentifier\\s*=\\s*(.*)");
public static Pattern pageActivate = Pattern.compile("\\s*pageActivate\\s*=\\s*(.*)");
public static Pattern pageReadCommand = Pattern.compile("\\s*pageReadCommand\\s*=\\s*(.*)");
public static Pattern pageValueWrite = Pattern.compile("\\s*pageValueWrite\\s*=\\s*(.*)");
public static Pattern pageChunkWrite = Pattern.compile("\\s*pageChunkWrite\\s*=\\s*(.*)");
/*
* Constant
*/
public static Pattern constantScalar = Pattern.compile("\\s*(\\w*)\\s*=\\s*(scalar)\\s*,\\s*(.*?)\\s*,\\s*(\\d*)\\s*,\\s*\\\"(.*)\\\"\\s*,\\s*([-+]?\\d*\\.?\\d*)\\s*,\\s*(.*?)\\s*,\\s*([-+]?\\d*\\.?\\d*)\\s*,\\s*([-+]?\\d*\\.?\\d*)\\s*,\\s*([-+]?\\d*\\.?\\d*).*");
public static Pattern constantSimple = Pattern.compile("\\s*(\\w*)\\s*=\\s*(scalar)\\s*,\\s*(.*?)\\s*,\\s*(\\d*)\\s*,\\s*\\\"(.*)\\\"\\s*,\\s*(.*?)\\s*,\\s*([-+]?\\d*\\.?\\d*).*");
public static Pattern constantArray = Pattern.compile("\\s*(\\w*)\\s*=\\s*(array)\\s*,\\s*(.*?)\\s*,\\s*(\\d*),\\s*(\\[.*?\\])\\s*,\\s*\\\"(.*?)\\\"\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*([-+]?\\d*\\.?\\d*)");
public static Pattern booleanConvert = Pattern.compile("(.*?==\\s*\\d+)\\s*(\\).*?)");
public static Pattern boolAsInt = Pattern.compile("(.*\\(.*?[<>=].*?\\))(.*?[\\*/].*)");
/*
* Menu
*/
public static Pattern menuDialog = Pattern.compile("\\s*menuDialog\\s*=\\s*(.*)");
public static Pattern menu = Pattern.compile("\\s*menu\\s*=\\s*\"(.*)\"");
public static Pattern subMenu = Pattern.compile("\\s*subMenu\\s*=\\s*(.*?)\\s*(,\\s*\"(.*?)\"\\s*)?(,\\s*(\\d*)\\s*)?(,\\s*(\\{.*\\})\\s*)?");
/*
* Controller Commands
*/
public static Pattern controllerCommands = Pattern.compile("\\s*(.*?)\\s*=\\s*\"(.*)\"");
/*
* User Defined
*/
public static Pattern dialog = Pattern.compile("\\s*dialog\\s*=\\s*(.*?)\\s*(,\\s*\"(.*?)\")?(,\\s*(.*?)\\s*)?");
public static Pattern dialogField = Pattern.compile("\\s*field\\s*=\\s*\"(.*)\"(,\\s*(.*?))?(,\\s*(\\{.*\\})\\s*)?");
public static Pattern dialogDisplayOnlyField = Pattern.compile("\\s*displayOnlyField\\s*=\\s*\"(.*)\"(,\\s*(.*?))?(,\\s*(\\{.*\\})\\s*)?");
public static Pattern dialogPanel = Pattern.compile("\\s*panel\\s*=\\s*(.*?)\\s*(,\\s*(.*?)\\s*)?(,\\s*(.*?)\\s*)?");
public static Pattern commandButton = Pattern.compile("\\s*commandButton\\s*=\\s*\"(.*)\"(,\\s*(.*?))?(,\\s*(\\{.*\\})\\s*)?(,\\s*(.*?)\\s*)?");
/*
* Table Editor
*/
public static Pattern tablEditorTable = Pattern.compile("\\s*table\\s*=\\s*(.*)\\s*,\\s*(.*)\\s*,\\s*\"(.*)\"\\s*,\\s*(\\d+)\\s*");
public static Pattern tablEditorXBins = Pattern.compile("\\s*xBins\\s*=\\s*(.*?)\\s*,\\s*(.*?)\\s*(,\\s*(.*))?");
public static Pattern tablEditorYBins = Pattern.compile("\\s*yBins\\s*=\\s*(.*?)\\s*,\\s*(.*?)\\s*(,\\s*(.*))?");
public static Pattern tablEditorZBins = Pattern.compile("\\s*zBins\\s*=\\s*(.*)\\s*");
public static Pattern tablEditorUpDownLabel = Pattern.compile("\\s*upDownLabel\\s*=\\s*\"(.*?)\"\\s*,\\s*\"(.*)\"\\s*");
public static Pattern tablEditorGridHeight = Pattern.compile("\\s*gridHeight\\s*=\\s*(.*?)\\s*");
public static Pattern tablEditorGridOrient = Pattern.compile("\\s*gridOrient\\s*=\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*)\\s*");
/*
* Curve Editor
*/
public static Pattern curve = Pattern.compile("\\s*curve\\s*=\\s*(.*?)\\s*,\\s*\"(.*)\".*");
public static Pattern curveColumnLabel = Pattern.compile("\\s*columnLabel\\s*=\\s*\"(.*?)\"\\s*,\\s*\"(.*)\"");
public static Pattern curveXAxis = Pattern.compile("\\s*xAxis\\s*=\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*)\\s*");
public static Pattern curveYAxis = Pattern.compile("\\s*yAxis\\s*=\\s*(.*?)\\s*,\\s*(.*?)\\s*,\\s*(.*)\\s*");
public static Pattern curveXBins = Pattern.compile("\\s*xBins\\s*=\\s*(.*?)\\s*(,\\s*(.*?))?\\s*(,\\s*(.*))?\\s*");
public static Pattern curveYBins = Pattern.compile("\\s*yBins\\s*=\\s*(.*)\\s*");
public static Pattern curveGauge = Pattern.compile("\\s*gauge\\s*=\\s*(.*)\\s*");
public static Pattern curveLineLabel = Pattern.compile("\\s*lineLabel\\s*=\\s*\"(.*)\"");
public static Pattern int2boolean = Pattern.compile("(\\w*)");
// Used to split by comma (or space for incorrect INI) when comma or space are not between double quotes
public static Pattern bitsValues = Pattern.compile("[\\s,]+(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
}