001: /*
002: * $Id: Name.java,v 1.2 2002/09/16 08:05:03 jkl Exp $
003: *
004: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
005: *
006: * Use is subject to license terms, as defined in
007: * Anvil Sofware License, Version 1.1. See LICENSE
008: * file, or http://njet.org/license-1.1.txt
009: */
010: package anvil.script;
011:
012: import anvil.script.parser.ParserBaseConstants;
013: import anvil.script.parser.Token;
014:
015: public class Name implements ParserBaseConstants {
016:
017: private int[] _kind = null;
018: private String[] _name = null;
019: private String _as = null;
020: private int _size = 0;
021: private boolean _star = false;
022:
023: public Name() {
024: this (4);
025: }
026:
027: public Name(int size) {
028: _kind = new int[size];
029: _name = new String[size];
030: }
031:
032: public StringBuffer toString(int start, StringBuffer buffer) {
033: for (int i = start; i < _size; i++) {
034: if (i > start) {
035: buffer.append('.');
036: }
037: buffer.append(_name[i]);
038: }
039: return buffer;
040: }
041:
042: public String toString() {
043: return toString(0, new StringBuffer(32)).toString();
044: }
045:
046: public String toString(int start) {
047: return toString(start, new StringBuffer(32)).toString();
048: }
049:
050: public Name add(String name) {
051: return add(SYMBOL, name);
052: }
053:
054: public Name add(Token token) {
055: return add(token.kind, token.image);
056: }
057:
058: public Name add(int kind, String name) {
059: int length = _name.length;
060: if (_size >= length) {
061: String[] names = new String[length + 4];
062: System.arraycopy(_name, 0, names, 0, length);
063: _name = names;
064: int[] kinds = new int[length + 4];
065: System.arraycopy(_kind, 0, kinds, 0, length);
066: _kind = kinds;
067: }
068: _kind[_size] = kind;
069: _name[_size++] = name;
070: return this ;
071: }
072:
073: public int getKind(int index) {
074: return _kind[index];
075: }
076:
077: public String get(int index) {
078: return _name[index];
079: }
080:
081: public int size() {
082: return _size;
083: }
084:
085: public void setAs(String as) {
086: _as = as;
087: }
088:
089: public String as() {
090: if (_as != null) {
091: return _as;
092: } else {
093: return _name[_size - 1];
094: }
095: }
096:
097: public boolean hasStar() {
098: return _star;
099: }
100:
101: public void enableStar() {
102: _star = true;
103: }
104: }
|