org.chromium.debug.ui/src/org/chromium/debug/ui/editors/JsSourceViewerConfiguration.java
changeset 2 e4420d2515f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.chromium.debug.ui/src/org/chromium/debug/ui/editors/JsSourceViewerConfiguration.java	Wed Dec 23 17:13:18 2009 -0800
@@ -0,0 +1,69 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.debug.ui.editors;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.rules.BufferedRuleBasedScanner;
+import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
+
+/**
+ * A JavaScript source viewer configuration.
+ */
+public class JsSourceViewerConfiguration extends TextSourceViewerConfiguration {
+
+  private static class MultilineCommentScanner extends BufferedRuleBasedScanner {
+    public MultilineCommentScanner(TextAttribute attr) {
+      setDefaultReturnToken(new Token(attr));
+    }
+  }
+
+  private static final String[] CONTENT_TYPES = new String[] {
+      IDocument.DEFAULT_CONTENT_TYPE,
+      JsPartitionScanner.JSDOC,
+      JsPartitionScanner.MULTILINE_COMMENT
+  };
+
+  private final JsCodeScanner scanner = new JsCodeScanner();
+
+  @Override
+  public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
+    return new JsDebugTextHover();
+  }
+
+  @Override
+  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
+    PresentationReconciler pr = new PresentationReconciler();
+    pr.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
+    setDamagerRepairer(pr, new DefaultDamagerRepairer(scanner), IDocument.DEFAULT_CONTENT_TYPE);
+    setDamagerRepairer(
+        pr, new DefaultDamagerRepairer(new MultilineCommentScanner(scanner.getCommentAttribute())),
+        JsPartitionScanner.MULTILINE_COMMENT);
+    setDamagerRepairer(
+        pr, new DefaultDamagerRepairer(new MultilineCommentScanner(scanner.getJsDocAttribute())),
+        JsPartitionScanner.JSDOC);
+    return pr;
+  }
+
+  private void setDamagerRepairer(
+      PresentationReconciler pr,
+      DefaultDamagerRepairer damagerRepairer,
+      String tokenType) {
+    pr.setDamager(damagerRepairer, tokenType);
+    pr.setRepairer(damagerRepairer, tokenType);
+  }
+
+  @Override
+  public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
+    return CONTENT_TYPES;
+  }
+
+}