ヘルプ表示追加、コマンド処理再構成中。
@@ -6,13 +6,16 @@ | ||
6 | 6 | import java.io.FileWriter; |
7 | 7 | import java.io.IOException; |
8 | 8 | import java.io.InputStreamReader; |
9 | +import java.io.PrintStream; | |
9 | 10 | import java.util.Arrays; |
10 | 11 | import java.util.HashMap; |
12 | +import java.util.List; | |
11 | 13 | import java.util.Map; |
12 | 14 | import java.util.TreeSet; |
13 | 15 | |
14 | 16 | import com.nissy_ki_chi.jpicosheet.core.Book; |
15 | 17 | import com.nissy_ki_chi.jpicosheet.core.ConcurrentBookWrapper; |
18 | +import com.nissy_ki_chi.jpicosheet.core.Sheet; | |
16 | 19 | import com.nissy_ki_chi.jpicosheet.util.SimpleReader; |
17 | 20 | import com.nissy_ki_chi.jpicosheet.util.SimpleWriter; |
18 | 21 |
@@ -130,4 +133,15 @@ | ||
130 | 133 | |
131 | 134 | } |
132 | 135 | |
136 | + public static void listSheets(Book book, PrintStream ps) { | |
137 | + TreeSet<String> sheetNames = new TreeSet<String>(); | |
138 | + List<Sheet> sheets = book.getSheets(); | |
139 | + for (Sheet s: sheets) { | |
140 | + sheetNames.add(s.getName()); | |
141 | + } | |
142 | + for (String name: sheetNames) { | |
143 | + ps.println(name); | |
144 | + } | |
145 | + } | |
146 | + | |
133 | 147 | } |
@@ -4,31 +4,32 @@ | ||
4 | 4 | |
5 | 5 | |
6 | 6 | static String[][] commandDefine = new String[][] { |
7 | - {".quit", "doQuit"}, | |
7 | + {".quit", "doQuit", ".quit\nこのプログラムを終了します。"}, | |
8 | + {".help", "doHelp", ".help\nヘルプを表示します。"}, | |
8 | 9 | |
9 | - {".book.add", "doBookAdd"}, | |
10 | - {".book.current", "doBookCurrent"}, | |
11 | - {".book.list", "doBookList"}, | |
12 | - {".book.functions", "doBookFunctions"}, | |
13 | - {".book.load", "doBookLoad"}, | |
14 | - {".book.save", "doBookSave"}, | |
10 | + {".book.add", "doBookAdd", ".book.add <Book名>\n新しいブックを追加します。"}, | |
11 | + {".book.current", "doBookCurrent", ".book.current <Book名>\nカレントブックを変更します。"}, | |
12 | + {".book.list", "doBookList", ".book.list\nBookをリストします。"}, | |
13 | + {".book.functions", "doBookFunctions", ".book.functions\nカレントブックで使用可能な関数をリストします。"}, | |
14 | + {".book.load", "doBookLoad", ".book.load <ファイル名>\nカレントブックに指定ファイルの内容を読み込みます。"}, | |
15 | + {".book.save", "doBookSave", ".book.save <ファイル名>\nカレントブックの内容を指定したファイル名に出力します。"}, | |
15 | 16 | |
16 | 17 | |
17 | - {".sheet.add", "doSheetAdd"}, | |
18 | - {".sheet.list", "doSheetList"}, | |
19 | - {".sheet.current", "doSheetCurrent"}, | |
18 | + {".sheet.add", "doSheetAdd", ".sheet.add <シート名>\nカレントブックにシートを追加します。"}, | |
19 | + {".sheet.list", "doSheetList", ".sheet.list\nカレントブックのシートをリストします。"}, | |
20 | + {".sheet.current", "doSheetCurrent", ".sheet.current <シート名>\nカレントシートを指定します。"}, | |
20 | 21 | |
21 | - {".list", "doCellList"}, | |
22 | + {".list", "doCellList", ".list\nカレントシートのセルをリストします。"}, | |
22 | 23 | |
23 | - {".group.list", "doGroupList"}, | |
24 | - {".group.list.cells", "doGroupListCells"}, | |
25 | - {".group.add", "doGroupAdd"}, | |
26 | - {".group.delete", "doGroupDelete"}, | |
27 | - {".group.cells.add", "doGroupCellsAdd"}, | |
28 | - {".group.cells.remove", "doGroupCellsRemove"}, | |
24 | + {".group.list", "doGroupList", ".group.list\nカレントシートのグループをリストします。"}, | |
25 | + {".group.list.cells", "doGroupListCells", ".group.list.cells <グループ名>\n指定したグループに含まれるセルをリストします。"}, | |
26 | + {".group.add", "doGroupAdd", ".group.add <グループ名>\nカレントシートにグループを追加します。"}, | |
27 | + {".group.delete", "doGroupDelete", ".group.delete <グループ名>\n指定したグループをカレントシートから削除します。"}, | |
28 | + {".group.cells.add", "doGroupCellsAdd", ".group.cells.add <グループ名> <セル名[,セル名...]>\n指定したグループにセルを追加します。"}, | |
29 | + {".group.cells.remove", "doGroupCellsRemove", ".group.cells.remove <グループ名> <セル名[,セル名...]>\n指定したグループからセルを削除します"}, | |
29 | 30 | |
30 | - {".list.tables", "doListTables"}, | |
31 | - {".list.table.cells", "doListTableCells"}, | |
31 | + {".list.tables", "doListTables", ".list.tables\nカレントシートのテーブルをリストします。"}, | |
32 | + {".list.table.cells", "doListTableCells", ".list.table.cells <テーブル名>\n指定したテーブルのセルをリストします。"}, | |
32 | 33 | |
33 | 34 | }; |
34 | 35 | } |
@@ -41,6 +41,8 @@ | ||
41 | 41 | private static String DEFAULT_BOOK_NAME = "myBook"; |
42 | 42 | private static String DEFAULT_SHEET_NAME = "Sheet1"; |
43 | 43 | |
44 | + private boolean _needQuit = false; | |
45 | + | |
44 | 46 | /** |
45 | 47 | * @param args |
46 | 48 | */ |
@@ -54,6 +56,7 @@ | ||
54 | 56 | if (0 < args.length) { |
55 | 57 | filePath = args[0]; |
56 | 58 | } |
59 | + System.out.println("ConsolePicocalc\n\".help\"でヘルプ表示、\".quit\"で終了"); | |
57 | 60 | cp.start(filePath); |
58 | 61 | |
59 | 62 | } |
@@ -73,7 +76,8 @@ | ||
73 | 76 | for (String[] cmd: Command.commandDefine) { |
74 | 77 | String[] cmdArr = cmd[0].substring(1).split("\\."); |
75 | 78 | String methodName = cmd[1]; |
76 | - commandStorage.addCommand(cmdArr, methodName); | |
79 | + String description = cmd[2]; | |
80 | + commandStorage.addCommand(cmdArr, methodName, description); | |
77 | 81 | } |
78 | 82 | } |
79 | 83 |
@@ -134,6 +138,9 @@ | ||
134 | 138 | } catch (Exception e) { |
135 | 139 | e.printStackTrace(); |
136 | 140 | } |
141 | + if (_needQuit) { | |
142 | + break; | |
143 | + } | |
137 | 144 | } |
138 | 145 | } finally { |
139 | 146 | try { |
@@ -240,6 +247,14 @@ | ||
240 | 247 | // } |
241 | 248 | // } |
242 | 249 | |
250 | + private void doQuit(String argStr) { | |
251 | + _needQuit = true; | |
252 | + } | |
253 | + | |
254 | + private void doHelp(String argStr) { | |
255 | + System.out.println(_commandStorage.getHelp()); | |
256 | + } | |
257 | + | |
243 | 258 | private void doCellList(String argStr) { |
244 | 259 | Sheet sheet = _books.get(_currentBookName).getResolver().getCurrentSheet(); |
245 | 260 | _cellCommand.listCells(sheet); |
@@ -324,4 +339,17 @@ | ||
324 | 339 | |
325 | 340 | } |
326 | 341 | |
342 | + | |
343 | + private void doSheetList(String argStr) { | |
344 | + BookCommand.listSheets(_books.get(_currentBookName), System.out); | |
345 | + } | |
346 | + | |
347 | + private void doSheetAdd(String argStr) { | |
348 | + _books.get(_currentBookName).addSheet(argStr); | |
349 | + } | |
350 | + | |
351 | + private void doSheetCurrent(String argStr) { | |
352 | + Book book = _books.get(_currentBookName); | |
353 | + book.getResolver().setCurrentSheet(book.getSheet(argStr)); | |
354 | + } | |
327 | 355 | } |
@@ -7,8 +7,10 @@ | ||
7 | 7 | |
8 | 8 | private String _commandFragmentName = null; |
9 | 9 | private String _methodName = null; |
10 | + private String _description = null; | |
10 | 11 | private HashMap<String, CommandFragment> _subFragment = null; |
11 | 12 | |
13 | + @SuppressWarnings("unused") | |
12 | 14 | private CommandFragment() {}; |
13 | 15 | |
14 | 16 | // CommandFragment() { |
@@ -19,22 +21,27 @@ | ||
19 | 21 | this._commandFragmentName = commandFragmentName; |
20 | 22 | } |
21 | 23 | |
22 | - void setMethodName(String methodName) { | |
23 | - _methodName = methodName; | |
24 | - } | |
24 | +// void setMethodName(String methodName) { | |
25 | +// _methodName = methodName; | |
26 | +// } | |
27 | +// | |
28 | +// void setDescription(String description) { | |
29 | +// _description = description; | |
30 | +// } | |
25 | 31 | |
26 | - void addCommand(String[] commandArray, String methodName) { | |
32 | + void addCommand(String[] commandArray, String methodName, String description) { | |
27 | 33 | Stack<String> stack = new Stack<String>(); |
28 | 34 | for (int i = commandArray.length - 1; 0 <= i; i--) { |
29 | 35 | stack.push(commandArray[i]); |
30 | 36 | } |
31 | - addCommand(stack, methodName); | |
37 | + addCommand(stack, methodName, description); | |
32 | 38 | } |
33 | 39 | |
34 | - private void addCommand(Stack<String> commandStack, String methodName) { | |
40 | + private void addCommand(Stack<String> commandStack, String methodName, String description) { | |
35 | 41 | if (commandStack.size() == 0) { |
36 | 42 | // this.put(cmdFragment, new CommandFragment(methodName)); |
37 | 43 | this._methodName = methodName; |
44 | + this._description = description; | |
38 | 45 | } else { |
39 | 46 | String cmdFragment = commandStack.pop(); |
40 | 47 | if (this._subFragment == null) { |
@@ -44,13 +51,13 @@ | ||
44 | 51 | if (! this._subFragment.containsKey(cmdFragment)) { |
45 | 52 | this._subFragment.put(cmdFragment, new CommandFragment(cmdFragment)); |
46 | 53 | } |
47 | - this._subFragment.get(cmdFragment).addCommand(commandStack, methodName); | |
54 | + this._subFragment.get(cmdFragment).addCommand(commandStack, methodName, description); | |
48 | 55 | } |
49 | 56 | } |
50 | 57 | |
51 | - void appendFragment(String commandFragmentName, CommandFragment fragment) { | |
52 | - this._subFragment.put(commandFragmentName, fragment); | |
53 | - } | |
58 | +// void appendFragment(String commandFragmentName, CommandFragment fragment) { | |
59 | +// this._subFragment.put(commandFragmentName, fragment); | |
60 | +// } | |
54 | 61 | |
55 | 62 | String getMethodName(String[] commandArray) { |
56 | 63 | Stack<String> stack = new Stack<String>(); |
@@ -72,6 +79,25 @@ | ||
72 | 79 | } |
73 | 80 | } |
74 | 81 | } |
82 | + | |
83 | + String getHelp() { | |
84 | + StringBuilder helpSb = new StringBuilder(); | |
85 | + getHelp(this, helpSb); | |
86 | + return helpSb.toString(); | |
87 | + } | |
88 | + | |
89 | + private void getHelp(CommandFragment cmdFragment, StringBuilder helpSb) { | |
90 | + // メソッドが定義されているCommandFragmentについてヘルプを追加 | |
91 | + if (cmdFragment._methodName != null) { | |
92 | + helpSb.append(cmdFragment._description).append("\n\n"); | |
93 | + } | |
94 | + // サブフラグメントがあるなら再帰してヘルプを追加していく | |
95 | + if (cmdFragment._subFragment != null) { | |
96 | + for (CommandFragment subFragment: cmdFragment._subFragment.values()) { | |
97 | + subFragment.getHelp(subFragment, helpSb); | |
98 | + } | |
99 | + } | |
100 | + } | |
75 | 101 | |
76 | 102 | @Override |
77 | 103 | public String toString() { |