public void run() { StringBuffer onechar; // Adding an additional newline as a hack around other errors String originalText = editor.getText() + "\n"; strOut = new StringBuffer(); indentValue = Preferences.getInteger("editor.tabs.size"); indentChar = new String(" "); lineNumber = 0; c_level = if_lev = level = e_flg = paren = 0; a_flg = q_flg = j = tabs = 0; if_flg = peek = -1; peekc = '`'; s_flg = 1; jdoc = 0; s_level = new int[10]; sp_flg = new int[20][10]; s_ind = new int[20][10]; s_if_lev = new int[10]; s_if_flg = new int[10]; ind = new int[10]; p_flg = new int[10]; s_tabs = new int[20][10]; w_else = new String ("else"); w_if_ = new String ("if"); w_for = new String ("for"); w_ds = new String ("default"); w_case = new String ("case"); w_cpp_comment = new String ("//"); w_jdoc = new String ("/**"); line_feed = new String ("\n"); // read as long as there is something to read EOF = 0; // = 1 set in getchr when EOF chars = new char[BLOCK_MAXLEN]; string = new char[BLOCK_MAXLEN]; try { // the whole process // open for input reader = new CharArrayReader(originalText.toCharArray()); // add buffering to that InputStream // bin = new BufferedInputStream(in); for (int ib = 0; ib < BLOCK_MAXLEN; ib++) chars[ib] = '\0'; lineLength = readCount = 0; // read up a block - remember how many bytes read readCount = reader.read(chars); strBlock = new String(chars); lineLength = readCount; lineNumber = 1; indexBlock = -1; j = 0; while (EOF == 0) { c = getchr(); switch(c) { default: string[j++] = c; if(c != ',') { l_char = c; } break; case ' ': case '\t': if(lookup(w_else) == 1) { gotelse(); if(s_flg == 0 || j > 0)string[j++] = c; indent_puts(); s_flg = 0; break; } if(s_flg == 0 || j > 0)string[j++] = c; break; case '\r': // <CR> for MS Windows 95 case '\n': lineNumber++; if (EOF==1) { break; } //String j_string = new String(string); e_flg = lookup(w_else); if(e_flg == 1) gotelse(); if (lookup_com(w_cpp_comment) == 1) { if (string[j] == '\n') { string[j] = '\0'; j--; } } indent_puts(); //fprintf(outfil, line_feed); fprintf(line_feed); s_flg = 1; if(e_flg == 1) { p_flg[level]++; tabs++; } else if(p_char == l_char) { a_flg = 1; } break; case '{': if(lookup(w_else) == 1)gotelse(); if (s_if_lev.length == c_level) { s_if_lev = PApplet.expand(s_if_lev); s_if_flg = PApplet.expand(s_if_flg); } s_if_lev[c_level] = if_lev; s_if_flg[c_level] = if_flg; if_lev = if_flg = 0; c_level++; if(s_flg == 1 && p_flg[level] != 0) { p_flg[level]--; tabs--; } string[j++] = c; indent_puts(); getnl() ; indent_puts(); //fprintf(outfil,"\n"); fprintf("\n"); tabs++; s_flg = 1; if(p_flg[level] > 0) { ind[level] = 1; level++; s_level[level] = c_level; } break; case '}': c_level--; if (c_level < 0) { EOF = 1; //System.out.println("eof b"); string[j++] = c; indent_puts(); break; } if ((if_lev = s_if_lev[c_level]-1) < 0) if_lev = 0; if_flg = s_if_flg[c_level]; indent_puts(); tabs--; p_tabs(); peekc = getchr(); if( peekc == ';') { onechar = new StringBuffer(); onechar.append(c); // the } onechar.append(';'); //fprintf(outfil, onechar.toString()); fprintf(onechar.toString()); peek = -1; peekc = '`'; } else { onechar = new StringBuffer(); onechar.append(c); //fprintf(outfil, onechar.toString()); fprintf(onechar.toString()); peek = 1; } getnl(); indent_puts(); //fprintf(outfil,"\n"); fprintf("\n"); s_flg = 1; if(c_level < s_level[level]) if(level > 0) level--; if(ind[level] != 0) { tabs -= p_flg[level]; p_flg[level] = 0; ind[level] = 0; } break; case '"': case '\'': string[j++] = c; cc = getchr(); while(cc != c) { // max. length of line should be 256 string[j++] = cc; if(cc == '\\') { cc = string[j++] = getchr(); } if(cc == '\n') { lineNumber++; indent_puts(); s_flg = 1; } cc = getchr(); } string[j++] = cc; if(getnl() == 1) { l_char = cc; peek = 1; peekc = '\n'; } break; case ';': string[j++] = c; indent_puts(); if(p_flg[level] > 0 && ind[level] == 0) { tabs -= p_flg[level]; p_flg[level] = 0; } getnl(); indent_puts(); //fprintf(outfil,"\n"); fprintf("\n"); s_flg = 1; if(if_lev > 0) if(if_flg == 1) { if_lev--; if_flg = 0; } else if_lev = 0; break; case '\\': string[j++] = c; string[j++] = getchr(); break; case '?': q_flg = 1; string[j++] = c; break; case ':': string[j++] = c; peekc = getchr(); if(peekc == ':') { indent_puts(); //fprintf (outfil,":"); fprintf(":"); peek = -1; peekc = '`'; break; } else { //int double_colon = 0; peek = 1; } if(q_flg == 1) { q_flg = 0; break; } if(lookup(w_ds) == 0 && lookup(w_case) == 0) { s_flg = 0; indent_puts(); } else { tabs--; indent_puts(); tabs++; } peekc = getchr(); if(peekc == ';') { fprintf(";"); peek = -1; peekc = '`'; } else { peek = 1; } getnl(); indent_puts(); fprintf("\n"); s_flg = 1; break; case '/': string[j++] = c; peekc = getchr(); if(peekc == '/') { string[j++] = peekc; peekc = '`'; peek = -1; cpp_comment(); //fprintf(outfil,"\n"); fprintf("\n"); break; } else { peek = 1; } if(peekc != '*') { break; } else { if (j > 0) string[j--] = '\0'; if (j > 0) indent_puts(); string[j++] = '/'; string[j++] = '*'; peek = -1; peekc = '`'; comment(); break; } case '#': string[j++] = c; cc = getchr(); while(cc != '\n') { string[j++] = cc; cc = getchr(); } string[j++] = cc; s_flg = 0; indent_puts(); s_flg = 1; break; case ')': paren--; if (paren < 0) { EOF = 1; //System.out.println("eof c"); } string[j++] = c; indent_puts(); if(getnl() == 1) { peekc = '\n'; peek = 1; if(paren != 0) { a_flg = 1; } else if(tabs > 0) { p_flg[level]++; tabs++; ind[level] = 0; } } break; case '(': string[j++] = c; paren++; if ((lookup(w_for) == 1)) { c = get_string(); while(c != ';') c = get_string(); ct=0; int for_done = 0; while (for_done==0) { c = get_string(); while(c != ')') { if(c == '(') ct++; c = get_string(); } if(ct != 0) { ct--; } else for_done = 1; } // endwhile for_done paren--; if (paren < 0) { EOF = 1; //System.out.println("eof d"); } indent_puts(); if(getnl() == 1) { peekc = '\n'; peek = 1; p_flg[level]++; tabs++; ind[level] = 0; } break; } if(lookup(w_if_) == 1) { indent_puts(); s_tabs[c_level][if_lev] = tabs; sp_flg[c_level][if_lev] = p_flg[level]; s_ind[c_level][if_lev] = ind[level]; if_lev++; if_flg = 1; } } // end switch //System.out.println("string len is " + string.length); //if (EOF == 1) System.out.println(string); //String j_string = new String(string); } // end while not EOF /* int bad; while ((bad = bin.read()) != -1) { System.out.print((char) bad); } */ /* char bad; //while ((bad = getchr()) != 0) { while (true) { getchr(); if (peek != -1) { System.out.print(last_char); } else { break; } } */ // save current (rough) selection point int selectionEnd = editor.getSelectionStop(); // make sure the caret would be past the end of the text if (strOut.length() < selectionEnd - 1) { selectionEnd = strOut.length() - 1; } reader.close(); // close buff String formattedText = strOut.toString(); if (formattedText.equals(originalText)) { editor.statusNotice(_("No changes necessary for Auto Format.")); } else if (paren != 0) { // warn user if there are too many parens in either direction if (paren < 0) { editor.statusError( _("Auto Format Canceled: Too many right parentheses.")); } else { editor.statusError( _("Auto Format Canceled: Too many left parentheses.")); } } else if (c_level != 0) { // check braces only if parens are ok if (c_level < 0) { editor.statusError( _("Auto Format Canceled: Too many right curly braces.")); } else { editor.statusError( _("Auto Format Canceled: Too many left curly braces.")); } } else { // replace with new bootiful text // selectionEnd hopefully at least in the neighborhood editor.setText(formattedText); editor.setSelection(selectionEnd, selectionEnd); editor.getSketch().setModified(true); // mark as finished editor.statusNotice(_("Auto Format finished.")); } } catch (Exception e) { editor.statusError(e); } }
public void run(String arg) { Frame[] niframes = WindowManager.getNonImageWindows(); String[] titles = new String[niframes.length + 1]; for (int i = 0; i < niframes.length; i++) { titles[i] = niframes[i].getTitle(); } titles[niframes.length] = "Clipboard"; GenericDialog gd = new GenericDialog("Windows"); boolean importfile = false; gd.addCheckbox("Import from file?", importfile); gd.addChoice("Windows", titles, titles[0]); boolean hasxvals = false; gd.addCheckbox("X Vals Column?", hasxvals); boolean multix = false; gd.addCheckbox("Multi_X_Columns?", multix); boolean skipendzeros = false; gd.addCheckbox("Skip_end_zeros?", skipendzeros); String[] delimiters = {"Tab", "Comma", "Space"}; gd.addChoice("Delimiter", delimiters, delimiters[0]); gd.showDialog(); if (gd.wasCanceled()) { return; } importfile = gd.getNextBoolean(); int index = gd.getNextChoiceIndex(); hasxvals = gd.getNextBoolean(); multix = gd.getNextBoolean(); skipendzeros = gd.getNextBoolean(); int delimindex = gd.getNextChoiceIndex(); if (multix) hasxvals = true; String textdata = ""; if (importfile) { OpenDialog od = new OpenDialog("Open File", "", ".txt"); String directory = od.getDirectory(); String name = od.getFileName(); if (name == null) { return; } try { File infile = new File(directory + name); BufferedReader b = new BufferedReader(new FileReader(infile)); textdata = (new jdataio()).readstringfile(b); b.close(); } catch (IOException e) { return; } } else { if (index == niframes.length) { // here we get the data from the clipboard Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); try { if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) { textdata = (String) t.getTransferData(DataFlavor.stringFlavor); } } catch (UnsupportedFlavorException e) { } catch (IOException e) { } if (textdata.equals("")) { IJ.error("Error copying from clipboard."); return; } } else { if (niframes[index] instanceof Editor) { Editor tw = (Editor) niframes[index]; textdata = tw.getText(); } else { if (niframes[index] instanceof TextWindow) { TextWindow tw = (TextWindow) niframes[index]; textdata = tw.getTextPanel().getText(); } else { IJ.showMessage("Not a valid text window"); return; } } } } if (textdata == null) { IJ.showMessage("Error in Obtaining String"); return; } if (textdata.indexOf("\r") >= 0) { textdata = textdata.replace('\r', '\n'); } char[] delims = {'\t', ',', ' '}; delimit_string ds = new delimit_string(delims[delimindex]); String[] rows = ds.getrows(textdata); int lines = rows.length; int columns = ds.getnumcolumns(rows[0]); int ycolumns = columns; if (hasxvals) { if (multix) { ycolumns /= 2; } else { ycolumns--; } } if (multix) { float[][] ydata = new float[ycolumns][lines]; float[][] xdata = new float[ycolumns][lines]; for (int i = 0; i < lines; i++) { float[] temp = ds.delim2float(rows[i], columns); for (int j = 0; j < ycolumns; j++) { ydata[j][i] = temp[2 * j + 1]; xdata[j][i] = temp[2 * j]; } } int[] npts = new int[ycolumns]; for (int i = 0; i < ycolumns; i++) { npts[i] = lines; } if (skipendzeros) { for (int i = 0; i < ycolumns; i++) { int counter = lines - 1; while ((xdata[i][counter] == 0.0f || Float.isNaN(xdata[i][counter])) && counter > 0) { xdata[i][counter] = 0.0f; ydata[i][counter] = 0.0f; npts[i]--; counter--; } } } (new PlotWindow4("Text Plot", "x", "y", xdata, ydata, npts)).draw(); } else { float[][] tempydata = new float[ycolumns][lines]; float[] tempxdata = new float[lines]; float[][] xdata = null; float[][] ydata = null; int startcolumn = 0; if (hasxvals) startcolumn = 1; for (int i = 0; i < lines; i++) { float[] temp = ds.delim2float(rows[i], columns); if (hasxvals) { tempxdata[i] = temp[0]; } else { tempxdata[i] = (float) (i + 1); } for (int j = 0; j < ycolumns; j++) { tempydata[j][i] = temp[j + startcolumn]; } } int[] npts = new int[ycolumns]; npts[0] = lines; if (skipendzeros) { int maxpts = 0; for (int i = 0; i < ycolumns; i++) { int counter = lines - 1; npts[i] = lines; while ((tempydata[i][counter] == 0.0f || Float.isNaN(tempydata[i][counter])) && counter > 0) { npts[i]--; counter--; } if (npts[i] > maxpts) maxpts = npts[i]; IJ.log("" + npts[i]); } ydata = new float[ycolumns][maxpts]; xdata = new float[ycolumns][maxpts]; for (int i = 0; i < ycolumns; i++) { // npts[i]=npts[0]; System.arraycopy(tempxdata, 0, xdata[i], 0, npts[i]); System.arraycopy(tempydata[i], 0, ydata[i], 0, npts[i]); } } else { ydata = tempydata; xdata = new float[ycolumns][]; for (int i = 0; i < ycolumns; i++) { npts[i] = npts[0]; xdata[i] = tempxdata.clone(); } } (new PlotWindow4("Text Plot", "x", "y", xdata, ydata, npts)).draw(); } }