Changeset 10090


Ignore:
Timestamp:
10/12/05 14:49:41 (16 years ago)
Author:
piso
Message:

getArgumentForDescribe(): strip prompt.

File:
1 edited

Legend:

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

    r10082 r10090  
    33 *
    44 * Copyright (C) 2002-2005 Peter Graves
    5  * $Id: LispShellMode.java,v 1.17 2005-10-06 12:28:37 piso Exp $
     5 * $Id: LispShellMode.java,v 1.18 2005-10-12 14:49:41 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2222package org.armedbear.j;
    2323
     24import gnu.regexp.RE;
     25import gnu.regexp.REMatch;
    2426import java.awt.event.KeyEvent;
    2527
     
    160162            return;
    161163        }
     164        LispShell lisp = (LispShell) buffer;
    162165        if (s == null) {
    163166            if (editor.getDot() == null)
     
    165168            s = editor.getSelectionOnCurrentLine();
    166169            if (s == null) {
    167                 s = getArgumentForDescribe(editor.getDot());
     170                s = getArgumentForDescribe(lisp, editor.getDot());
    168171                if (s == null) {
    169172                    if (editor.getDot().equals(buffer.getEnd()))
     
    174177        if (s == null || s.length() == 0)
    175178            return;
    176         ((LispShell)buffer).describe(s);
    177     }
    178 
    179     public static String getArgumentForDescribe(Position pos)
     179        lisp.describe(s);
     180    }
     181
     182    public static String getArgumentForDescribe(LispShell lisp, Position pos)
    180183    {
    181184        final Line line = pos.getLine();
    182185        int offset = pos.getOffset();
    183         final int limit = line.length();
     186        String s = line.getText();
     187        RE promptRE = lisp.getPromptRE();
     188        if (promptRE != null) {
     189            REMatch match = promptRE.getMatch(s);
     190            if (match != null) {
     191                int end = match.getEndIndex();
     192                s = s.substring(end);
     193                offset -= end;
     194                if (offset < 0)
     195                    return null;
     196            }
     197        }
     198        final int limit = s.length();
    184199        if (limit == 0)
    185200            return null;
    186201        if (offset == limit)
    187202            --offset;
    188         while (line.charAt(offset) == ' ') {
     203        while (s.charAt(offset) == ' ') {
    189204            if (offset > 0)
    190205                --offset;
     
    192207                break;
    193208        }
    194         char c = line.charAt(offset);
     209        char c = s.charAt(offset);
    195210        if (c == '(' || c == ')')
    196211            return null;
     
    199214            while (offset > 0) {
    200215                --offset;
    201                 c = line.charAt(offset);
     216                c = s.charAt(offset);
    202217                if (c == '(' || c == ')')
    203218                    return null;
     
    210225        // Now we're looking at the first character of the token, if there
    211226        // is one.
    212         c = line.charAt(offset);
     227        c = s.charAt(offset);
    213228        if (c == ' ')
    214229            return null;
    215230        FastStringBuffer sb = new FastStringBuffer(c);
    216231        while (++offset < limit) {
    217             c = line.charAt(offset);
     232            c = s.charAt(offset);
    218233            if (c == '(' || c == ')')
    219234                return null;
Note: See TracChangeset for help on using the changeset viewer.