String paramValue = b.toString();  if (!setSpecialParameter(lastParamName, paramValue)) { addGenericParameter(lastParamName, paramValue); }
addParameter(lastParamName, b.toString());
        public Macro(int start, int end) {            this.start = start;            this.end = end;            int state = HANDLER;            boolean escape = false;            char quotechar = '\u0000';            String lastParamName = null;            StringBuffer b = new StringBuffer();            for (int i = start + 2; i < (end - 2); i++) {                switch (source[i]) {                    case '/':                        b.append(source[i]);                        escape = false;                        if (state == HANDLER && "//".equals(b.toString())) {                            isCommentMacro = true;                            return;                        }                        break;                    case '.':                        if (state == HANDLER) {                            handler = b.toString().trim();                            b.setLength(0);                            state = MACRO;                        } else {                            b.append(source[i]);                            escape = false;                        }                        break;                    case '\\':                        if (escape) {                            b.append(source[i]);                        }                        escape = !escape;                        break;                    case '"':                    case '\'':                        if (!escape && (state == PARAMVALUE)) {                            if (quotechar == source[i]) {                                String paramValue = b.toString();                                if (!setSpecialParameter(lastParamName, paramValue)) {                                    addGenericParameter(lastParamName, paramValue);                                }                                lastParamName = null;                                b.setLength(0);                                state = PARAMNAME;                                quotechar = '\u0000';                            } else if (quotechar == '\u0000') {                                quotechar = source[i];                                b.setLength(0);                            } else {                                b.append(source[i]);                            }                        } else {                            b.append(source[i]);                        }                        escape = false;                        break;                    case ' ':                    case '\t':                    case '\n':                    case '\r':                    case '\f':                        if ((state == MACRO) || ((state == HANDLER) && (b.length() > 0))) {                            name = b.toString().trim();                            b.setLength(0);                            state = PARAMNAME;                        } else if ((state == PARAMVALUE) && (quotechar == '\u0000')) {                            String paramValue = b.toString();                            if (!setSpecialParameter(lastParamName, paramValue)) {                                addGenericParameter(lastParamName, paramValue);                            }                            lastParamName = null;                            b.setLength(0);                            state = PARAMNAME;                        } else if (state == PARAMVALUE) {                            b.append(source[i]);                            escape = false;                        } else {                            b.setLength(0);                        }                        break;                    case '=':                        if (state == PARAMNAME) {                            lastParamName = b.toString().trim();                            b.setLength(0);                            state = PARAMVALUE;                        } else {                            b.append(source[i]);                            escape = false;                        }                        break;                    default:                        b.append(source[i]);                        escape = false;                }            }            if (b.length() > 0) {                if (lastParamName != null) {                    String paramValue = b.toString();                    if (!setSpecialParameter(lastParamName, paramValue)) {                        addGenericParameter(lastParamName, paramValue);                    }                } else if (state <= MACRO) {                    name = b.toString().trim();                }            }            if (handler == null) {                fullName = name;            } else {                fullName = handler + "." + name;            }        }