Revision: 772 Author: eht16 Date: 2006-08-29 09:11:55 -0700 (Tue, 29 Aug 2006) ViewCVS: http://svn.sourceforge.net/geany/?rev=772&view=rev
Log Message: ----------- Added auto completion for LaTeX command "begin".
Modified Paths: -------------- trunk/ChangeLog trunk/src/sci_cb.c Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-08-28 16:27:16 UTC (rev 771) +++ trunk/ChangeLog 2006-08-29 16:11:55 UTC (rev 772) @@ -1,3 +1,8 @@ +2006-08-29 Enrico Tröger enrico.troeger@uvena.de + + * src/sci_cb.c: Added auto completion for LaTeX command "begin". + + 2006-08-28 Enrico Tröger enrico.troeger@uvena.de
* geany.glade, src/interface.c: Fixed typo in a tooltip text.
Modified: trunk/src/sci_cb.c =================================================================== --- trunk/src/sci_cb.c 2006-08-28 16:27:16 UTC (rev 771) +++ trunk/src/sci_cb.c 2006-08-29 16:11:55 UTC (rev 772) @@ -614,12 +614,10 @@
void sci_cb_auto_latex(ScintillaObject *sci, gint pos, gint idx) { - // currently disabled -#if 0 if (sci_get_char_at(sci, pos - 2) == '}') { gchar *eol, *buf, *construct; - gchar env[30]; /// FIXME are 30 chars enough? + gchar env[50]; gint line = sci_get_line_from_position(sci, pos - 2); gint line_len = sci_get_line_length(sci, line); gint i, start; @@ -629,21 +627,35 @@ sci_get_line(sci, line, buf);
// get to the first non-blank char (some kind of ltrim()) - i = start = 0; - while (isspace(buf[i++])) start++; + start = 0; + //while (isspace(buf[i++])) start++; + while (isspace(buf[start])) start++;
// check for begin if (strncmp(buf + start, "\begin", 6) == 0) { - // goto through the line and get the environment, begin at first non-blank char (= start) - for (i = start; i < line_len; i++) + gchar full_cmd[15]; + gint j = 0; + + // take also "\begingroup" (or whatever there can be) and append "\endgroup" and so on. + i = start + 6; + while (buf[i] != '{' && j < (sizeof(full_cmd) - 1)) + { // copy all between "\begin" and "{" to full_cmd + full_cmd[j] = buf[i]; + i++; + j++; + } + full_cmd[j] = '\0'; + + // go through the line and get the environment + for (i = start + j; i < line_len; i++) { if (buf[i] == '{') { - gint j = 0; + j = 0; i++; - while (buf[i] != '}') - { // this could be done in a shorter way, but so it resists readable ;-) + while (buf[i] != '}' && j < (sizeof(env) - 1)) + { // this could be done in a shorter way, but so it remains readable ;-) env[j] = buf[i]; j++; i++; @@ -657,7 +669,7 @@ if (doc_list[idx].use_auto_indention) sci_cb_get_indent(sci, pos, TRUE); eol = g_strconcat(utils_get_eol_char(idx), indent, NULL);
- construct = g_strdup_printf("%s\end{%s}", eol, env); + construct = g_strdup_printf("%s\end%s{%s}", eol, full_cmd, env);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct); sci_goto_pos(sci, pos + 1, TRUE); @@ -670,7 +682,6 @@ return; } } -#endif }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.