diff dwtx/jface/text/ConfigurableLineTracker.d @ 129:eb30df5ca28b

Added JFace Text sources
author Frank Benoit <benoit@tionex.de>
date Sat, 23 Aug 2008 19:10:48 +0200
parents
children c4fb132a086c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwtx/jface/text/ConfigurableLineTracker.d	Sat Aug 23 19:10:48 2008 +0200
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
+ *******************************************************************************/
+module dwtx.jface.text.ConfigurableLineTracker;
+
+import dwt.dwthelper.utils;
+
+import dwtx.core.runtime.Assert;
+
+
+/**
+ * Standard implementation of a generic
+ * {@link dwtx.jface.text.ILineTracker}.
+ * <p>
+ * The line tracker can be configured with the set of legal line delimiters.
+ * Line delimiters are unconstrained. The line delimiters are used to compute
+ * the tracker's line structure. In the case of overlapping line delimiters, the
+ * longest line delimiter is given precedence of the shorter ones.
+ * <p>
+ * This class is not intended to be subclassed.
+ * </p>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ConfigurableLineTracker : AbstractLineTracker {
+
+
+    /** The strings which are considered being the line delimiter */
+    private String[] fDelimiters;
+    /** A predefined delimiter information which is always reused as return value */
+    private DelimiterInfo fDelimiterInfo= new DelimiterInfo();
+
+
+    /**
+     * Creates a standard line tracker for the given line delimiters.
+     *
+     * @param legalLineDelimiters the tracker's legal line delimiters,
+     *      may not be <code>null</code> and must be longer than 0
+     */
+    public ConfigurableLineTracker(String[] legalLineDelimiters) {
+        Assert.isTrue(legalLineDelimiters !is null && legalLineDelimiters.length > 0);
+        fDelimiters= TextUtilities.copy(legalLineDelimiters);
+    }
+
+    /*
+     * @see dwtx.jface.text.ILineTracker#getLegalLineDelimiters()
+     */
+    public String[] getLegalLineDelimiters() {
+        return TextUtilities.copy(fDelimiters);
+    }
+
+    /*
+     * @see dwtx.jface.text.AbstractLineTracker#nextDelimiterInfo(java.lang.String, int)
+     */
+    protected DelimiterInfo nextDelimiterInfo(String text, int offset) {
+        if (fDelimiters.length > 1) {
+            int[] info= TextUtilities.indexOf(fDelimiters, text, offset);
+            if (info[0] is -1)
+                return null;
+            fDelimiterInfo.delimiterIndex= info[0];
+            fDelimiterInfo.delimiter= fDelimiters[info[1]];
+        } else {
+            int index= text.indexOf(fDelimiters[0], offset);
+            if (index is -1)
+                return null;
+            fDelimiterInfo.delimiterIndex= index;
+            fDelimiterInfo.delimiter= fDelimiters[0];
+        }
+
+        fDelimiterInfo.delimiterLength= fDelimiterInfo.delimiter.length();
+        return fDelimiterInfo;
+    }
+}