rename xpad --> scinotes
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / actions / GenerateHelpFromFunctionAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.scinotes.actions;
14
15 import java.util.List;
16
17 import javax.swing.KeyStroke;
18 import javax.swing.text.Element;
19 import javax.swing.text.BadLocationException;
20
21 import org.scilab.modules.gui.menuitem.MenuItem;
22 import org.scilab.modules.scinotes.SciNotes;
23 import org.scilab.modules.scinotes.ScilabEditorPane;
24 import org.scilab.modules.scinotes.ScilabDocument;
25 import org.scilab.modules.scinotes.FunctionScanner;
26 import org.scilab.modules.scinotes.utils.SciNotesMessages;
27
28 /**
29  * Generate help from a function definition
30  * @author Calixte DENIZET
31  */
32 public class GenerateHelpFromFunctionAction extends DefaultAction {
33
34     /**
35      * The help template
36      */
37     public static final String template = "//\n"
38         + "//\n"
39         + "// Calling Sequence\n"
40         + "// [returnValues] = functionName(argsValues) // \n"
41         + "// Parameters\n"
42         + "// argsValuesOnColumn\n"
43         + "// returnValuesOnColumn\n"
44         + "// \n"
45         + "// Description\n"
46         + "// \n"
47         + "// \n"
48         + "// Examples\n"
49         + "// \n"
50         + "// \n"
51         + "// See Also\n"
52         + "// \n"
53         + "// \n"
54         + "// Authors\n"
55         + "// \n"
56         + "\n";
57
58     /**
59      * Constructor
60      * @param editor SciNotes
61      */
62     private GenerateHelpFromFunctionAction(SciNotes editor) {
63         super(SciNotesMessages.GENERATE_HELP, editor);
64     }
65
66     /**
67      * doAction
68      */
69     public void doAction() {
70         ScilabEditorPane sep = (ScilabEditorPane) getEditor().getTextPane();
71         int pos = sep.getCaretPosition();
72         ScilabDocument doc = (ScilabDocument) sep.getDocument();
73         Element root = doc.getDefaultRootElement();
74         Element e = root.getElement(root.getElementIndex(pos));
75         if (e instanceof ScilabDocument.ScilabLeafElement) {
76             ScilabDocument.ScilabLeafElement se = (ScilabDocument.ScilabLeafElement) e;
77             if (se.isFunction()) {
78                 FunctionScanner.FunctionInfo info = se.getFunctionInfo();
79                 String help = template.replaceFirst("functionName", info.functionName);
80                 help = help.replaceFirst("returnValues", generateList(info.returnValues, ", ", ""));
81                 help = help.replaceFirst("argsValues", generateList(info.argsValues, ", ", ""));
82                 help = help.replaceFirst("returnValuesOnColumn", generateList(info.returnValues, ": \n// ", ": "));
83                 help = help.replaceFirst("argsValuesOnColumn", generateList(info.argsValues, ": \n// ", ": "));
84                 try {
85                     doc.mergeEditsEnd();
86                     doc.insertString(e.getEndOffset(), help, null);
87                 } catch (BadLocationException exc) { }
88             }
89         }
90     }
91
92     /**
93      * Generate a string containing the list gave as argument in using sep as separator
94      * @param list the list
95      * @param sep the separator
96      * @param end a String to close
97      * @return the generated String
98      */
99     private String generateList(List<String> list, String sep, String end) {
100         String str = "";
101         for(int i = 0; i < list.size() - 1; i++) {
102             str += list.get(i) + sep;
103         }
104         if (list.size() >= 1) {
105             str += list.get(list.size() - 1) + end;
106         }
107
108         return str;
109     }
110
111     /**
112      * createMenu
113      * @param editor SciNotes
114      * @param key Keystroke
115      * @return MenuItem
116      */
117     public static MenuItem createMenu(SciNotes editor, KeyStroke key) {
118         return createMenu(SciNotesMessages.GENERATE_HELP, null, new GenerateHelpFromFunctionAction(editor), key);
119     }
120 }