KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > DirectoryFormatter


1 /*
2  * DirectoryFormatter.java
3  *
4  * Copyright (C) 1998-2003 Peter Graves
5  * $Id: DirectoryFormatter.java,v 1.2 2003/05/12 02:07:32 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j;
23
24 import gnu.regexp.REMatch;
25
26 public final class DirectoryFormatter extends Formatter
27 {
28     // Formats.
29
private static final byte DIRECTORY_FORMAT_TEXT = 0;
30     private static final byte DIRECTORY_FORMAT_DIRECTORY = 1;
31     private static final byte DIRECTORY_FORMAT_SYMLINK = 2;
32     private static final byte DIRECTORY_FORMAT_TAGGED = 3;
33
34     private final Directory directory;
35
36     public DirectoryFormatter(Buffer buffer)
37     {
38         this.buffer = buffer;
39         directory = (Directory) buffer;
40     }
41
42     public LineSegmentList formatLine(Line line)
43     {
44         clearSegmentList();
45         if (line == null || line.length() == 0) {
46             addSegment("", DIRECTORY_FORMAT_TEXT);
47             return segmentList;
48         }
49         final String JavaDoc text = line.getText();
50         if (text.charAt(0) == 'T') {
51             // Tagged file.
52
int nameOffset = getNameOffset(text);
53             addSegment("T", DIRECTORY_FORMAT_TAGGED);
54             addSegment(text, 1, nameOffset, DIRECTORY_FORMAT_TEXT);
55             addSegment(text, nameOffset, DIRECTORY_FORMAT_TAGGED);
56             return segmentList;
57         }
58         final int index = text.indexOf(" -> ");
59         if (index >= 0) {
60             // Symbolic link.
61
int nameOffset = getNameOffset(text);
62             addSegment(text, 0, nameOffset, DIRECTORY_FORMAT_TEXT);
63             addSegment(text, nameOffset, index, DIRECTORY_FORMAT_SYMLINK);
64             addSegment(text, index, DIRECTORY_FORMAT_TEXT);
65             return segmentList;
66         }
67         final String JavaDoc trim = text.trim();
68         if (trim.startsWith("d") || trim.startsWith("<DIR>")) {
69             // Directory.
70
int nameOffset = getNameOffset(text);
71             addSegment(text, 0, nameOffset, DIRECTORY_FORMAT_TEXT);
72             addSegment(text, nameOffset, DIRECTORY_FORMAT_DIRECTORY);
73             return segmentList;
74         }
75         addSegment(text, DIRECTORY_FORMAT_TEXT);
76         return segmentList;
77     }
78
79     private int getNameOffset(String JavaDoc text)
80     {
81         REMatch match;
82         if (directory.isUsingNativeFormat())
83             match = Directory.getNativeMoveToFilenameRegExp().getMatch(text);
84         else
85             match = Directory.getInternalMoveToFilenameRegExp().getMatch(text);
86         return (match != null) ? match.getEndIndex() : text.length();
87     }
88
89     public FormatTable getFormatTable()
90     {
91         if (formatTable == null) {
92             formatTable = new FormatTable("DirectoryMode");
93             formatTable.addEntryFromPrefs(DIRECTORY_FORMAT_TEXT, "text");
94             formatTable.addEntryFromPrefs(DIRECTORY_FORMAT_DIRECTORY, "directory");
95             formatTable.addEntryFromPrefs(DIRECTORY_FORMAT_SYMLINK, "symlink");
96             formatTable.addEntryFromPrefs(DIRECTORY_FORMAT_TAGGED, "marked");
97         }
98         return formatTable;
99     }
100 }
101
Popular Tags