/*
   * @see SourceViewerConfiguration#getPresentationReconciler(ISourceViewer)
   */
  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {

    PresentationReconciler reconciler = new JavaPresentationReconciler();
    reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));

    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getCodeScanner());
    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

    dr = new DefaultDamagerRepairer(getJavaDocScanner());
    reconciler.setDamager(dr, IJavaPartitions.JAVA_DOC);
    reconciler.setRepairer(dr, IJavaPartitions.JAVA_DOC);

    dr = new DefaultDamagerRepairer(getMultilineCommentScanner());
    reconciler.setDamager(dr, IJavaPartitions.JAVA_MULTI_LINE_COMMENT);
    reconciler.setRepairer(dr, IJavaPartitions.JAVA_MULTI_LINE_COMMENT);

    dr = new DefaultDamagerRepairer(getSinglelineCommentScanner());
    reconciler.setDamager(dr, IJavaPartitions.JAVA_SINGLE_LINE_COMMENT);
    reconciler.setRepairer(dr, IJavaPartitions.JAVA_SINGLE_LINE_COMMENT);

    dr = new DefaultDamagerRepairer(getStringScanner());
    reconciler.setDamager(dr, IJavaPartitions.JAVA_STRING);
    reconciler.setRepairer(dr, IJavaPartitions.JAVA_STRING);

    dr = new DefaultDamagerRepairer(getStringScanner());
    reconciler.setDamager(dr, IJavaPartitions.JAVA_CHARACTER);
    reconciler.setRepairer(dr, IJavaPartitions.JAVA_CHARACTER);

    return reconciler;
  }
  @Override
  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {

    PresentationReconciler reconciler = new DartPresentationReconciler();
    reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));

    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getCodeScanner());
    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

    dr = new DefaultDamagerRepairer(getJavaDocScanner());
    reconciler.setDamager(new DartIndiscriminateDamager(), DartPartitions.DART_DOC);
    reconciler.setRepairer(dr, DartPartitions.DART_DOC);
    reconciler.setDamager(new DartIndiscriminateDamager(), DartPartitions.DART_SINGLE_LINE_DOC);
    reconciler.setRepairer(dr, DartPartitions.DART_SINGLE_LINE_DOC);

    dr = new DefaultDamagerRepairer(getMultilineCommentScanner());
    reconciler.setDamager(dr, DartPartitions.DART_MULTI_LINE_COMMENT);
    reconciler.setRepairer(dr, DartPartitions.DART_MULTI_LINE_COMMENT);

    dr = new DefaultDamagerRepairer(getSinglelineCommentScanner());
    reconciler.setDamager(dr, DartPartitions.DART_SINGLE_LINE_COMMENT);
    reconciler.setRepairer(dr, DartPartitions.DART_SINGLE_LINE_COMMENT);

    dr = new DefaultDamagerRepairer(getStringScanner());
    reconciler.setDamager(dr, DartPartitions.DART_STRING);
    reconciler.setRepairer(dr, DartPartitions.DART_STRING);

    dr = new DefaultDamagerRepairer(getMultilineStringScanner());
    reconciler.setDamager(dr, DartPartitions.DART_MULTI_LINE_STRING);
    reconciler.setRepairer(dr, DartPartitions.DART_MULTI_LINE_STRING);

    return reconciler;
  }
  /**
   * This code is used to activate syntax coloring for each section detected by the
   * XWikiPartitionner The partitioner is activated in createDocument in PageDocumentProvider.java
   *
   * @see PageDocumentProvider#createDocument(Object)
   */
  @Override
  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
    PresentationReconciler reconciler = new PresentationReconciler();
    reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));

    /* Use the XWiki markup for tables and default content. */
    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(new XWikiMarkupScanner());
    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

    reconciler.setDamager(dr, XWikiPartitionScanner.XWIKI_TABLE);
    reconciler.setRepairer(dr, XWikiPartitionScanner.XWIKI_TABLE);

    /* Use the Velocity Scanner for velocity blocks */
    dr = new DefaultDamagerRepairer(new VelocityScanner());
    reconciler.setDamager(dr, XWikiPartitionScanner.VELOCITY);
    reconciler.setRepairer(dr, XWikiPartitionScanner.VELOCITY);

    /* Use the Groovy Scanner for groovy blocks */
    dr = new DefaultDamagerRepairer(new GroovyScanner());
    reconciler.setDamager(dr, XWikiPartitionScanner.GROOVY);
    reconciler.setRepairer(dr, XWikiPartitionScanner.GROOVY);

    /* Use a uniform style for html blocks. */
    RuleBasedScanner codeScanner = new RuleBasedScanner();
    codeScanner.setDefaultReturnToken(
        new Token(Preferences.getDefault().getTextAttribute(Preferences.Style.HTML)));
    dr = new DefaultDamagerRepairer(codeScanner);
    reconciler.setDamager(dr, XWikiPartitionScanner.XWIKI_HTML);
    reconciler.setRepairer(dr, XWikiPartitionScanner.XWIKI_HTML);

    /* Use a uniform style for code blocks. */
    codeScanner = new RuleBasedScanner();
    codeScanner.setDefaultReturnToken(
        new Token(Preferences.getDefault().getTextAttribute(Preferences.Style.CODE)));
    dr = new DefaultDamagerRepairer(codeScanner);
    reconciler.setDamager(dr, XWikiPartitionScanner.XWIKI_CODE);
    reconciler.setRepairer(dr, XWikiPartitionScanner.XWIKI_CODE);

    /* Use a uniform style for pre blocks. */
    RuleBasedScanner preScanner = new RuleBasedScanner();
    preScanner.setDefaultReturnToken(
        new Token(Preferences.getDefault().getTextAttribute(Preferences.Style.CODE)));
    dr = new DefaultDamagerRepairer(preScanner);
    reconciler.setDamager(dr, XWikiPartitionScanner.XWIKI_PRE);
    reconciler.setRepairer(dr, XWikiPartitionScanner.XWIKI_PRE);

    RuleBasedScanner javadocScanner = new GroovyScanner();
    dr = new DefaultDamagerRepairer(javadocScanner);
    reconciler.setDamager(dr, GroovyPartitionScanner.GROOVY_DEFAULT);
    reconciler.setRepairer(dr, GroovyPartitionScanner.GROOVY_DEFAULT);

    return reconciler;
  }
  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {

    synchronized (lock) {
      if (reconciler == null) {
        reconciler = new PresentationReconciler();
        reconciler.setDocumentPartitioning(IPythonPartitions.PYTHON_PARTITION_TYPE);

        DefaultDamagerRepairer dr;

        // DefaultDamagerRepairer implements both IPresentationDamager, IPresentationRepairer
        // IPresentationDamager::getDamageRegion does not scan, just
        // returns the intersection of document event, and partition region
        // IPresentationRepairer::createPresentation scans
        // gets each token, and sets text attributes according to token

        // We need to cover all the content types from PyPartitionScanner

        // Comments have uniform color
        commentScanner = new PyColoredScanner(colorCache, PydevEditorPrefs.COMMENT_COLOR);
        dr = new DefaultDamagerRepairer(commentScanner);
        reconciler.setDamager(dr, IPythonPartitions.PY_COMMENT);
        reconciler.setRepairer(dr, IPythonPartitions.PY_COMMENT);

        // Backquotes have uniform color
        backquotesScanner = new PyColoredScanner(colorCache, PydevEditorPrefs.BACKQUOTES_COLOR);
        dr = new DefaultDamagerRepairer(backquotesScanner);
        reconciler.setDamager(dr, IPythonPartitions.PY_BACKQUOTES);
        reconciler.setRepairer(dr, IPythonPartitions.PY_BACKQUOTES);

        // Strings have uniform color
        stringScanner = new PyColoredScanner(colorCache, PydevEditorPrefs.STRING_COLOR);
        dr = new DefaultDamagerRepairer(stringScanner);
        reconciler.setDamager(dr, IPythonPartitions.PY_SINGLELINE_STRING1);
        reconciler.setRepairer(dr, IPythonPartitions.PY_SINGLELINE_STRING1);
        reconciler.setDamager(dr, IPythonPartitions.PY_SINGLELINE_STRING2);
        reconciler.setRepairer(dr, IPythonPartitions.PY_SINGLELINE_STRING2);
        reconciler.setDamager(dr, IPythonPartitions.PY_MULTILINE_STRING1);
        reconciler.setRepairer(dr, IPythonPartitions.PY_MULTILINE_STRING1);
        reconciler.setDamager(dr, IPythonPartitions.PY_MULTILINE_STRING2);
        reconciler.setRepairer(dr, IPythonPartitions.PY_MULTILINE_STRING2);

        // Default content is code, we need syntax highlighting
        codeScanner = new PyCodeScanner(colorCache);
        dr = new DefaultDamagerRepairer(codeScanner);
        reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
        reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
      }
    }

    return reconciler;
  }
  @Override
  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
    PresentationReconciler reconciler = new PresentationReconciler();
    reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));

    MarkupDamagerRepairer damagerRepairer = new MarkupDamagerRepairer(getMarkupScanner());
    for (String partitionType : FastMarkupPartitioner.ALL_CONTENT_TYPES) {
      reconciler.setDamager(damagerRepairer, partitionType);
      reconciler.setRepairer(damagerRepairer, partitionType);
    }
    reconciler.setDamager(damagerRepairer, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(damagerRepairer, IDocument.DEFAULT_CONTENT_TYPE);

    return reconciler;
  }
 @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;
 }
  @Override
  public IPresentationReconciler getPresentationReconciler(final ISourceViewer aSourceViewer) {

    initProviders();

    // Scanners
    RestLiteralBlockScanner literalBlockScanner = new RestLiteralBlockScanner(pRuleProvider);

    RestSectionBlockScanner sectionBlockScanner = new RestSectionBlockScanner(pRuleProvider);

    RestSourceBlockScanner sourceBlockScanner = new RestSourceBlockScanner(pTokenProvider);

    RestTableBlockScanner tableBlockScanner = new RestTableBlockScanner(pRuleProvider);

    // Reconciler
    PresentationReconciler reconciler = new PresentationReconciler();
    reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(aSourceViewer));

    // Text data
    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getDocumentScanner());

    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

    // Literal blocks
    dr = new DefaultDamagerRepairer(literalBlockScanner);
    reconciler.setDamager(dr, RestPartitionScanner.LITERAL_BLOCK);
    reconciler.setRepairer(dr, RestPartitionScanner.LITERAL_BLOCK);

    // Section blocks
    dr = new DefaultDamagerRepairer(sectionBlockScanner);
    reconciler.setDamager(dr, RestPartitionScanner.SECTION_BLOCK);
    reconciler.setRepairer(dr, RestPartitionScanner.SECTION_BLOCK);

    // Source blocks
    dr = new DefaultDamagerRepairer(sourceBlockScanner);
    reconciler.setDamager(dr, RestPartitionScanner.SOURCE_BLOCK);
    reconciler.setRepairer(dr, RestPartitionScanner.SOURCE_BLOCK);

    // Table blocks
    dr = new DefaultDamagerRepairer(tableBlockScanner);
    reconciler.setDamager(dr, RestPartitionScanner.GRID_TABLE_BLOCK);
    reconciler.setRepairer(dr, RestPartitionScanner.GRID_TABLE_BLOCK);

    return reconciler;
  }
  @Override
  public IPresentationReconciler getPresentationReconciler(final ISourceViewer sourceViewer) {
    final PresentationReconciler reconciler = new ErlangPresentationReconciler();
    reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
    DefaultDamagerRepairer dr = new ErlDamagerRepairer(codeScanner);
    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
    dr = new ErlDamagerRepairer(commentScanner);
    reconciler.setDamager(dr, IErlangPartitions.ERLANG_COMMENT);
    reconciler.setRepairer(dr, IErlangPartitions.ERLANG_COMMENT);
    dr = new ErlDamagerRepairer(stringScanner);
    reconciler.setDamager(dr, IErlangPartitions.ERLANG_STRING);
    reconciler.setRepairer(dr, IErlangPartitions.ERLANG_STRING);
    dr = new ErlDamagerRepairer(qatomScanner);
    reconciler.setDamager(dr, IErlangPartitions.ERLANG_QATOM);
    reconciler.setRepairer(dr, IErlangPartitions.ERLANG_QATOM);
    dr = new ErlDamagerRepairer(charScanner);
    reconciler.setDamager(dr, IErlangPartitions.ERLANG_CHARACTER);
    reconciler.setRepairer(dr, IErlangPartitions.ERLANG_CHARACTER);

    return reconciler;
  }