001 package nl.cwi.sen1.gui.plugin.editor;
002
003 import locationapi.Factory;
004 import locationapi.types.Area;
005 import locationapi.types.AreaAreas;
006 import locationapi.types.Slice;
007 import aterm.ATermList;
008 import aterm.pure.PureFactory;
009
010 public class SliceRegistrar {
011 private static Factory factory;
012
013 static public void registerSlices(EditorPane editor, ATermList slices) {
014 editor.unsetStyles();
015
016 initFactory(slices);
017
018 for ( ; !slices.isEmpty(); slices = slices.getNext()) {
019 Slice slice = factory.SliceFromTerm(slices.getFirst());
020 registerSlice(editor, slice);
021 }
022 }
023
024 static private void registerSlice(EditorPane editor, Slice slice) {
025 String name = slice.getId();
026 AreaAreas areas = slice.getAreas();
027
028 for ( ; !areas.isEmpty(); areas = areas.getTail()) {
029 Area area = areas.getHead();
030 editor.setStyle(area.getOffset(), area.getLength(), name);
031 }
032 }
033
034 private static void initFactory(ATermList slices) {
035 if (factory == null) {
036 factory = Factory.getInstance((PureFactory) slices.getFactory());
037 }
038 }
039
040 }
041