/******************************************************************************* * Copyright (c) 2009 Andrey Loskutov. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * Contributor: Andrey Loskutov - initial API and implementation *******************************************************************************/ package de.loskutov.anyedit.actions; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import de.loskutov.anyedit.AnyEditToolsPlugin; import de.loskutov.anyedit.IAnyEditConstants; import de.loskutov.anyedit.util.TextReplaceResultSet; import de.loskutov.anyedit.util.TextUtil; public class UnEscape extends AbstractReplaceAction { private static final int KEY_UNESCAPE = 0; private static final int KEY_ESCAPE = 1; private boolean preserveEntities; @Override protected void doTextOperation(IDocument doc, String actionID, TextReplaceResultSet resultSet) throws BadLocationException { preserveEntities = isPreserveEntitiesEnabled(); super.doTextOperation(doc, actionID, resultSet); } protected static boolean isPreserveEntitiesEnabled() { return AnyEditToolsPlugin.getDefault().getPreferenceStore().getBoolean( IAnyEditConstants.PRESERVE_ENTITIES); } @Override protected String performReplace(String line, int actionKey) { if(KEY_UNESCAPE == actionKey){ return TextUtil.unescapeText(line); } if(preserveEntities){ // escape(unescape(line)) instead of escape(line) // prevent converting from parts // of already converted entities return TextUtil.escapeText(TextUtil.unescapeText(line)); } return TextUtil.escapeText(line); } @Override protected int getActionKey(String actionID) { return actionID.startsWith(ACTION_ID_UNESCAPE)? KEY_UNESCAPE : KEY_ESCAPE; } }