diff options
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIConst.java')
-rw-r--r-- | dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIConst.java | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIConst.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIConst.java new file mode 100644 index 00000000000..957566cba47 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIConst.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 QNX Software Systems 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: + * QNX Software Systems - Initial API and implementation + * Wind River Systems - Modified for new DSF Reference Implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.output; + +/** + * GDB/MI const value represents a ios-c string. + */ +public class MIConst extends MIValue { + String cstring = ""; //$NON-NLS-1$ + + public String getCString() { + return cstring; + } + + public void setCString(String str) { + cstring = str; + } + + /** + * Translate gdb c-string. + */ + public String getString() { + return getString(cstring); + } + + public static String getString(String str) { + StringBuffer buffer = new StringBuffer(); + boolean escape = false; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (c == '\\') { + if (escape) { + buffer.append(c); + escape = false; + } else { + escape = true; + } + } else { + if (escape) { + if (isIsoCSpecialChar(c)) { + buffer.append(isoC(c)); + } else { + buffer.append('\\'); + buffer.append(c); + } + } else { + buffer.append(c); + } + escape = false; + } + } + + // If escape is still true it means that the + // last char was an '\'. + if (escape) { + buffer.append('\\'); + } + + return buffer.toString(); + } + + @Override + public String toString() { + return getCString(); + } + + /** + * Assuming that the precedent character was the + * escape sequence '\' + */ + private static String isoC(char c) { + String s = new Character(c).toString(); + if (c == '"') { + s = "\""; //$NON-NLS-1$ + } else if (c == '\'') { + s = "\'"; //$NON-NLS-1$ + } else if (c == '?') { + s = "?"; //$NON-NLS-1$ + } else if (c == 'a') { + s = "\007"; //$NON-NLS-1$ + } else if (c == 'b') { + s = "\b"; //$NON-NLS-1$ + } else if (c == 'f') { + s = "\f"; //$NON-NLS-1$ + } else if (c == 'n') { + s = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$ + } else if (c == 'r') { + s = "\r"; //$NON-NLS-1$ + } else if (c == 't') { + s = "\t"; //$NON-NLS-1$ + } else if (c == 'v') { + s = "\013"; //$NON-NLS-1$ + } + return s; + } + + private static boolean isIsoCSpecialChar(char c) { + switch (c) { + case '"': + case '\'': + case '?': + case 'a': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + case 'v': + return true; + } + return false; + + } +} |