blob: 6d8b876da43b724cb4a4b72ed2e0451be8f98b70 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 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.ui.internal.browser.macosx;
import java.util.ArrayList;
import java.util.StringTokenizer;
import org.eclipse.ui.internal.browser.browsers.DefaultBrowser;
public class SafariBrowser extends DefaultBrowser {
public SafariBrowser(String id, String location, String parameters) {
super(id, location, parameters);
this.location = location;
this.parameters = parameters;
}
/**
* Creates the final command to launch.
*
* @param path
* @param url
* @return String[]
*/
protected String[] prepareCommand(String path, String url) {
if (url != null && url.toLowerCase().startsWith("file:")) { //$NON-NLS-1$
url = url.substring(5);
}
ArrayList tokenList = new ArrayList();
//Divide along quotation marks
StringTokenizer qTokenizer = new StringTokenizer(path.trim(),
"\"", true); //$NON-NLS-1$
boolean withinQuotation = false;
String quotedString = ""; //$NON-NLS-1$
while (qTokenizer.hasMoreTokens()) {
String curToken = qTokenizer.nextToken();
if (curToken.equals("\"")) { //$NON-NLS-1$
if (withinQuotation) {
// quotes prevent launching on Unix 35673
tokenList.add(quotedString);
} else {
quotedString = ""; //$NON-NLS-1$
}
withinQuotation = !withinQuotation;
continue;
} else if (withinQuotation) {
quotedString = curToken;
continue;
} else {
//divide unquoted strings along white space
StringTokenizer parser = new StringTokenizer(curToken.trim());
while (parser.hasMoreTokens()) {
tokenList.add(parser.nextToken());
}
}
}
// substitute %1 by url
boolean substituted = false;
for (int i = 0; i < tokenList.size(); i++) {
String token = (String) tokenList.get(i);
String newToken = doSubstitutions(token, url);
if (newToken != null) {
tokenList.set(i, newToken);
substituted = true;
}
}
// add the url if not substituted already
if (!substituted)
tokenList.add(url);
String[] command = new String[tokenList.size()];
tokenList.toArray(command);
return command;
}
}