Changeset 8599


Ignore:
Timestamp:
02/17/05 18:41:50 (16 years ago)
Author:
piso
Message:

getIdentifier()

File:
1 edited

Legend:

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

    r8596 r8599  
    33 *
    44 * Copyright (C) 1998-2005 Peter Graves
    5  * $Id: LispMode.java,v 1.89 2005-02-17 15:47:07 piso Exp $
     5 * $Id: LispMode.java,v 1.90 2005-02-17 18:41:50 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    156156        if (offset < limit) {
    157157            char c = line.charAt(offset);
    158 
    159             if (c == ':') {
    160                 if (offset == 0 || !isIdentifierPart(line.charAt(offset - 1)))
     158            if (c == '#') {
     159                if (offset < limit && line.charAt(offset + 1) == ':')
     160                    ; // Uninterned symbol.
     161                else
     162                    return null;
     163            } else if (c == ':') {
     164                if (offset == 0)
    161165                    ; // OK, we're looking at the first character of a keyword.
    162                 else
    163                     return null; // We're looking at an embedded ':'.
     166                else {
     167                    c = line.charAt(offset - 1);
     168                    if (c == '#')
     169                        --offset; // Uninterned symbol (e.g. "#:FOO").
     170                    else if (!isIdentifierPart(c))
     171                        ; // Keyword.
     172                    else
     173                        return null; // Embedded ':'.
     174                }
    164175            } else if (isIdentifierPart(c)) {
    165176                // Backtrack to find the start of the identifier.
     
    178189                                break;
    179190                            }
     191                            if (c == '#') {
     192                                // Uninterned symbol.
     193                                --offset;
     194                                break;
     195                            }
    180196                            if (!isIdentifierPart(line.charAt(offset - 1)))
    181197                                break; // It's a keyword.
     
    190206            } else
    191207                return null;
    192 
    193208            // Now we're looking at the first character of the identifier.
    194209            c = line.charAt(offset);
    195210            FastStringBuffer sb = new FastStringBuffer(c);
     211            if (c == '#') {
     212                if (++offset < limit) {
     213                    c = line.charAt(offset);
     214                    Debug.assertTrue(c == ':');
     215                    sb.append(c);
     216                }
     217            }
    196218            while (++offset < limit) {
    197219                c = line.charAt(offset);
Note: See TracChangeset for help on using the changeset viewer.