package com.aptana.ide.editor.erb.contentassist; import java.io.File; import java.io.IOException; import java.text.CharacterIterator; import java.text.StringCharacterIterator; import org.rubypeople.rdt.core.util.Util; import com.aptana.ide.core.IdeLog; import com.aptana.ide.editor.erb.ERBPlugin; import com.aptana.ide.editors.unified.IUnifiedViewer; class PartialProposal extends ERBCompletionProposal { private File partial; private String fAdditional; PartialProposal(File partial, String replacement, int offset, String displayString, IUnifiedViewer unifiedViewer, String filename) { super(replacement, offset, 0, replacement.length(), ERBPlugin.getImage("icons/page_code.png"), displayString, null, null, -1, unifiedViewer, null, filename); this.partial = partial; } @Override public String getAdditionalProposalInfo() { if (fAdditional == null) { fAdditional = ""; try { fAdditional = new String(Util.getFileCharContent(partial, null)); fAdditional = escapeHTML(fAdditional); } catch (IOException e) { IdeLog.logError(ERBPlugin.getDefault(), "Problem reading partial's contents", e); } } return fAdditional; } public static String escapeHTML(String aText){ final StringBuilder result = new StringBuilder(); final StringCharacterIterator iterator = new StringCharacterIterator(aText); char character = iterator.current(); while (character != CharacterIterator.DONE ){ if (character == '<') { result.append("<"); } else if (character == '>') { result.append(">"); } else if (character == '&') { result.append("&"); } else if (character == '\"') { result.append("""); } else if (character == '\'') { result.append("'"); } else if (character == '(') { result.append("("); } else if (character == ')') { result.append(")"); } else if (character == '#') { result.append("#"); } else if (character == '%') { result.append("%"); } else if (character == ';') { result.append(";"); } else if (character == '+') { result.append("+"); } else if (character == '-') { result.append("-"); } else { //the char is not a special one //add it to the result as is result.append(character); } character = iterator.next(); } return result.toString(); } }