package tk.eclipse.plugin.htmleditor.editors;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.projection.ProjectionAnnotation;
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
/**
* @author Naoki Takezoe
*/
public class FoldingInfo {
private int start;
private int end;
private String type;
public FoldingInfo(int start){
this(start, -1, null);
}
public FoldingInfo(int start, int end){
this(start, end, null);
}
public FoldingInfo(int start, String type){
this(start, -1, type);
}
public FoldingInfo(int start, int end, String type){
setStart(start);
setEnd(end);
setType(type);
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public static int countUpLineDelimiter(String text,int pos){
int count = 0;
if(text.length()-1 > pos){
char c1 = text.charAt(pos);
if(c1=='\r' || c1=='\n'){
count++;
if(c1=='\r' && text.length()-1 > pos+1){
if(text.charAt(pos+1)=='\n'){
count++;
}
}
}
}
return count;
}
public static void applyModifiedAnnotations(ProjectionAnnotationModel model, List list){
// apply only modified annotations
Iterator ite = model.getAnnotationIterator();
while(ite.hasNext()){
ProjectionAnnotation annotation = (ProjectionAnnotation)ite.next();
Position pos = model.getPosition(annotation);
boolean remove = true;
for(int i=0;i<list.size();i++){
FoldingInfo info = (FoldingInfo)list.get(i);
if(info.getStart() == pos.offset && info.getEnd() == pos.offset + pos.length){
remove = false;
list.remove(info);
break;
}
}
if(remove){
model.removeAnnotation(annotation);
}
}
for(int i=0;i<list.size();i++){
FoldingInfo info = (FoldingInfo)list.get(i);
Position pos = new Position(info.getStart(),info.getEnd() - info.getStart());
model.addAnnotation(new ProjectionAnnotation(), pos);
}
}
}