1 /**
   2  * @namespace JavaScriptの言語仕様に関する情報を取得するために使用する名前空間です。
   3  */
   4 JSDOC.Lang = {
   5 }
   6 
   7 /**
   8  * 指定された名前が組み込みオブジェクトのものであるか判定します。
   9  * @param {String} name オブジェクト名
  10  * @return {Boolean} 組み込みオブジェクトならtrue、そうでなければfalse
  11  */
  12 JSDOC.Lang.isBuiltin = function(name) {
  13     return (JSDOC.Lang.isBuiltin.coreObjects.indexOf(name) > -1);
  14 }
  15 
  16 JSDOC.Lang.isBuiltin.coreObjects = ['_global_', 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', 'RegExp', 'String'];
  17 
  18 /** @ignore */
  19 JSDOC.Lang.whitespace = function(ch) {
  20     return JSDOC.Lang.whitespace.names[ch];
  21 }
  22 JSDOC.Lang.whitespace.names = {
  23     " ":      "SPACE",
  24     "\f":     "FORMFEED",
  25     "\t":     "TAB",
  26     "\u0009": "UNICODE_TAB",
  27     "\u000A": "UNICODE_NBR",
  28     "\u0008": "VERTICAL_TAB"
  29 };
  30 
  31 /** @ignore */
  32 JSDOC.Lang.newline = function(ch) {
  33     return JSDOC.Lang.newline.names[ch];
  34 }
  35 JSDOC.Lang.newline.names = {
  36     "\n":     "NEWLINE",
  37     "\r":     "RETURN",
  38     "\u000A": "UNICODE_LF",
  39     "\u000D": "UNICODE_CR",
  40     "\u2029": "UNICODE_PS",
  41     "\u2028": "UNICODE_LS"
  42 };
  43 
  44 /** @ignore */
  45 JSDOC.Lang.keyword = function(word) {
  46     return JSDOC.Lang.keyword.names["="+word];
  47 }
  48 JSDOC.Lang.keyword.names = {
  49     "=break":      "BREAK",
  50     "=case":       "CASE",
  51     "=catch":      "CATCH",
  52     "=const":      "VAR",
  53     "=continue":   "CONTINUE",
  54     "=default":    "DEFAULT",
  55     "=delete":     "DELETE",
  56     "=do":         "DO",
  57     "=else":       "ELSE",
  58     "=false":      "FALSE",
  59     "=finally":    "FINALLY",
  60     "=for":        "FOR",
  61     "=function":   "FUNCTION",
  62     "=if":         "IF",
  63     "=in":         "IN",
  64     "=instanceof": "INSTANCEOF",
  65     "=new":        "NEW",
  66     "=null":       "NULL",
  67     "=return":     "RETURN",
  68     "=switch":     "SWITCH",
  69     "=this":       "THIS",
  70     "=throw":      "THROW",
  71     "=true":       "TRUE",
  72     "=try":        "TRY",
  73     "=typeof":     "TYPEOF",
  74     "=void":       "VOID",
  75     "=while":      "WHILE",
  76     "=with":       "WITH",
  77     "=var":        "VAR"
  78 };
  79 
  80 /** @ignore */
  81 JSDOC.Lang.punc = function(ch) {
  82     return JSDOC.Lang.punc.names[ch];
  83 }
  84 JSDOC.Lang.punc.names = {
  85     ";":   "SEMICOLON",
  86     ",":   "COMMA",
  87     "?":   "HOOK",
  88     ":":   "COLON",
  89     "||":  "OR", 
  90     "&&":  "AND",
  91     "|":   "BITWISE_OR",
  92     "^":   "BITWISE_XOR",
  93     "&":   "BITWISE_AND",
  94     "===": "STRICT_EQ", 
  95     "==":  "EQ",
  96     "=":   "ASSIGN",
  97     "!==": "STRICT_NE",
  98     "!=":  "NE",
  99     "<<":  "LSH",
 100     "<=":  "LE", 
 101     "<":   "LT",
 102     ">>>": "URSH",
 103     ">>":  "RSH",
 104     ">=":  "GE",
 105     ">":   "GT", 
 106     "++":  "INCREMENT",
 107     "--":  "DECREMENT",
 108     "+":   "PLUS",
 109     "-":   "MINUS",
 110     "*":   "MUL",
 111     "/":   "DIV", 
 112     "%":   "MOD",
 113     "!":   "NOT",
 114     "~":   "BITWISE_NOT",
 115     ".":   "DOT",
 116     "[":   "LEFT_BRACKET",
 117     "]":   "RIGHT_BRACKET",
 118     "{":   "LEFT_CURLY",
 119     "}":   "RIGHT_CURLY",
 120     "(":   "LEFT_PAREN",
 121     ")":   "RIGHT_PAREN"
 122 };
 123 
 124 /** @ignore */
 125 JSDOC.Lang.matching = function(name) {
 126     return JSDOC.Lang.matching.names[name];
 127 }
 128 JSDOC.Lang.matching.names = {
 129     "LEFT_PAREN": "RIGHT_PAREN",
 130     "RIGHT_PAREN": "LEFT_PAREN",
 131     "LEFT_CURLY": "RIGHT_CURLY",
 132     "RIGHT_CURLY": "LEFT_CURLY",
 133     "LEFT_BRACE": "RIGHT_BRACE",
 134     "RIGHT_BRACE": "LEFT_BRACE"
 135 }
 136 
 137 /**
 138  * 指定された文字列が数値であるか判定します。
 139  * @param {String} str 判定対象の文字列
 140  * @return {Boolean} 数値ならtrue、そうでなければfalse
 141  */
 142 JSDOC.Lang.isNumber = function(str) {
 143     return /^(\.[0-9]|[0-9]+\.|[0-9])[0-9]*([eE][+-][0-9]+)?$/i.test(str);
 144 }
 145 
 146 /**
 147  * 指定された文字列が16進数表記の数値であるか判定します。
 148  * @param {String} str 判定対象の文字列
 149  * @return {Boolean} 16進数表記の数値ならtrue、そうでなければfalse
 150  */
 151 JSDOC.Lang.isHexDec = function(str) {
 152     return /^0x[0-9A-F]+$/i.test(str);
 153 }
 154 
 155 /**
 156  * 指定された文字列が以下の要素からのみ構成されているか判定します。 <br>
 157  * <ul><li>アルファベット</li><li>数字</li><li>$</li><li>_</li><li>.</li></ul>
 158  * @param {String} str 判定対象の文字列
 159  * @return {Boolean} 上記の条件に一致しているならtrue、そうでなければfalse
 160  */
 161 JSDOC.Lang.isWordChar = function(str) {
 162     return /^[a-zA-Z0-9$_.]+$/.test(str);
 163 }
 164 
 165 /**
 166  * 指定された文字列が空白文字(スペース、タブなど。改行文字は含みません)であるか判定します。
 167  * @param {String} str 判定対象の文字列
 168  * @return {Boolean} 空白文字ならtrue、そうでなければfalse
 169  */
 170 JSDOC.Lang.isSpace = function(str) {
 171     return (typeof JSDOC.Lang.whitespace(str) != "undefined");
 172 }
 173 
 174 /**
 175  * 指定された文字列が改行文字であるか判定します。
 176  * @param {String} str 判定対象の文字列
 177  * @return {Boolean} 改行文字ならtrue、そうでなければfalse
 178  */
 179 JSDOC.Lang.isNewline = function(str) {
 180     return (typeof JSDOC.Lang.newline(str) != "undefined");
 181 }