Coverage Report - de.glossmaker.common.document.LaTeXStyledDocument
 
Classes in this File Line Coverage Branch Coverage Complexity
LaTeXStyledDocument
0%
0/64
0%
0/10
1,556
 
 1  
 package de.glossmaker.common.document;
 2  
 
 3  
 import java.awt.Color;
 4  
 import java.util.HashMap;
 5  
 import java.util.Map.Entry;
 6  
 
 7  
 import javax.swing.text.AttributeSet;
 8  
 import javax.swing.text.BadLocationException;
 9  
 import javax.swing.text.DefaultStyledDocument;
 10  
 import javax.swing.text.SimpleAttributeSet;
 11  
 import javax.swing.text.StyleConstants;
 12  
 
 13  
 /**
 14  
  * 
 15  
  * 
 16  
  * @author Markus Flingelli
 17  
  *
 18  
  */
 19  
 public class LaTeXStyledDocument extends DefaultStyledDocument {
 20  
         private static final long serialVersionUID = 3477728577201560760L;
 21  
         
 22  
         private SimpleAttributeSet mReferences;
 23  
         private SimpleAttributeSet mBrackets;
 24  
         private SimpleAttributeSet mMathMode;
 25  
         private SimpleAttributeSet mNormal;
 26  
         private SimpleAttributeSet mNotPrintable;
 27  0
         private boolean isShowNotPrintable = false;
 28  0
         private StringBuffer mOriginalText = null;
 29  
         
 30  0
         private HashMap<String, SimpleAttributeSet> mMap = null;
 31  
 
 32  0
         public LaTeXStyledDocument() {
 33  0
                 mNormal = new SimpleAttributeSet();
 34  0
                 StyleConstants.setForeground(mNormal, Color.black);
 35  
 
 36  0
                 mReferences = new SimpleAttributeSet();
 37  0
                 StyleConstants.setForeground(mReferences, Color.blue);
 38  
                 
 39  0
                 mBrackets = new SimpleAttributeSet();
 40  0
                 StyleConstants.setForeground(mBrackets, Color.magenta);
 41  
                 
 42  0
                 mMathMode = new SimpleAttributeSet();
 43  0
                 StyleConstants.setForeground(mMathMode, Color.orange);
 44  
                 
 45  0
                 mNotPrintable = new SimpleAttributeSet();
 46  0
                 StyleConstants.setForeground(mNotPrintable, Color.magenta);
 47  
 
 48  0
                 mMap = new HashMap<String, SimpleAttributeSet>();
 49  0
                 fillMap();
 50  
                 
 51  0
                 mOriginalText = new StringBuffer();
 52  0
         }
 53  
         
 54  
         public LaTeXStyledDocument(boolean showNotPrintable) {
 55  0
                 this();
 56  0
                 isShowNotPrintable = showNotPrintable;
 57  0
         }
 58  
         
 59  
         
 60  
         private void fillMap() {
 61  0
                 mMap.put("\\gloss", mReferences);
 62  0
                 mMap.put("\\ref", mReferences);
 63  0
                 mMap.put("\\cite", mReferences);
 64  0
                 mMap.put("\\index", mReferences);
 65  
                 
 66  0
                 mMap.put("{", mBrackets);
 67  0
                 mMap.put("}", mBrackets);
 68  
                 
 69  0
                 mMap.put("$", mMathMode);
 70  
                 
 71  0
                 mMap.put("\u2022", mNotPrintable);
 72  0
                 mMap.put("\u2192", mNotPrintable);
 73  0
         }
 74  
         
 75  
         private String replaceCharacters(String str) {
 76  
                 // blank
 77  0
                 String result = str.replace(" ", "\u2022");
 78  
                 // tab stop
 79  0
                 result = result.replace("\t", "\u2192");
 80  0
                 return result;
 81  
         }
 82  
 
 83  
         public void insertString(int offset, String str, AttributeSet a) throws BadLocationException {
 84  0
                 if (isShowNotPrintable == true) {
 85  0
                         String tmp = replaceCharacters(str);                
 86  0
                         super.insertString(offset, tmp, a);
 87  0
                 } else {
 88  0
                         super.insertString(offset, str, a);
 89  
                 }
 90  0
                 mOriginalText.insert(offset, str);
 91  0
                 processChangedLines(offset, str.length());
 92  0
         }
 93  
 
 94  
         public void remove(int offset, int length) throws BadLocationException {
 95  0
                 super.remove(offset, length);
 96  0
                 mOriginalText.delete(offset, offset + length);
 97  0
                 processChangedLines(offset, 0);
 98  0
         }
 99  
 
 100  
         public void processChangedLines(int offset, int length) throws BadLocationException {
 101  0
                 setCharacterAttributes(offset, getLength(), mNormal, false);
 102  0
                 for(Entry<String, SimpleAttributeSet>  entry : mMap.entrySet()) {
 103  0
                         String keyword = entry.getKey();
 104  0
                         String content = getText(0, getLength());
 105  0
                         int i = 0;
 106  0
                         int index = 0;
 107  0
                         while(i >= 0 && content.length() > 0) {
 108  0
                                 i = content.indexOf(keyword);
 109  0
                                 if (i >= 0) {
 110  0
                                         content = content.substring(i + keyword.length());
 111  0
                                         index += i;
 112  0
                                         setCharacterAttributes(index, keyword.length(), entry.getValue(), false);
 113  0
                                         index += keyword.length();
 114  
                                 }                                
 115  
                         }
 116  0
                 }
 117  0
         }
 118  
         
 119  
         public String getText() {
 120  0
                 return mOriginalText.toString();
 121  
         }
 122  
         
 123  
         public void setShowSpecialCharacters(boolean value) {
 124  0
                 isShowNotPrintable = value;
 125  0
         }
 126  
 }