/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.segmentation.gui.editor; import java.awt.Color; import java.util.List; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; import net.codjo.expression.help.FunctionHelp; /** * */ public class HelpStyle { private EditorMainPanelGui gui; private List<FunctionHelp> functionDataList; private List<OperatorHelper.OperatorHelp> operatorDataList; public HelpStyle(EditorMainPanelGui gui, List<FunctionHelp> functionDataList, List<OperatorHelper.OperatorHelp> operatorDataList) { this.gui = gui; this.functionDataList = functionDataList; this.operatorDataList = operatorDataList; } public void colorLog(String logContent) throws BadLocationException { StyledDocument styledDocument = buildStyles(); initialiseDefaultStyle(styledDocument, logContent); colorDescription(styledDocument); } private void initialiseDefaultStyle(StyledDocument styledDocument, String logContent) { Style defaultStyle = gui.getLogStyle("Default"); styledDocument.setCharacterAttributes(0, logContent.length(), defaultStyle, true); } private StyledDocument buildStyles() { StyledDocument styledDocument = gui.getLogStyledDocument(); Style descritionStyle = gui.addLogStyle("Description", null); StyleConstants.setBold(descritionStyle, true); StyleConstants.setUnderline(descritionStyle, true); StyleConstants.setForeground(descritionStyle, Color.blue); Style functionStyle = gui.addLogStyle("Function", null); StyleConstants.setForeground(functionStyle, Color.red); Style defaultStyle = gui.addLogStyle("Default", null); StyleConstants.setForeground(defaultStyle, Color.black); return styledDocument; } private void colorDescription(StyledDocument styledDocument) throws BadLocationException { Style descriptionStyle = gui.getLogStyle("Description"); colorWord(styledDocument, descriptionStyle, "Description "); colorWord(styledDocument, descriptionStyle, "Usage "); colorWord(styledDocument, descriptionStyle, "Exemple "); Style functionStyle = gui.getLogStyle("Function"); for (FunctionHelp functionHelp : functionDataList) { colorWord(styledDocument, functionStyle, functionHelp.getFunctionName() + "("); } for (OperatorHelper.OperatorHelp operatorHelp : operatorDataList) { colorWord(styledDocument, functionStyle, operatorHelp.toString()); } colorWord(styledDocument, functionStyle, "("); colorWord(styledDocument, functionStyle, ")"); } private void colorWord(StyledDocument styledDocument, Style style, String pattern) throws BadLocationException { Document document = gui.getLogDocument(); String text = document.getText(0, document.getLength()); int pos = text.indexOf(pattern, 0); while (pos >= 0) { styledDocument.setCharacterAttributes(pos, pattern.length(), style, true); pos += pattern.length(); pos = text.indexOf(pattern, pos); } } }