/*
Copyright (C) 2014 Martin Frické (mfricke@u.arizona.edu http://softoption.us mfricke@softoption.us)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

package us.softoption.infrastructure;

public class Symbols {
	
	
	public static final char chSmallLeftBracket = '(';
	public static final String strSmallLeftBracket = "(";
	public static final char chSmallRightBracket = ')';
	public static final String strSmallRightBracket = ")";
	
	public static final char chNBSpace = '\u00A0';  // non breaking space &nbsp;
	
	public static final char chTherefore='\u2234';

	public static final char chLSqBracket = '[';
	public static final String strLSqBracket = "[";
	public static final char chRSqBracket = ']';
	public static final String strRSqBracket = "]";
	
	public static final char chLeftCurlyBracket = '{';
	public static final String strLeftCurlyBracket = "{";
	public static final char chRightCurlyBracket = '}';
	public static final String strRightCurlyBracket = "}";

	public static final char chMult = '.';
	public static final String strMult = ".";
	public static final char chXProd = '\u00D7';
	public static final String strXProd = "\u00D7";

	public static final char chAdd = '+';
	public static final String strAdd = "+";
	
	public static final char chMinus = '-';
	public static final String strMinus = "-";
	
	public static final char chAt = '@';
	public static final String strAt = "@";

	public static final char chSucc = '\'';
	public static final String strSucc = "\'";


	public static final char chAnd = '\u2227';     //&and;  &#8743  upside down vee
	public static final char chAnd2 = '&';     //&and;  &#8743  BergmannAnd
	public static final char chAnd3 = '.';     //&and;  &#8743

	public static final String strAnd = "\u2227";     //&and;  &#8743  upside down vee internal form

	public static final char chNeg= '\u223C';      // Tilde operator       &#8764;
	public static final char chNotSign= '\u00AC';     //&not;   NNED TO CORRECT THIS
	public static final char chNeg3= '\u007E';     //tilde
	public static final char chNeg4= '\u02DC';     //small tilde
	
	public static final String strNeg = "\u223C";     //internal form

	public static final char chUniquant='\u2200';  //&forall; &#8704;
	public static final String strUniquant = "\u2200";
	public static final char chOr = '\u2228';      //&or; &#8744;
	public static final String strOr = "\u2228";      //&or; &#8744;
	public static final char chExiquant='\u2203';  //&exist; &#8707;
	public static final String strExiquant = "\u2203";


	public static final char chImplic = '\u2283';  //&sup; &#8835;
	public static final char chArrow = '\u2192';  //&rarr; &#8594  ;

	public static final char chEquiv = '\u2261';   //&equiv; &#8801;
	public static final char chHArr = '\u2194';   //&harr; &#8596;

	
	public static final char chSuperscript1 = '\u00B9';
	public static final char chSuperscript1Alt = '\u00B9';
	public static final char chSuperscript2 = '\u00B2';
	public static final char chSuperscript3 = '\u00B3';
	public static final char chSuperscript4 = '\u2074';
	public static final char chSuperscript5 = '\u2075';
	public static final char chSuperscript6 = '\u2076';
	public static final char chSuperscript7 = '\u2077';
	public static final char chSuperscript8 = '\u2078';
	public static final char chSuperscript9 = '\u2079';
	public static final char chSuperscript0 = '\u2070';
	
	public static final char chSubscript1 = '\u2081';
	public static final char chSubscript2 = '\u2082';
	public static final char chSubscript3 = '\u2083';
	public static final char chSubscript4 = '\u2084';
	public static final char chSubscript5 = '\u2085';
	public static final char chSubscript6 = '\u2086';
	public static final char chSubscript7 = '\u2087';
	public static final char chSubscript8 = '\u2088';
	public static final char chSubscript9 = '\u2089';
	public static final char chSubscript0 = '\u2080';
	
	public static final int intSubscript1 = 1;
	public static final int intSubscript2 = 2;
	public static final int intSubscript3 = 3;
	public static final int intSubscript4 = 4;
	public static final int intSubscript5 = 5;
	public static final int intSubscript6 = 6;
	public static final int intSubscript7 = 7;
	public static final int intSubscript8 = 8;
	public static final int intSubscript9 = 9;
	public static final int intSubscript0 = 0;


	public static final char chModalNecessary= '\u25A1';  //geometrical shape, white square
	public static final char chModalNecessary2= '\u2394';  //geometrical shape, white square

	public static final char chModalPossible= '\u25CA';   //geometrical shape, lozenge, white diamond
	public static final char chModalPossible2= '\u25C7';   //geometrical shape, white diamond
	public static final char chModalPossible3= '\u20DF';   //geometrical shape, solidus, white diamond
	public static final char chModalPossible4= '\u25C8';   //geometrical shape, solidus, white diamond


	public static final char chLambda= '\u03BB';   //greek small letter lambda
	public static final char chBeta= '\u03B2';   //greek small letter beta
	public static final char chAlpha= '\u03B1';   //greek small letter beta
	public static final char chKappa= '\u039A';   //greek upper letter kappa
	public static final char chSmallKappa= '\u03BA';   //greek lower letter kappa
	public static final char chRho= '\u03A1';   //greek upper letter rho
	public static final char chLowerRho= '\u03C1';   //greek lower letter rho
	
	
	public static final char chDoubleArrow= '\u21D2';   //rightward double arrow (for rewrites)

	public static final char chUnique = '!';


	public static final char chBlank = ' ';
	public static final String strNull = "";
	public static final String strCR = "\n";  // need to change this for cross platform

	public static final char chComma = ',';
	public static final char chQuestionMark = '?';
	public static final char chSlash = '/';
	public static final char chColon = ':';
	public static final char chVertLine = '|';
	public static final char chInsertMarker = '>';
	public static final char chBoxVertLine = '\u2503';
	public static final char chHeavyDownLine = '\u257B';
	
	public static final char chEmptySet = '\u2205';
	public static final String strEmptySet ="\u2205";
	public static final char chUniverseSet = 'Ü'; //'U'; German U-umlaut symbol and it is typed by following option-u with uppercase-U
	public static final String strUniverseSet = "Ü"; //="U";
        
        /*In set theory, the universet set is usually upper-case U (and it is a constant
        but we already have upper-case U as a proposition, predicate relation etc. which
        would mean that UU or even UUUUUUU are well-formed, but hard to parse, so we use the
        German up-case Ü for the universet set.
        */
	
	public static final char chDownTack = '\u22A4';   //the single letter symbol for true
	public static final String strDownTack = chDownTack+"";   //the single letter symbol for true
	public static final char chUpTack = '\u22A5';     //the single letter symbol for false
	public static final String strUpTack = chUpTack+"";     //the single letter symbol for false

	/******** infix predicates **************/

	public static final char chLessThan = '<';
	public static final String strLessThan = "<";
	public static final char chGreaterThan = '>';
	public static final String strGreaterThan = ">";

	public static final char chEquals = '=';
	public static final String strEquals = "=";

	public static final char chMemberOf = '\u2208';
	public static final String strMemberOf = "\u2208";
	public static final char chNotMemberOf = '\u2209';
	public static final String strNotMemberOf = "\u2209";
	public static final char chEpsilon = '\u03B5';
	public static final String chEpsilonLarge = "\u0395";

	public static final char chUnion = '\u222A';
	public static final String strUnion = "\u222A";
	
	public static final char chIntersection = '\u2229';
	public static final String strIntersection = "\u2229";
	
	//public static final char chCartesianProduct = '\u00D7';   us chXProd
	//public static final String strCartesianProduct = "\u00D7";
	
	public static final char chSubset = '\u2282';
	public static final String strSubsetOf = "\u2282";
	
	public static final char chPowerSet = '\u2118';    // &#8472; or &weierp;
	public static final String strPowerSet = "\u2118"; // standard unary functor
	
	public static final String setTheorySymbols = strMemberOf + chBlank+
												  strNotMemberOf + chBlank+
	                                              strUnion + chBlank+
	                                              strIntersection+ chBlank+
	                                              strPowerSet+ chBlank+
	                                            //  strCartesianProduct+ chBlank+
	                                              strSubsetOf+ chBlank+
	                                              strEmptySet+ chBlank+
	                                              strUniverseSet;
	
	

	public static final String strInfixPreds = strLessThan+strEquals+strMemberOf+strSubsetOf;

	/******** end of  infix predicates **************/

	public static final String defaultFilter="[" + chBlank+"]"; // this is a regular expression for use in filtering input with replaceAll


	public static final String lispFilterOut="[" + strCR+"]";   // changes a return to a blank which is a separator
	public static final String lispFilterIn="[" + chBlank+"]";



	public static String negationChs = "~"+chNeg+chNotSign+chNeg3+chNeg4;
	
	


	public static String implicChs = String.valueOf(chImplic) + chArrow;

	public static String andChs = String.valueOf(chAnd) + chAnd2 +chAnd3;

	public static String orChs = String.valueOf(chOr);

	public static String equivChs = String.valueOf(chEquiv) + chHArr;

	public static String modalPossibleChs = ""+chModalPossible+chModalPossible2+chModalPossible3+chModalPossible3;

	public static String modalNecessaryChs = ""+chModalNecessary+chModalNecessary2;
	
	public static String memberOfChs = ""+chMemberOf+chEpsilon + chEpsilonLarge;
	
	public static String superScripts = ""+chSuperscript1+ chSuperscript1Alt+ chSuperscript2+ chSuperscript3+ chSuperscript4
										+ chSuperscript5+ chSuperscript6+ chSuperscript7+ chSuperscript8+ chSuperscript9+ chSuperscript0;
	
	/****************************************************/
	
	

}
