/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package gplx;
public class Byte_ascii {
	public static final byte
	      Null			=   0												 , Backfeed         =   8, Tab				=   9
		, Nl			=  10, Formfeed			=  12, Cr				=  13
		,					   Escape			=  27
													 , Space			=  32, Bang				=  33, Quote			=  34
		, Hash			=  35, Dollar           =  36, Percent			=  37, Amp				=  38, Apos				=  39
		, Paren_bgn		=  40, Paren_end		=  41, Star				=  42, Plus				=  43, Comma			=  44
		, Dash			=  45, Dot				=  46, Slash			=  47, Num_0			=  48, Num_1			=  49
		, Num_2			=  50, Num_3			=  51, Num_4			=  52, Num_5			=  53, Num_6			=  54
		, Num_7			=  55, Num_8			=  56, Num_9			=  57, Colon			=  58, Semic			=  59
		, Lt			=  60, Eq				=  61, Gt				=  62, Question			=  63, At				=  64
		, Ltr_A			=  65, Ltr_B			=  66, Ltr_C			=  67, Ltr_D			=  68, Ltr_E			=  69
		, Ltr_F			=  70, Ltr_G			=  71, Ltr_H			=  72, Ltr_I			=  73, Ltr_J			=  74
		, Ltr_K			=  75, Ltr_L			=  76, Ltr_M			=  77, Ltr_N			=  78, Ltr_O			=  79
		, Ltr_P			=  80, Ltr_Q			=  81, Ltr_R			=  82, Ltr_S			=  83, Ltr_T			=  84
		, Ltr_U			=  85, Ltr_V			=  86, Ltr_W			=  87, Ltr_X			=  88, Ltr_Y			=  89
		, Ltr_Z			=  90, Brack_bgn		=  91, Backslash		=  92, Brack_end		=  93, Pow				=  94	// Circumflex             
		, Underline     =  95, Tick				=  96, Ltr_a			=  97, Ltr_b            =  98, Ltr_c			=  99
		, Ltr_d			= 100, Ltr_e			= 101, Ltr_f			= 102, Ltr_g			= 103, Ltr_h			= 104
		, Ltr_i			= 105, Ltr_j			= 106, Ltr_k			= 107, Ltr_l			= 108, Ltr_m			= 109
		, Ltr_n			= 110, Ltr_o			= 111, Ltr_p			= 112, Ltr_q			= 113, Ltr_r			= 114
		, Ltr_s			= 115, Ltr_t			= 116, Ltr_u			= 117, Ltr_v			= 118, Ltr_w			= 119
		, Ltr_x			= 120, Ltr_y			= 121, Ltr_z			= 122, Curly_bgn		= 123, Pipe				= 124
		, Curly_end		= 125, Tilde			= 126, Delete           = 127
		;
	public static final byte
	  Angle_bgn = Lt, Angle_end = Gt
	;
	public static final byte Max_7_bit = (byte)127, Ascii_min = 0, Ascii_max = 127;
	public static boolean Is_sym(byte b) {
		switch (b) {
			case Byte_ascii.Bang: case Byte_ascii.Quote:
			case Byte_ascii.Hash: case Byte_ascii.Dollar: case Byte_ascii.Percent: case Byte_ascii.Amp: case Byte_ascii.Apos:
			case Byte_ascii.Paren_bgn: case Byte_ascii.Paren_end: case Byte_ascii.Star: case Byte_ascii.Plus: case Byte_ascii.Comma:
			case Byte_ascii.Dash: case Byte_ascii.Dot: case Byte_ascii.Slash:
			case Byte_ascii.Colon: case Byte_ascii.Semic:
			case Byte_ascii.Lt: case Byte_ascii.Eq: case Byte_ascii.Gt: case Byte_ascii.Question: case Byte_ascii.At:
			case Byte_ascii.Brack_bgn: case Byte_ascii.Backslash: case Byte_ascii.Brack_end: case Byte_ascii.Pow:								
			case Byte_ascii.Underline: case Byte_ascii.Tick:
			case Byte_ascii.Curly_bgn: case Byte_ascii.Pipe:
			case Byte_ascii.Curly_end: case Byte_ascii.Tilde:
				return true;
			default:
				return false;
		}
	}
	public static boolean Is_ltr(byte b) {
		return (	b >= Byte_ascii.Ltr_a && b <= Byte_ascii.Ltr_z
				||	b >= Byte_ascii.Ltr_A && b <= Byte_ascii.Ltr_Z);
	}
	public static boolean Is_ws(byte b) {
		switch (b) {
			case Byte_ascii.Tab: case Byte_ascii.Nl: case Byte_ascii.Cr: case Byte_ascii.Space: return true;
			default: return false;
		}
	}
	public static boolean Is_num(byte b) {
		return b > Byte_ascii.Slash && b < Byte_ascii.Colon;
	}
	public static byte	To_a7_int(byte b)		{return (byte)(b - Byte_ascii.Num_0);}
	public static byte	To_a7_str(int digit)	{
		switch (digit) {
			case 0: return Byte_ascii.Num_0; case 1: return Byte_ascii.Num_1; case 2: return Byte_ascii.Num_2; case 3: return Byte_ascii.Num_3; case 4: return Byte_ascii.Num_4;
			case 5: return Byte_ascii.Num_5; case 6: return Byte_ascii.Num_6; case 7: return Byte_ascii.Num_7; case 8: return Byte_ascii.Num_8; case 9: return Byte_ascii.Num_9;
			default: throw Err_.new_("Byte_ascii", "unknown digit", "digit", digit);
		}
	}
	public static String To_str(byte b) {return Char_.To_str((char)b);}
	public static byte Case_upper(byte b) {
		return b > 96 && b < 123
			? (byte)(b - 32)
			: b;
	}
	public static byte Case_lower(byte b) {
		return b > 64 && b < 91
			? (byte)(b + 32)
			: b;
	}
	public static final    byte[] Space_len2 = new byte[] {Space, Space}, Space_len4 = new byte[] {Space, Space, Space, Space};
	public static final    byte[]
	  Tab_bry				= new byte[] {Byte_ascii.Tab}
	, Nl_bry				= new byte[] {Byte_ascii.Nl}
	, Space_bry				= new byte[] {Byte_ascii.Space}
	, Bang_bry				= new byte[] {Byte_ascii.Bang}
	, Quote_bry				= new byte[] {Byte_ascii.Quote}
	, Hash_bry				= new byte[] {Byte_ascii.Hash}
	, Dot_bry				= new byte[] {Byte_ascii.Dot}
	, Angle_bgn_bry			= new byte[] {Byte_ascii.Angle_bgn}
	, Angle_end_bry			= new byte[] {Byte_ascii.Angle_end}
	, Comma_bry				= new byte[] {Byte_ascii.Comma}
	, Colon_bry				= new byte[] {Byte_ascii.Colon}
	, Semic_bry				= new byte[] {Byte_ascii.Semic}
	, Eq_bry				= new byte[] {Byte_ascii.Eq}
	, Amp_bry				= new byte[] {Byte_ascii.Amp}
	, Lt_bry				= new byte[] {Byte_ascii.Lt}
	, Gt_bry				= new byte[] {Byte_ascii.Gt}
	, Question_bry			= new byte[] {Byte_ascii.Question}
	, Brack_bgn_bry			= new byte[] {Byte_ascii.Brack_bgn}
	, Brack_end_bry			= new byte[] {Byte_ascii.Brack_end}
	, Apos_bry				= new byte[] {Byte_ascii.Apos}
	, Pipe_bry				= new byte[] {Byte_ascii.Pipe}
	, Underline_bry			= new byte[] {Byte_ascii.Underline}
	, Slash_bry				= new byte[] {Byte_ascii.Slash}
	, Star_bry				= new byte[] {Byte_ascii.Star}
	, Dash_bry				= new byte[] {Byte_ascii.Dash}
	, Cr_lf_bry				= new byte[] {Byte_ascii.Cr, Byte_ascii.Nl}
	, Num_0_bry				= new byte[] {Byte_ascii.Num_0}
	, Num_1_bry				= new byte[] {Byte_ascii.Num_1}
	;
}
