Changeset 4356


Ignore:
Timestamp:
10/14/03 00:12:36 (19 years ago)
Author:
piso
Message:

reverseFindMultilineRegExp()

File:
1 edited

Legend:

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

    r4352 r4356  
    33 *
    44 * Copyright (C) 1998-2002 Peter Graves
    5  * $Id: Search.java,v 1.5 2003-10-13 23:49:47 piso Exp $
     5 * $Id: Search.java,v 1.6 2003-10-14 00:12:36 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    176176    public final Position reverseFind(Buffer buffer, Position start)
    177177    {
    178         return regularExpression ? reverseFindRegExp(buffer, start) : reverseFindString(buffer, start);
     178        if (regularExpression) {
     179            if (isMultilinePattern)
     180                return reverseFindMultilineRegExp(buffer, start);
     181            else
     182                return reverseFindRegExp(buffer, start);
     183        } else
     184            return reverseFindString(buffer, start);
    179185    }
    180186
     
    419425    }
    420426
     427    private Position reverseFindMultilineRegExp(Buffer buffer, Position start)
     428    {
     429        if (re == null) {
     430            try {
     431                setREFromPattern();
     432            }
     433            catch (Throwable t) {
     434                Log.error(t);
     435                return null;
     436            }
     437        }
     438        int startIndex = buffer.getAbsoluteOffset(start);
     439        final String s = buffer.getText().substring(0, startIndex);
     440        while (startIndex >= 0) {
     441            match = findMatch(s, startIndex, -1);
     442            if (match != null) {
     443                if (!wholeWordsOnly)
     444                    break;
     445                if (Utilities.isDelimited(buffer.getMode(), s,
     446                                          match.getStartIndex(), match.getEndIndex()))
     447                    break;
     448            }
     449            --startIndex;
     450        }
     451        if (match == null)
     452            return null;
     453        return buffer.getPosition(match.getStartIndex());
     454    }
     455
    421456    // Search is restricted to region if endIndex >= 0.
    422457    private REMatch findMatch(String s, int startIndex, int endIndex)
Note: See TracChangeset for help on using the changeset viewer.