diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.bidi/src/org/eclipse/equinox/bidi/internal/consumable/StructuredTextEmail.java')
-rw-r--r-- | bundles/org.eclipse.equinox.bidi/src/org/eclipse/equinox/bidi/internal/consumable/StructuredTextEmail.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.bidi/src/org/eclipse/equinox/bidi/internal/consumable/StructuredTextEmail.java b/bundles/org.eclipse.equinox.bidi/src/org/eclipse/equinox/bidi/internal/consumable/StructuredTextEmail.java new file mode 100644 index 000000000..c9433f62d --- /dev/null +++ b/bundles/org.eclipse.equinox.bidi/src/org/eclipse/equinox/bidi/internal/consumable/StructuredTextEmail.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2010, 2011 IBM Corporation and others. + * 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 + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ +package org.eclipse.equinox.bidi.internal.consumable; + +import org.eclipse.equinox.bidi.advanced.IStructuredTextExpert; +import org.eclipse.equinox.bidi.custom.StructuredTextCharTypes; +import org.eclipse.equinox.bidi.internal.StructuredTextDelimsEsc; + +/** + * Handler adapted to processing e-mail addresses. + */ +public class StructuredTextEmail extends StructuredTextDelimsEsc { + static final byte L = Character.DIRECTIONALITY_LEFT_TO_RIGHT; + static final byte R = Character.DIRECTIONALITY_RIGHT_TO_LEFT; + static final byte AL = Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC; + + public StructuredTextEmail() { + super("<>.:,;@"); //$NON-NLS-1$ + } + + public int getDirection(IStructuredTextExpert expert, String text) { + return getDirection(expert, text, new StructuredTextCharTypes(expert, text)); + } + + /** + * @return {@link IStructuredTextExpert#DIR_RTL DIR_RTL} if the following + * conditions are satisfied: + * <ul> + * <li>The current locale (as expressed by the environment + * language) is Arabic.</li> + * <li>The domain part of the email address contains + * at least one RTL character.</li> + * </ul> + * Otherwise, returns {@link IStructuredTextExpert#DIR_LTR DIR_LTR}. + */ + public int getDirection(IStructuredTextExpert expert, String text, StructuredTextCharTypes charTypes) { + String language = expert.getEnvironment().getLanguage(); + if (!language.equals("ar")) //$NON-NLS-1$ + return IStructuredTextExpert.DIR_LTR; + int domainStart; + domainStart = text.indexOf('@'); + if (domainStart < 0) + domainStart = 0; + for (int i = domainStart; i < text.length(); i++) { + byte charType = charTypes.getBidiTypeAt(i); + if (charType == AL || charType == R) + return IStructuredTextExpert.DIR_RTL; + } + return IStructuredTextExpert.DIR_LTR; + } + + /** + * @return 2 as number of special cases handled by this handler. + */ + public int getSpecialsCount(IStructuredTextExpert expert) { + return 2; + } + + /** + * @return parentheses and quotation marks as delimiters. + */ + protected String getDelimiters() { + return "()\"\""; //$NON-NLS-1$ + } + +} |