blob: 5151301c1f43a5a74dca1d104b81def8d9bebf2b [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2007, 2021 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.ecommons.ui.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jface.action.LegacyActionTools;
import org.eclipse.osgi.util.TextProcessor;
import org.eclipse.swt.SWT;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
@NonNullByDefault
public class MessageUtils {
public static final Pattern AMPERSAND_PATTERN= Pattern.compile("\\&"); //$NON-NLS-1$
public static final String AMPERSAND_TOOLTIP_REPLACEMENT= Matcher.quoteReplacement("&&"); //$NON-NLS-1$
public static String removeMnemonics(final String label) {
return LegacyActionTools.removeMnemonics(label);
}
public static String escapeForFormText(final String text) {
final StringBuilder escaped= new StringBuilder(text.length());
ITERATE_CHARS : for (int i= 0; i < text.length(); i++) {
final char c= text.charAt(i);
switch (c) {
case '<':
escaped.append("&lt;"); //$NON-NLS-1$
continue ITERATE_CHARS;
case '>':
escaped.append("&gt;"); //$NON-NLS-1$
continue ITERATE_CHARS;
case '&':
escaped.append("&amp;"); //$NON-NLS-1$
continue ITERATE_CHARS;
case '"':
escaped.append("&quot;"); //$NON-NLS-1$
continue ITERATE_CHARS;
case '\'':
escaped.append("&apos;"); //$NON-NLS-1$
continue ITERATE_CHARS;
default:
escaped.append(c);
continue ITERATE_CHARS;
}
}
return escaped.toString();
}
public static String escapeForTooltip(final CharSequence text) {
return AMPERSAND_PATTERN.matcher(text).replaceAll(AMPERSAND_TOOLTIP_REPLACEMENT);
}
public static String escapeForMenu(final String text) {
final StringBuilder escaped= new StringBuilder(text.length());
ITERATE_CHARS : for (int i= 0; i < text.length(); i++) {
final char c= text.charAt(i);
switch (c) {
case '&':
escaped.append("&&"); //$NON-NLS-1$
continue ITERATE_CHARS;
case '\t':
escaped.append(" "); //$NON-NLS-1$
continue ITERATE_CHARS;
case '\n':
escaped.append(" "); //$NON-NLS-1$
continue ITERATE_CHARS;
default:
escaped.append(c);
continue ITERATE_CHARS;
}
}
return escaped.toString();
}
private static final String URL_DELIMITERS= TextProcessor.getDefaultDelimiters() + ":@?-"; //$NON-NLS-1$
public static String processURLPart(final String url) {
return TextProcessor.process(url, URL_DELIMITERS);
}
public static String processPath(final String path) {
return TextProcessor.process(path);
}
private static final String FILE_PATTERN_DELIMITERS= TextProcessor.getDefaultDelimiters() + "*.?"; //$NON-NLS-1$
/**
* Returns the label for a file pattern like '*.java'
*
* @param name the pattern
* @return the label of the pattern.
*/
public static String processPathPattern(final String name) {
return TextProcessor.process(name, FILE_PATTERN_DELIMITERS);
}
/**
* Returns the modifier string for the given SWT modifier
* modifier bits.
*
* @param stateMask the SWT modifier bits
* @return the modifier string
*/
public static String getModifierString(final int stateMask) {
if (stateMask != 0) {
final StringBuilder sb= new StringBuilder();
if ((stateMask & SWT.CTRL) == SWT.CTRL) {
sb.append(LegacyActionTools.findModifierString(SWT.CTRL));
sb.append(" + "); //$NON-NLS-1$
}
if ((stateMask & SWT.ALT) == SWT.ALT) {
sb.append(LegacyActionTools.findModifierString(SWT.ALT));
sb.append(" + "); //$NON-NLS-1$
}
if ((stateMask & SWT.SHIFT) == SWT.SHIFT) {
sb.append(LegacyActionTools.findModifierString(SWT.SHIFT));
sb.append(" + "); //$NON-NLS-1$
}
if ((stateMask & SWT.COMMAND) == SWT.COMMAND) {
sb.append(LegacyActionTools.findModifierString(SWT.COMMAND));
sb.append(" + "); //$NON-NLS-1$
}
if (sb.length() > 0) {
return sb.substring(0, sb.length()-3);
}
}
return ""; //$NON-NLS-1$
}
private MessageUtils() {}
}