Index: Link.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.rap/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Link.java,v retrieving revision 1.8 diff -u -r1.8 Link.java --- Link.java 16 Aug 2007 18:54:31 -0000 1.8 +++ Link.java 1 Sep 2007 03:24:48 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH. + * Copyright (c) 2002-2007 Innoopract Informationssysteme GmbH 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 @@ -7,6 +7,7 @@ * * Contributors: * Innoopract Informationssysteme GmbH - initial API and implementation + * Mariot Chauvin - bug 200389 ******************************************************************************/ package org.eclipse.swt.widgets; @@ -104,12 +105,122 @@ if( string == null ) { SWT.error( SWT.ERROR_NULL_ARGUMENT ); } - if( !string.equals( text ) ) { - displayText = parse( string ); - text = string; + + String escaped_input =escape_html(string); + + if( !escaped_input.equals( text ) ) { + displayText = parse( escaped_input ); + text = escaped_input; } } + + private String escape_html(String input) { + + StringBuffer escaped_input = new StringBuffer(input.length()); + + int state = 0; + + //copy inpout String into a tab of chars + char input_chars[] = new char[input.length()]; + input.getChars(0, input.length(), input_chars, 0); + + for (int i=0; i' || input_chars[i]=='>') { + escaped_input.append('<'); + state = 0; + } else { + escaped_input.append("<"); + state = 5; + } + escaped_input.append('a'); + escaped_input.append(input_chars[i]); + break; + + + case 3 : + if (input_chars[i]=='a') { + state = 4; + } else { + escaped_input.append("</"); + escaped_input.append(input_chars[i]); + state = 5; + } + break; + + case 4 : + if (input_chars[i]=='>') { + escaped_input.append('<'); + state = 0; + } else { + escaped_input.append("<"); + state = 5; + } + escaped_input.append("/a"); + escaped_input.append(input_chars[i]); + break; + + case 5 : + if (input_chars[i]=='<') { + escaped_input.append("<"); + } else if (input_chars[i]=='>') { + escaped_input.append(">"); + state = 0; + } else { + escaped_input.append(input_chars[i]); + } + break; + } + } + + switch(state) { + case 0: + break; + case 1: + escaped_input.append("<"); + break; + case 2: + escaped_input.append("<a"); + break; + case 3: + escaped_input.append("</"); + break; + case 4: + escaped_input.append("</a"); + break; + case 5: + break; + } + + return escaped_input.toString(); + } + + /** * Returns the receiver's text, which will be an empty * string if it has never been set.