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