Changeset 202


Ignore:
Timestamp:
11/05/02 02:24:53 (20 years ago)
Author:
piso
Message:

Recognize DEFUN_INT as well as DEFUN; made gatherDefunName() more accurate.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/j/CTagger.java

    r200 r202  
    33 *
    44 * Copyright (C) 1998-2002 Peter Graves
    5  * $Id: CTagger.java,v 1.3 2002-11-05 01:25:52 piso Exp $
     5 * $Id: CTagger.java,v 1.4 2002-11-05 02:24:53 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    112112            }
    113113            if (isIdentifierStart(c)) {
    114                 String s = gatherToken();
     114                tokenStart = pos.copy();
     115                String s = gatherToken(pos);
    115116                if (s.startsWith("ARGS") && lynxArgsMacroRE.isMatch(s)) {
    116117                    // Lynx "ARGSnn" macro.
     
    119120                    // Lynx macro.
    120121                    state = METHOD_NAME;
    121                 } else if (s.equals("DEFUN")) {
     122                } else if (isDefunStart(s)) {
    122123                    // Emacs macro.
    123                     while (!isIdentifierStart(c = pos.getChar())) {
     124                    while (true) {
     125                        c = pos.getChar();
     126                        if (c == '"') {
     127                            pos.next();
     128                            break;
     129                        }
    124130                        if (!pos.next())
    125131                            break;
    126132                    }
    127                     gatherDefunName();
     133                    tokenStart = pos.copy();
     134                    token = gatherDefunName(pos);
    128135                    tags.add(new CTag(token, tokenStart));
    129136                    while ((c = pos.getChar()) != '{') {
     
    133140                    if (c == '{')
    134141                        skipBrace();
    135                 } else {
    136                     tokenStart = new Position(pos.getLine(), pos.getOffset() - s.length());
     142                } else
    137143                    token = s;
    138                 }
    139144                continue;
    140145            }
     
    149154    }
    150155
    151     private String gatherToken()
     156    private String gatherToken(Position pos)
    152157    {
    153158        FastStringBuffer sb = new FastStringBuffer();
     
    160165        return sb.toString();
    161166    }
    162 
    163     private void gatherDefunName()
    164     {
    165         tokenStart = new Position(pos);
     167   
     168    private static boolean isDefunStart(String s)
     169    {
     170        if (s.length() < 5)
     171            return false;
     172        if (s.charAt(0) != 'D')
     173            return false;
     174        if (s.equals("DEFUN")) // Emacs, rep
     175            return true;
     176        if (s.equals("DEFUN_INT")) // rep
     177            return true;
     178        return false;
     179    }
     180
     181    private static String gatherDefunName(Position pos)
     182    {
    166183        FastStringBuffer sb = new FastStringBuffer();
    167184        char c;
    168         while ((c = pos.getChar()) != '"') {
     185        while ((c = pos.getChar()) != '"' && c != EOL) {
    169186            sb.append(c);
    170187            if (!pos.next())
    171188                break;
    172189        }
    173         token = sb.toString();
     190        return sb.toString();
    174191    }
    175192
Note: See TracChangeset for help on using the changeset viewer.