Changeset 8596


Ignore:
Timestamp:
02/17/05 15:47:07 (16 years ago)
Author:
piso
Message:

isInComment()

File:
1 edited

Legend:

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

    r8593 r8596  
    33 *
    44 * Copyright (C) 1998-2005 Peter Graves
    5  * $Id: LispMode.java,v 1.88 2005-02-16 21:40:16 piso Exp $
     5 * $Id: LispMode.java,v 1.89 2005-02-17 15:47:07 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    289289        }
    290290        return inQuote;
     291    }
     292
     293    public boolean isInComment(Buffer buffer, Position pos)
     294    {
     295        if (buffer.needsParsing())
     296            buffer.getFormatter().parseBuffer();
     297        final Line line = pos.getLine();
     298        final int offset = pos.getOffset();
     299        int state = line.flags();
     300        for (int i = 0; i < offset; i++) {
     301            char c = line.charAt(i);
     302            if (c == '\\') {
     303                // Escape.
     304                ++i;
     305            } else if (state == STATE_COMMENT) {
     306                if (c == '|' && i < offset && line.charAt(i + 1) == '#') {
     307                    state = STATE_NEUTRAL; // FIXME nested #| |# comments
     308                    ++i; // skip '#'
     309                }
     310            } else if (state == STATE_QUOTE) {
     311                if (c == '"')
     312                    state = STATE_NEUTRAL;
     313            } else if (c == '"') {
     314                state = STATE_QUOTE;
     315            } else if (c == '#' && i < offset && line.charAt(i + 1) == '|') {
     316                state = STATE_COMMENT;
     317                ++i; // skip '|'
     318            } else if (c == ';')
     319                return true;
     320        }
     321        return state == STATE_COMMENT;
    291322    }
    292323
Note: See TracChangeset for help on using the changeset viewer.