diff --git a/src/main/java/info/istlab/IoTP/Editor.java b/src/main/java/info/istlab/IoTP/Editor.java index 2539a90..a79063a 100644 --- a/src/main/java/info/istlab/IoTP/Editor.java +++ b/src/main/java/info/istlab/IoTP/Editor.java @@ -44,6 +44,7 @@ JButton runB; // for ShellScript JButton compileB; JButton execB; + JButton layoutB; JTextField comlineOption; ScriptRunner runner; @@ -56,6 +57,11 @@ getContentPane().add(new RTextScrollPane(textArea)); textArea.addKeyListener(this); + textArea.setAutoIndentEnabled(true); + textArea.setTabSize(2); + textArea.setTabsEmulated(true); + + try { setTitle(file.getCanonicalPath().replaceAll(App.workingDir+"/", "")); } catch (IOException e) { @@ -99,9 +105,9 @@ topP.add(saveB); } - JButton loadB = new JButton("Reload"); - loadB.addActionListener(this); - topP.add(loadB); + // JButton loadB = new JButton("Reload"); + // loadB.addActionListener(this); + // topP.add(loadB); // 実行ボタン if (textArea.getSyntaxEditingStyle() == SyntaxConstants.SYNTAX_STYLE_UNIX_SHELL) { @@ -138,7 +144,9 @@ // topP.add(comlineOption); } - + // layoutB = new JButton("layout"); + // topP.add(layoutB); + // layoutB.addActionListener(e -> fixIndent() ); getContentPane().add(topP, BorderLayout.NORTH); setVisible(true); @@ -148,6 +156,18 @@ lastOpened = this; } + private void fixIndent(){ + String src = textArea.getText(); + System.out.println(src); + String out = ""; + try { + out = IndentProgram.indent(src); + } catch (IOException e) { + e.printStackTrace(); + } + // textArea.setText(out); + // System.out.println(out); + } public static String loadFile(File f){ InputStream is = null; try { @@ -202,6 +222,7 @@ // } else if (e.getActionCommand().equals("Compile")) { // new ScriptRunner("Upload.sh", execB, file.getName()).startstop(); } else if (e.getActionCommand().equals("Upload")) { + save(); new ScriptRunner("Upload.sh", execB, file.getName()).startstop(); // new JExecutor(file.getAbsolutePath(), comlineOption.getText()); diff --git a/src/main/java/info/istlab/IoTP/IndentProgram.java b/src/main/java/info/istlab/IoTP/IndentProgram.java new file mode 100644 index 0000000..bc63b13 --- /dev/null +++ b/src/main/java/info/istlab/IoTP/IndentProgram.java @@ -0,0 +1,61 @@ +package info.istlab.IoTP; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; + +public class IndentProgram { + public static String indent(String input) throws IOException { + BufferedReader br = new BufferedReader(new StringReader(input)); + StringBuffer sb = new StringBuffer(); + String line; + int indentLevel = 0; + + while ((line = br.readLine()) != null) { + line = line.trim(); // 行頭と行末の空白を除去する + if (line.isEmpty()) { + // 空行はそのまま出力する + sb.append(line + "\n"); + continue; + } + + if (line.startsWith("}") && line.endsWith("{")) { + // 終了括弧がある場合はインデントレベルを減らす + sb = new StringBuffer(sb.substring(0, sb.length()-2)); + sb.append(line + "\n"); + // indentLevel += 2; + sb.append(printIndent(indentLevel)); + // sb.append(printIndent(indentLevel)); + } else if (line.endsWith("{")) { + // 開始括弧がある場合はインデントレベルを増やす + sb.append(line + "\n"); + indentLevel += 2; + sb.append(printIndent(indentLevel)); + // sb.append(printIndent(indentLevel)); + } else if (line.startsWith("}")) { + // 終了括弧がある場合はインデントレベルを減らす + sb = new StringBuffer(sb.substring(0, sb.length()-2)); + sb.append(line + "\n"); + indentLevel -= 2; + sb.append(printIndent(indentLevel)); + // sb.append(printIndent(indentLevel)); + } else { + // それ以外の行は単にインデントして出力する + sb.append(line + "\n"); + sb.append(printIndent(indentLevel)); + } + } + + br.close(); + return sb.toString(); + } + + // インデントを出力するためのヘルパー関数 + private static String printIndent(int indentLevel) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < indentLevel; i++) { + sb.append(" "); + } + return sb.toString(); + } +} diff --git a/src/main/java/info/istlab/IoTP/MyRSJTextArea.java b/src/main/java/info/istlab/IoTP/MyRSJTextArea.java index e36cd98..9aa6e97 100644 --- a/src/main/java/info/istlab/IoTP/MyRSJTextArea.java +++ b/src/main/java/info/istlab/IoTP/MyRSJTextArea.java @@ -78,6 +78,9 @@ setHighlightCurrentLine(false); // カーソル行のハイライトを消す setCodeFoldingEnabled(true); + // setAutoIndentEnabled(true); + // setTabSize(2); + // setTabsEmulated(false); }