Adding text within a multiline comment will cause the
edited line to lose its colouring. Adding "*" will recolour it.
Something weird going on with the damager-repairers.
This code needs cleaning up and correcting.
Hey,
I was mucking about with a new editor for Handel C for my
project, and realised that the Sample XML Editor comes with
a damager/repairer for multiline comments. Here's the code,
should be simple to change it.:
// Source of NonRuleBasedDamagerRepairer:
//--------------------------------------------------------------
fDefaultTextAttribute = defaultTextAttribute;
\}
/\*\*
\* @see IPresentationRepairer\#setDocument\(IDocument\)
\*/
public void setDocument\(IDocument document\) \{
fDocument = document;
\}
/\*\*
\* Returns the end offset of the line that contains the
specified offset or
* if the offset is inside a line delimiter, the end offset
of the next line.
*
* @param offset the offset whose line end offset must be
computed
* @return the line end offset for the given offset
* @exception BadLocationException if offset is invalid in
the current document
*/
protected int endOfLineOf(int offset) throws
BadLocationException {
IRegion info = fDocument.getLineInformationOfOffset\(offset\);
if \(offset <= info.getOffset\(\) + info.getLength\(\)\)
return info.getOffset\(\) + info.getLength\(\);
int line = fDocument.getLineOfOffset\(offset\);
try \{
info = fDocument.getLineInformation\(line + 1\);
return info.getOffset\(\) + info.getLength\(\);
\} catch \(BadLocationException x\) \{
return fDocument.getLength\(\);
\}
\}
/\*\*
\* @see IPresentationDamager\#getDamageRegion\(ITypedRegion,
DocumentEvent, boolean)
*/
public IRegion getDamageRegion(
ITypedRegion partition,
DocumentEvent event,
boolean documentPartitioningChanged) {
if (!documentPartitioningChanged) {
try {
IRegion info =
fDocument.getLineInformationOfOffset\(event.getOffset\(\)\);
int start = Math.max\(partition.getOffset\(\),
info.getOffset());
int end =
event.getOffset\(\)
\+ \(event.getText\(\) == null
? event.getLength\(\)
: event.getText\(\).length\(\)\);
if \(info.getOffset\(\) <= end
&& end <= info.getOffset\(\) + info.getLength\(\)\) \{
// optimize the case of the same line
end = info.getOffset\(\) + info.getLength\(\);
\} else
end = endOfLineOf\(end\);
end =
Math.min\(
partition.getOffset\(\) + partition.getLength\(\),
end\);
return new Region\(start, end - start\);
\} catch \(BadLocationException x\) \{
\}
\}
return partition;
\}
/\*\*
\* @see
/\*\*
\* Adds style information to the given text presentation.
\*
\* @param presentation the text presentation to be extended
\* @param offset the offset of the range to be styled
\* @param length the length of the range to be styled
\* @param attr the attribute describing the style of the
range to be styled
*/
protected void addRange(
TextPresentation presentation,
int offset,
int length,
TextAttribute attr) {
if (attr != null)
presentation.addStyleRange(
new StyleRange(
offset,
length,
attr.getForeground(),
attr.getBackground(),
attr.getStyle()));
}
}
// Source from HCConfiguration
// ------------------------------------------
public IPresentationReconciler
getPresentationReconciler(ISourceViewer sourceViewer) {
PresentationReconciler reconciler = new
PresentationReconciler();
DefaultDamagerRepairer dr;
dr = new DefaultDamagerRepairer\(getScanner\(\)\);
reconciler.setDamager\(dr, IDocument.DEFAULT\_CONTENT\_TYPE\);
reconciler.setRepairer\(dr, IDocument.DEFAULT\_CONTENT\_TYPE\);
NonRuleBasedDamagerRepairer ndr =
new NonRuleBasedDamagerRepairer\(
new TextAttribute\(
colorManager.getColor\(IHCColorConstants.HC\_COMMENT\)\)\);
reconciler.setDamager\(ndr, HCPartitionScanner.HC\_COMMENT\);
reconciler.setRepairer\(ndr, HCPartitionScanner.HC\_COMMENT\);
return reconciler;
\}
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Logged In: YES
user_id=889231
Hey,
I was mucking about with a new editor for Handel C for my
project, and realised that the Sample XML Editor comes with
a damager/repairer for multiline comments. Here's the code,
should be simple to change it.:
// Source of NonRuleBasedDamagerRepairer:
//--------------------------------------------------------------
package uk.co.schmeeky.handelC.editors;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITypedRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.TextPresentation;
import org.eclipse.jface.text.presentation.IPresentationDamager;
import
org.eclipse.jface.text.presentation.IPresentationRepairer;
import org.eclipse.jface.util.Assert;
import org.eclipse.swt.custom.StyleRange;
public class NonRuleBasedDamagerRepairer
implements IPresentationDamager, IPresentationRepairer {
by the current token */
protected TextAttribute fDefaultTextAttribute;
defaultTextAttribute) {
Assert.isNotNull(defaultTextAttribute);
specified offset or
* if the offset is inside a line delimiter, the end offset
of the next line.
*
* @param offset the offset whose line end offset must be
computed
* @return the line end offset for the given offset
* @exception BadLocationException if offset is invalid in
the current document
*/
protected int endOfLineOf(int offset) throws
BadLocationException {
DocumentEvent, boolean)
*/
public IRegion getDamageRegion(
ITypedRegion partition,
DocumentEvent event,
boolean documentPartitioningChanged) {
if (!documentPartitioningChanged) {
try {
info.getOffset());
IPresentationRepairer#createPresentation(TextPresentation,
ITypedRegion)
*/
public void createPresentation(
TextPresentation presentation,
ITypedRegion region) {
addRange(
presentation,
region.getOffset(),
region.getLength(),
fDefaultTextAttribute);
}
range to be styled
*/
protected void addRange(
TextPresentation presentation,
int offset,
int length,
TextAttribute attr) {
if (attr != null)
presentation.addStyleRange(
new StyleRange(
offset,
length,
attr.getForeground(),
attr.getBackground(),
attr.getStyle()));
}
}
// Source from HCConfiguration
// ------------------------------------------
public IPresentationReconciler
getPresentationReconciler(ISourceViewer sourceViewer) {
PresentationReconciler reconciler = new
PresentationReconciler();