Changeset 8586


Ignore:
Timestamp:
02/16/05 13:49:43 (16 years ago)
Author:
piso
Message:

Indentation of multiline strings.

File:
1 edited

Legend:

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

    r8491 r8586  
    33 *
    44 * Copyright (C) 1998-2005 Peter Graves
    5  * $Id: LispMode.java,v 1.86 2005-02-06 13:27:17 piso Exp $
     5 * $Id: LispMode.java,v 1.87 2005-02-16 13:49:43 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    178178    public boolean isInQuote(Buffer buffer, Position pos)
    179179    {
    180         // This implementation only considers the current line.
    181180        final Line line = pos.getLine();
    182181        final int offset = pos.getOffset();
    183         boolean inQuote = false;
     182        boolean inQuote = (line.flags() == STATE_QUOTE);
    184183        for (int i = 0; i < offset; i++) {
    185184            char c = line.charAt(i);
     
    214213    };
    215214
     215    private static int findLastUnescapedQuote(Line line)
     216    {
     217        int index = -1;
     218        for (int i = line.length(); i-- > 0;) {
     219            if (line.charAt(i) == '"') {
     220                if (i == 0 || line.charAt(i - 1) != '\\')
     221                    return i;
     222            }
     223        }
     224        return -1;
     225    }
     226
    216227    public int getCorrectIndentation(Line line, Buffer buffer)
    217228    {
     
    222233        final String modelTrim = model.trim();
    223234        if (line.flags() == STATE_QUOTE) {
    224             if (modelTrim.length() > 0 && modelTrim.charAt(0) == '"')
    225                 return modelIndent + 1;
    226             else
    227                 return modelIndent;
     235            if (buffer.getBooleanProperty(Property.INDENT_STRINGS) ||
     236                modelTrim.endsWith("~"))
     237            {
     238                int index = findLastUnescapedQuote(model);
     239                if (index < 0)
     240                    return modelIndent;
     241                else
     242                    return buffer.getCol(model, index + 1);
     243            } else
     244                return 0;
    228245        }
    229246        if (modelTrim.length() == 0)
     
    335352    {
    336353        Line model = line.previous();
    337         if (line.flags() == STATE_COMMENT) {
     354        if (line.flags() == STATE_COMMENT || line.flags() == STATE_QUOTE) {
    338355            // Any non-blank line is an acceptable model.
    339356            while (model != null && model.isBlank())
Note: See TracChangeset for help on using the changeset viewer.