char.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 
---------------------------> Sather 1.1 source file <--------------------------
-- Copyright (C) International Computer Science Institute, 1994.  COPYRIGHT  --
-- NOTICE: This code is provided "AS IS" WITHOUT ANY WARRANTY and is subject --
-- to the terms of the SATHER LIBRARY GENERAL PUBLIC LICENSE contained in    --
-- the file "Doc/License" of the Sather distribution.  The license is also   --
-- available from ICSI, 1947 Center St., Suite 600, Berkeley CA 94704, USA.  --
--------> Please email comments to sather-bugs@icsi.berkeley.edu. <----------

-- char.sa: Characters.


immutable class CHAR < $IS_LT{CHAR}, $HASH, $STR, $FMT

immutable class CHAR < $IS_LT{CHAR}, $HASH, $STR, $FMT is -- Objects which represent characters. -- This version is for ASCII. Other implementations might use -- UNICODE, etc. -- AVAL isn't handled right yet, leave out for the moment. -- include AVAL{BOOL} asize->; include COMPARABLE; const asize:=SYS::char_size; is_alpha:BOOL is -- True if self is an alphabetic character. case self when 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' then return true else return false end end; is_upper:BOOL is -- True if self is uppercase. case self when 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' then return true else return false end end; is_lower:BOOL is -- True if self is lowercase. case self when 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' then return true else return false end end; is_octal_digit:BOOL is -- True if self is an octal digit. case self when '0', '1', '2', '3', '4', '5', '6', '7' then return true else return false end end; octal_digit_value:INT is -- The numerical value of self as an octal digit. -1 if not. case self when '0' then return 0 when '1' then return 1 when '2' then return 2 when '3' then return 3 when '4' then return 4 when '5' then return 5 when '6' then return 6 when '7' then return 7 else return -1 end end; is_digit:BOOL is -- True if self is a digit. case self when '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' then return true else return false end end; digit_value:INT is -- The numerical value of self as a decimal digit. -- -1 if it isn't. case self when '0' then return 0 when '1' then return 1 when '2' then return 2 when '3' then return 3 when '4' then return 4 when '5' then return 5 when '6' then return 6 when '7' then return 7 when '8' then return 8 when '9' then return 9 else return -1 end end; is_hex_digit:BOOL is -- True if self is a hexadecimal digit. case self when '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F' then return true else return false end end; hex_digit_value:INT is -- The numerical value of self as a hexadecimal digit. -- -1 if it isn't. case self when '0' then return 0 when '1' then return 1 when '2' then return 2 when '3' then return 3 when '4' then return 4 when '5' then return 5 when '6' then return 6 when '7' then return 7 when '8' then return 8 when '9' then return 9 when 'a','A' then return 10 when 'b','B' then return 11 when 'c','C' then return 12 when 'd','D' then return 13 when 'e','E' then return 14 when 'f','F' then return 15 else return -1 end end; is_alphanum:BOOL is -- True if self is alphanumeric. case self when 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' then return true else return false end end; is_space:BOOL is -- True if self is one of the whitespace characters: -- space, form feed, newline, carriage return, tab, vertical tab. -- NOTE: temporarily Ctrl-Z will be treated as whitespace. This -- ensures OS/2 compatibility until FILE classes are fixed. case self when ' ', '\f', '\n', '\r', '\t', '\v', '\032' then return true else return false end end; is_print:BOOL is -- True if self is a printing character. case self when ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '\"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~',',' then return true else return false end end; is_punct:BOOL is -- True if self is punctuation. case self when '!', '\"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}','~',',' then return true else return false end end; is_control:BOOL is -- True if self is a control character. return self.int<32; end; int:INT is -- The integer version of self. Returns unsigned value. Built-in. builtin CHAR_INT; end; hash:INT is -- A very cheap, but not very good hash value. It just returns -- the hash of the integer representation of the char. return int.hash; end; ascii_int:INT is -- The ASCII integer associated with each character in the -- minimal Sather character set. Returns -1 for other characters. case self -- This case commented out due to a bug in gdb not recognizing \a -- when '\a' then return 7 when '\b' then return 8 when '\t' then return 9 when '\n' then return 10 when '\v' then return 11 when '\r' then return 13 when ' ' then return 32 when '!' then return 33 when '\"' then return 34 when '#' then return 35 when '$' then return 36 when '%' then return 37 when '&' then return 38 when '\'' then return 39 when '(' then return 40 when ')' then return 41 when '*' then return 42 when '+' then return 43 when ',' then return 44 when '-' then return 45 when '.' then return 46 when '/' then return 47 when '0' then return 48 when '1' then return 49 when '2' then return 50 when '3' then return 51 when '4' then return 52 when '5' then return 53 when '6' then return 54 when '7' then return 55 when '8' then return 56 when '9' then return 57 when ':' then return 58 when ';' then return 59 when '<' then return 60 when '=' then return 61 when '>' then return 62 when '?' then return 63 when '@' then return 64 when 'A' then return 65 when 'B' then return 66 when 'C' then return 67 when 'D' then return 68 when 'E' then return 69 when 'F' then return 70 when 'G' then return 71 when 'H' then return 72 when 'I' then return 73 when 'J' then return 74 when 'K' then return 75 when 'L' then return 76 when 'M' then return 77 when 'N' then return 78 when 'O' then return 79 when 'P' then return 80 when 'Q' then return 81 when 'R' then return 82 when 'S' then return 83 when 'T' then return 84 when 'U' then return 85 when 'V' then return 86 when 'W' then return 87 when 'X' then return 88 when 'Y' then return 89 when 'Z' then return 90 when '[' then return 91 when '\\' then return 92 when ']' then return 93 when '^' then return 94 when '_' then return 95 when '`' then return 96 when 'a' then return 97 when 'b' then return 98 when 'c' then return 99 when 'd' then return 100 when 'e' then return 101 when 'f' then return 102 when 'g' then return 103 when 'h' then return 104 when 'i' then return 105 when 'j' then return 106 when 'k' then return 107 when 'l' then return 108 when 'm' then return 109 when 'n' then return 110 when 'o' then return 111 when 'p' then return 112 when 'q' then return 113 when 'r' then return 114 when 's' then return 115 when 't' then return 116 when 'u' then return 117 when 'v' then return 118 when 'w' then return 119 when 'x' then return 120 when 'y' then return 121 when 'z' then return 122 when '{' then return 123 when '|' then return 124 when '}' then return 125 when '~' then return 126 else return -1 end end; from_ascii_int(i:INT):SAME -- The ASCII character corresponding to `i' for characters -- in the Sather set, and the character with code `i' for -- the remainder. pre i.is_bet(0,127) is return ("\0\1\2\3\4\5\6\a" "\b\t\n\v\14\r\16\17" "\20\21\22\23\24\25\26\27" "\30\31\32\33\34\35\36\37" " !\"#$%&'" "()*+,-./" "01234567" "89:;<=>?" "@ABCDEFG" "HIJKLMNO" "PQRSTUVW" "XYZ[\\]^_" "`abcdefg" "hijklmno" "pqrstuvw" "xyz{|}~\177")[i] end; str:STR is return #STR(self); end; fmt( f: STR ): STR is return BASE_FORMAT::fmt_char( self, f ) end; pretty:STR is -- A pretty version of self. It includes single quotes -- around self and uses special codes or the octal representation -- for non printing characters. if is_print and self/='\'' and self/='\\' then return "'" + self + "'" end; case self when '\a' then return "'\\a'" when '\b' then return "'\\b'" when '\f' then return "'\\f'" when '\n' then return "'\\n'" when '\r' then return "'\\r'" when '\t' then return "'\\t'" when '\v' then return "'\\v'" when '\\' then return "'\\\\'" when '\'' then return "'\\''" else s::=int.octal_str; return "'\\".append(s.tail(s.size-2),"'") end end; upper:CHAR is -- An upper case version of self. -- Leaves non-alphabetic chars unchanged. case self when 'a' then return 'A' when 'b' then return 'B' when 'c' then return 'C' when 'd' then return 'D' when 'e' then return 'E' when 'f' then return 'F' when 'g' then return 'G' when 'h' then return 'H' when 'i' then return 'I' when 'j' then return 'J' when 'k' then return 'K' when 'l' then return 'L' when 'm' then return 'M' when 'n' then return 'N' when 'o' then return 'O' when 'p' then return 'P' when 'q' then return 'Q' when 'r' then return 'R' when 's' then return 'S' when 't' then return 'T' when 'u' then return 'U' when 'v' then return 'V' when 'w' then return 'W' when 'x' then return 'X' when 'y' then return 'Y' when 'z' then return 'Z' else return self end end; lower:CHAR is -- A lower case version of self. -- Leaves non-alphabetic chars unchanged. case self when 'A' then return 'a' when 'B' then return 'b' when 'C' then return 'c' when 'D' then return 'd' when 'E' then return 'e' when 'F' then return 'f' when 'G' then return 'g' when 'H' then return 'h' when 'I' then return 'i' when 'J' then return 'j' when 'K' then return 'k' when 'L' then return 'l' when 'M' then return 'm' when 'N' then return 'n' when 'O' then return 'o' when 'P' then return 'p' when 'Q' then return 'q' when 'R' then return 'r' when 'S' then return 's' when 'T' then return 't' when 'U' then return 'u' when 'V' then return 'v' when 'W' then return 'w' when 'X' then return 'x' when 'Y' then return 'y' when 'Z' then return 'z' else return self end end; is_eq(c:SAME):BOOL is -- True if self and `c' are equal. builtin CHAR_IS_EQ; end; is_lt(c:SAME):BOOL is -- True if self is earlier than `c' in the ordering of -- characters. return int < c.int end; end; -- immutable class CHAR