Changeset 187


Ignore:
Timestamp:
10/30/02 20:36:30 (21 years ago)
Author:
piso
Message:

Indentation (work in progress).

File:
1 edited

Legend:

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

    r172 r187  
    33 *
    44 * Copyright (C) 1998-2002 Peter Graves
    5  * $Id: LispMode.java,v 1.10 2002-10-21 17:01:28 piso Exp $
     5 * $Id: LispMode.java,v 1.11 2002-10-30 20:36:30 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2323
    2424import java.awt.event.KeyEvent;
     25import org.armedbear.lisp.*;
    2526
    2627public class LispMode extends AbstractMode implements Constants, Mode
     
    119120    }
    120121
     122    private final String[] specials = new String[] {
     123        "case", "ecase", "do", "do*", "flet", "lambda", "let", "let*", "loop",
     124        "progn", "typecase", "unless", "when"
     125    };
     126   
     127    private final String[] hemlockSpecials = new String[] {
     128        "frob", "with-mark"
     129    };
     130   
    121131    public int getCorrectIndentation(Line line, Buffer buffer)
    122132    {
    123         if (line.flags() == STATE_QUOTE)
    124             return 0;
    125         Line model = findModel(line);
     133        final Line model = findModel(line);
    126134        if (model == null)
    127135            return 0;
     136        final int modelIndent = buffer.getIndentation(model);
    128137        final String modelTrim = model.trim();
     138        if (line.flags() == STATE_QUOTE) {
     139            if (modelTrim.length() > 0 && modelTrim.charAt(0) == '"')
     140                return modelIndent + 1;
     141            else
     142                return modelIndent;
     143        }
    129144        if (modelTrim.length() == 0)
    130145            return 0;
    131146        if (modelTrim.charAt(0) == ';')
    132             return buffer.getIndentation(model);
    133 
     147            return modelIndent;
    134148        final int indentSize = buffer.getIndentSize();
    135149        Position pos = findContainingSexp(new Position(line, 0));
     
    147161                // Otherwise...
    148162                String token = gatherToken(it.getPosition());
    149                 if (token.equals("if")) {
    150                     int depth = depth(line, buffer);
    151                     int modelDepth = depth(model, buffer);
    152                     if (pos.getLine() == model || modelDepth > depth)
    153                         return buffer.getCol(pos) + indentSize * 2;
    154                     else
    155                         return buffer.getCol(pos) + indentSize;
    156                 }
    157                 if (token.equals("prog1")) {
    158                     if (pos.getLine() == model)
    159                         return buffer.getCol(pos) + indentSize * 2;
    160                     else
    161                         return buffer.getCol(pos) + indentSize;
    162                 }
    163                 if (token.equals("let"))
    164                     return buffer.getCol(pos) + indentSize;
    165                 if (token.equals("while"))
    166                     return buffer.getCol(pos) + indentSize;
    167                 if (token.equals("when"))
    168                     return buffer.getCol(pos) + indentSize;
    169                 if (token.equals("unless"))
    170                     return buffer.getCol(pos) + indentSize;
    171                 if (token.equals("unwind-protect"))
    172                     return buffer.getCol(pos) + indentSize;
    173163                if (token.startsWith("def"))
    174164                    return buffer.getCol(pos) + indentSize;
    175                 pos = forwardSexp(pos);
    176                 if (pos != null)
    177                     return buffer.getCol(pos);
    178                 break; // Fall through.
    179             }
    180         }
    181 
    182         int depth = depth(line, buffer);
    183         if (depth > 0)
    184             return indentSize * depth;
     165                if (Utilities.isOneOf(token, specials))
     166                    return buffer.getCol(pos) + indentSize;
     167                if (Utilities.isOneOf(token, hemlockSpecials))
     168                    return buffer.getCol(pos) + indentSize;
     169                Position next = forwardSexp(pos);
     170                if (next != null && next.getLine() == pos.getLine())
     171                    return buffer.getCol(next);
     172                return buffer.getCol(pos) + 1;
     173            }
     174        }
    185175        return 0;
    186176    }
Note: See TracChangeset for help on using the changeset viewer.