Revision: 2263 http://geany.svn.sourceforge.net/geany/?rev=2263&view=rev Author: eht16 Date: 2008-02-17 10:00:42 -0800 (Sun, 17 Feb 2008)
Log Message: ----------- Add support for generating API reference documentation using doxygen. This is the first step, it is far away from being complete. Add make target "api-doc" to generate the reference documentation. Add documentation comments to a few functions. Move basic plugin documentation from plugindata.h to doc/plugins.dox.
Modified Paths: -------------- trunk/ChangeLog trunk/configure.in trunk/doc/Makefile.am trunk/src/dialogs.c trunk/src/dialogs.h trunk/src/document.c trunk/src/document.h trunk/src/encodings.c trunk/src/encodings.h trunk/src/plugindata.h trunk/src/utils.c trunk/src/utils.h
Added Paths: ----------- trunk/doc/Doxyfile.in trunk/doc/plugins.dox
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/ChangeLog 2008-02-17 18:00:42 UTC (rev 2263) @@ -1,3 +1,16 @@ +2008-02-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * configure.in, doc/Doxyfile.in, doc/Makefile.am, doc/plugins.dox, + src/dialogs.c, src/dialogs.h, src/document.c, src/document.h, + src/encodings.c, src/encodings.h, src/plugindata.h, src/utils.c, + src/utils.h: + Add support for generating API reference documentation using doxygen. + This is the first step, it is far away from being complete. + Add make target "api-doc" to generate the reference documentation. + Add documentation comments to a few functions. + Move basic plugin documentation from plugindata.h to doc/plugins.dox. + + 2008-02-16 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* doc/geany.html, doc/geany.txt:
Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/configure.in 2008-02-17 18:00:42 UTC (rev 2263) @@ -232,6 +232,7 @@ doc/geany.1 geany.spec geany.desktop.in +doc/Doxyfile ])
echo "----------------------------------------"
Added: trunk/doc/Doxyfile.in =================================================================== --- trunk/doc/Doxyfile.in (rev 0) +++ trunk/doc/Doxyfile.in 2008-02-17 18:00:42 UTC (rev 2263) @@ -0,0 +1,270 @@ +# Doxyfile 1.5.4 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = Geany +PROJECT_NUMBER = @VERSION@ +OUTPUT_DIRECTORY = ./ +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class " \ + "The $name widget " \ + "The $name file " \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 +# ALIASES taken from pidgin +ALIASES = "signal=- @ref " \ + "signaldef=@subsection " \ + "endsignaldef= " \ + "signalproto=@code " \ + "endsignalproto=@endcode " \ + "signaldesc=@par Description: " \ + "signals=@b Signals: " \ + "endsignals= " +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = YES +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = NO +INLINE_INFO = NO +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = YES +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = YES +WARN_FORMAT = "$file:$line: $text " +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ../src/ ./ +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.dox \ + *.py \ + *.C \ + *.CC \ + *.C++ \ + *.H \ + *.HH \ + *.H++ \ + *.dox \ +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = reference/ +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +HTML_DYNAMIC_SECTIONS = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = YES +SEARCH_INCLUDES = NO +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +# make G_GNUC_PRINTF a no-op unless doxygen would ignore functions with varargs +PREDEFINED = "G_GNUC_PRINTF(x,y)=" +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = NO +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO
Property changes on: trunk/doc/Doxyfile.in ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native
Modified: trunk/doc/Makefile.am =================================================================== --- trunk/doc/Makefile.am 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/doc/Makefile.am 2008-02-17 18:00:42 UTC (rev 2263) @@ -1,7 +1,7 @@ man_MANS=geany.1 DOCDIR = $(DESTDIR)/$(datadir)/doc/@PACKAGE@ IMAGE_FILES = images/*.png -EXTRA_DIST = geany.html geany.css geany.txt geany.1 \ +EXTRA_DIST = geany.html geany.css geany.txt geany.1 plugins.dox \ $(srcdir)/$(IMAGE_FILES)
pdf: geany.txt @@ -10,6 +10,9 @@ rm -f geany.tex geany.aux geany.log geany.out mv $(srcdir)/geany.pdf geany-$(VERSION).pdf
+api-doc: Doxyfile + doxygen >/dev/null + doc: geany.txt rst2html -stg --stylesheet=geany.css $(srcdir)/geany.txt geany.html
Added: trunk/doc/plugins.dox =================================================================== --- trunk/doc/plugins.dox (rev 0) +++ trunk/doc/plugins.dox 2008-02-17 18:00:42 UTC (rev 2263) @@ -0,0 +1,266 @@ +/* + * plugins.dox - this file is part of Geany, a fast and lightweight IDE + * + * Copyright 2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + * Copyright 2008 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id$ + * + * This file contains additional plugin documentation like the signal system and a small howto. + * It is best viewed when filetype is set to C or C++. + */ + + +/** + * + * @mainpage Geany Plugin API Documentation + * + * @author Enrico Tröger, Nick Treleaven + * @date $Date$ + * + * @section Intro + * This is the Geany API documentation. It is far from being complete and should be + * considered as a work in progress. + * We will try to %document as many functions and structs as possible. + * + * For additional documentation of things like plugin signals or a simple plugin please + * see Related Pages. + * + * + * + * @page symbols Plugin Symbols + * + * The following symbols (functions) should be exported by every plugin. Some of them + * are optional, i.e. they can be omitted, others are required and must be defined. + * + * - @code version_check() @endcode + * Use VERSION_CHECK() macro instead. Required by Geany. + * + * - @code PluginInfo* info() @endcode + * Use PLUGIN_INFO() macro to define it. Required by Geany. + * + * - @code GeanyData* geany_data @endcode + * Geany owned fields and functions. + * + * - @code PluginFields* plugin_fields @endcode + * Plugin owned fields, including flags. + * + * - @code GeanyCallback geany_callbacks[] @endcode + * An array for connecting GeanyObject events, which should be terminated with + * {NULL, NULL, FALSE, NULL}. See @link signals Signal documentation @endlink. + * + * - @code void configure(GtkWidget *parent) @endcode + * Called when the plugin should show a configure dialog to let the user set some basic + * plugin configuration. Optionally, can be omitted when not needed. + * + * - @code void init(GeanyData *data) @endcode + * Called after loading the plugin. data is the same as geany_data. + * + * - @code void cleanup() @endcode + * Called before unloading the plugin. Required for normal plugins - it should undo + * everything done in init() - e.g. destroy menu items, free memory. + * + * + * + * @page signals Plugin Signals + * + * + * @section Usage + * + * To use plugin signals in Geany, you simply create a GeanyCallback array, list the signals + * you want to listen to and create the appropiate signal callbacks for each signal. + * @note The GeanyCallback array has be ended with a final NULL entry. + * + * The following code demonstrates how to use signals in Geany plugins. The code can be inserted + * in your plugin code at any desired position. + * + * @code +static void on_document_open(GObject *obj, gint idx, gpointer user_data) +{ + printf("Example: %s was opened\n", DOC_FILENAME(idx)); +} + +GeanyCallback geany_callbacks[] = +{ + { "document-open", (GCallback) &on_document_open, FALSE, NULL }, + { NULL, NULL, FALSE, NULL } +}; + * @endcode + * + * @section Signals + * + * @signaldef document-new + * @signalproto + * void user_function(GObject *obj, gint idx, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent when a new %document is created. + * @param obj a GeanyObject instance, should be ignored. + * @param idx the index of the new %document. + * @param user_data user data. + * @endsignaldef + * + * @signaldef document-open + * @signalproto + * void user_function(GObject *obj, gint idx, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent when a new %document is opened. + * @param obj a GeanyObject instance, should be ignored. + * @param idx the index of the opened %document. + * @param user_data user data. + * @endsignaldef + * + * @signaldef document-save + * @signalproto + * void user_function(GObject *obj, gint idx, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent when a new %document is saved. + * @param obj a GeanyObject instance, should be ignored. + * @param idx the index of the saved %document. + * @param user_data user data. + * @endsignaldef + * + * @signaldef document-activate + * @signalproto + * void user_function(GObject *obj, gint idx, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent when switching notebook pages. + * @param obj a GeanyObject instance, should be ignored. + * @param idx the index of the new %document. + * @param user_data user data. + * @endsignaldef + * + * @signaldef project-open + * @signalproto + * void user_function(GObject *obj, GKeyFile *config, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent after a project is opened but before session files are loaded. + * @param obj a GeanyObject instance, should be ignored. + * @param config an exising GKeyFile object which can be used to read and write data. + * It must not be closed or freed. + * @param user_data user data. + * @endsignaldef + * + * @signaldef project-save + * @signalproto + * void user_function(GObject *obj, GKeyFile *config, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent when a project is saved(happens when the project is created, the properties + * dialog is closed or Geany is exited). This signal is emitted shortly before Geany + * will write the contents of the GKeyFile to the disc. + * @param obj a GeanyObject instance, should be ignored. + * @param config an exising GKeyFile object which can be used to read and write data. + * It must not be closed or freed. + * @param user_data user data. + * @endsignaldef + * + * @signaldef project-close + * @signalproto + * void user_function(GObject *obj, GKeyFile *config, gpointer user_data); + * @endsignalproto + * @signaldesc + * Sent after a project is closed. + * @param obj a GeanyObject instance, should be ignored. + * @param config an exising GKeyFile object which can be used to read and write data. + * It must not be closed or freed. + * @param user_data user data. + * @endsignaldef + * + * + * + * @page howto Plugin Howto + * + * @section intro Introduction + * + * Since Geany 0.12 there is a plugin interface to extend Geany's functionality and + * add new features. This %document gives a briefly overview about how to add new + * plugins by writing a simple "Hello World" plugin in C. + * + * + * @section start Getting started + * + * @subsection structure Plugin structure + * + * Every plugin must contain some essential symbols unless it won't work. A complete + * list of all necessary and optional symbols can be found in + * @link symbols Plugin Symbols @endlink. + * Every plugin should include "geany.h" and "plugindata.h" which provide necessary + * preprocessor macros and other basic information. + * There are two important preprocessor macros which need to be used at the beginning: + * PLUGIN_INFO() and VERSION_CHECK(). + * + * PLUGIN_INFO() tells Geany about basic plugin information like name, description, + * version and author of the plugin. + * + * VERSION_CHECK() checks for compatibility of the API version which the plugin uses with + * the used Geany sources. Furthermore, it also checks the binary compatiblity of the plugin + * with Geany. + * + * A few functions are necessary to let Geany work with the plugin, at least init() must + * exist in the plugin. cleanup() should also be used to free allocated memory or destroy + * created widgets. + * + * @subsection buildenv Build environment + * + * To be able to write plugins for Geany, you need the source code and some development + * packages for GTK and its dependencies. I will only describe the way to compile and + * build plugins on Unix-like systems [1]. + * If you already have the Geany source code and compiled it from them, you can skip the + * following. + * + * First you need to get the source code of Geany from the website at + * http://geany.uvena.de/Download/Releases [2]. Then install the development files for GTK + * and its dependencies. The easiest way to do this is to use your distribution's package + * management system, e.g. on Debian and Ubuntu systems you can use + * @code apt-get install libgtk2.0-dev intltool @endcode + * This will install all necessary files to be able to compile Geany and plugins. On other + * distributions, the package names and commands to use may differ. + * + * Basically, we are done at this point and could continue with writing the plugin code. + * You don't need necessarily to configure and build the Geany sources when the sources + * have the same version as your running Geany installation. But if the version of the + * sources differ from your Geany installation or especially when you used the source code + * from the Subversion repository, we strongly recommend to configure and build these + * sources and use it. To do so, run @code + ./configure && make + su -c "make install" + * @endcode + * in your Geany source directory. This will build and install Geany on your system. + * + * [1] For Windows, it is basically the same but you might have some more work on setting up + * the general build environment(compiler, GTK development files, ...). This is described on + * Geany's website at http://geany.uvena.de/Support/BuildingOnWin32. + * + * [2] You can also use the bleedging edge source code from our Subversion repository. + * More information about this can be found at http://geany.uvena.de/Download/SVN. + * + * @section helloworld "Hello World" + * + * We want to write a really simple "Hello World" plugin which opens a message dialog + * and just prints "Hello World". + * + * + * ... to be continued ... + * + * + **/
Property changes on: trunk/doc/plugins.dox ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native
Modified: trunk/src/dialogs.c =================================================================== --- trunk/src/dialogs.c 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/dialogs.c 2008-02-17 18:00:42 UTC (rev 2263) @@ -581,8 +581,11 @@ #endif
-/* Show the Save As dialog for the current notebook page. - * Returns: TRUE if the file was saved. */ +/** + * Show the Save As dialog for the current notebook page. + * + * @return @a TRUE if the file was saved, otherwise @a FALSE. + **/ gboolean dialogs_show_save_as() { gboolean result; @@ -607,6 +610,16 @@ }
+/** + * Show a message box of the type @c type with @c text. + * On Unix-like systems a GTK message dialog box is shown, on Win32 systems a native Windows + * message dialog box is shown. + * + * @param type A GtkMessageType, can be one of: GTK_MESSAGE_INFO, GTK_MESSAGE_WARNING, + * GTK_MESSAGE_QUESTION, GTK_MESSAGE_ERROR + * @param text Printf()-style format string. + * @param ... Arguments for the @c text format string. + **/ void dialogs_show_msgbox(gint type, const gchar *text, ...) { #ifndef G_OS_WIN32 @@ -1300,7 +1313,7 @@
static gboolean show_question(GtkWidget *parent, const gchar *yes_btn, const gchar *no_btn, - const gchar *question_text, const gchar *extra_text) + const gchar *question_text, const gchar *extra_text) { gboolean ret = FALSE; #ifdef G_OS_WIN32 @@ -1337,6 +1350,16 @@ }
+/** + * Show a question message box with @c text and Yes/No buttons. + * On Unix-like systems a GTK message dialog box is shown, on Win32 systems a native Windows + * message dialog box is shown. + * + * @param text Printf()-style format string. + * @param ... Arguments for the @c text format string. + * + * @return @a TRUE if the user answered with Yes, otherwise @a FALSE. + **/ gboolean dialogs_show_question(const gchar *text, ...) { gboolean ret = FALSE;
Modified: trunk/src/dialogs.h =================================================================== --- trunk/src/dialogs.h 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/dialogs.h 2008-02-17 18:00:42 UTC (rev 2263) @@ -21,7 +21,12 @@ * $Id$ */
+/** + * @file dialogs.h + * File related dialogs, miscellaneous dialogs, font dialog. + **/
+ #ifndef GEANY_DIALOGS_H #define GEANY_DIALOGS_H 1
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/document.c 2008-02-17 18:00:42 UTC (rev 2263) @@ -22,8 +22,8 @@ */
/* - * Document related actions: new, save, open, etc. - * Also Scintilla search actions. + * Document related actions: new, save, open, etc. + * Also Scintilla search actions. */
#include "geany.h" @@ -121,10 +121,17 @@ }
-/* filename is in UTF-8 for non-TagManager filenames. - * is_tm_filename should only be used when passing a TagManager filename, - * which is therefore locale-encoded and already a realpath(). - * Returns: the document index which has the given filename. */ +/** + * Find and retrieve the index of the given filename @a filename in the %document list. + * + * @param filename The filename to search (in UTF-8 encoding for non-TagManager filenames, + * else in locale encoding). + * @param is_tm_filename Whether the passed @a filename is a TagManager filename and therefore + * locale-encoded and already a realpath(). + * + * @return The %document index which has the given filename @a filename or @c -1 + * if @a filename is not open. + **/ gint document_find_by_filename(const gchar *filename, gboolean is_tm_filename) { guint i; @@ -187,7 +194,14 @@ }
-/* returns the index of the given notebook page in the document list */ +/** + * Find and retrieve the index of the given notebook page @a page_num in the %document list. + * + * @param page_num The notebook page number to search. + * + * @return The index of the given notebook page @a page_num in the %document list or @c -1 + * if no documents are opened. + **/ gint document_get_n_idx(guint page_num) { ScintillaObject *sci; @@ -200,7 +214,12 @@ }
-/* returns the index of the current notebook page in the document list */ +/** + * Find and retrieve the index of the current %document. + * + * @return The index of the current notebook page in the %document list or @c -1 + * if no documents are opened. + **/ gint document_get_cur_idx() { gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook)); @@ -217,7 +236,11 @@ }
-/* returns NULL if no documents are open */ +/** + * Find and retrieve the current %document. + * + * @return A pointer to the current %document or @c NULL if there are no opened documents. + **/ document *document_get_current() { gint idx = document_get_cur_idx(); @@ -238,6 +261,13 @@ }
+/** + * Update the tab labels, the status bar, the window title and some save-sensitive buttons + * according to the document's save state. + * This is called by Geany mostly when opening or saving files. + * + * @param idx The %document index to operate on. + **/ void document_set_text_changed(gint idx) { if (DOC_IDX_VALID(idx) && ! main_status.quitting) @@ -478,7 +508,14 @@ }
-/* removes the given notebook tab and clears the related entry in the document list */ +/** + * Remove the given notebook tab at @a page_num and clear all related information + * in the document list. + * + * @param page_num The notebook page number to remove. + * + * @return @a TRUE if the document was actually removed or @a FALSE otherwise. + **/ gboolean document_remove(guint page_num) { gint idx = document_get_n_idx(page_num); @@ -516,7 +553,11 @@ build_menu_update(-1); } } - else geany_debug("Error: idx: %d page_num: %d", idx, page_num); + else + { + geany_debug("Error: idx: %d page_num: %d", idx, page_num); + return FALSE; + }
return TRUE; } @@ -531,12 +572,16 @@ }
-/* Create a new document. - * filename is either the UTF-8 file name, or NULL. - * If ft is NULL and filename is not NULL, then the filetype will be guessed - * from the given filename. - * text is the contents of the new file in valid UTF-8 encoding, or NULL. - * Returns: idx of new file in doc_list. */ +/** + * Creates a new %document. + * After all, the "document-new" signal is emitted for plugins. + * + * @param filename The file name in UTF-8 encoding, or @c NULL to open a file as "untitled". + * @param ft The filetype to set or @c NULL to detect it from @a filename if not @c NULL. + * @param text The initial content of the file (in UTF-8 encoding), or @c NULL. + * + * @return The index of the new file in the @ref doc_list array. + **/ gint document_new_file(const gchar *filename, filetype *ft, const gchar *text) { gint idx = document_create_new_sci(filename); @@ -597,11 +642,30 @@ }
-/* This is a wrapper for document_open_file_full(), see that function for details. - * Do not use this when opening multiple files (unless using document_delay_colourise()). */ +/** + * Open a %document specified by @a locale_filename. + * After all, the "document-open" signal is emitted for plugins. + * + * When opening more than one file, either: + * -# Use document_open_files(). + * -# Call document_delay_colourise() before document_open_file() and + * document_colourise_new() after opening all files. + * + * This avoids unnecessary recolourising, saving significant processing when a lot of files + * are open of a %filetype that supports user typenames, e.g. C. + * + * @param locale_filename The filename of the %document to load, in locale encoding. + * @param readonly Whether to open the %document in read-only mode. + * @param ft The %filetype for the %document or @c NULL to auto-detect the %filetype. + * @param forced_enc The file encoding to use or @c NULL to auto-detect the file encoding. + * + * @return The index of the opened file or -1 if an error occurred. + **/ gint document_open_file(const gchar *locale_filename, gboolean readonly, filetype *ft, const gchar *forced_enc) { + /* This is a wrapper for document_open_file_full(). + * Do not use this when opening multiple files (unless using document_delay_colourise()). */ return document_open_file_full(-1, locale_filename, 0, readonly, ft, forced_enc); }
@@ -1087,8 +1151,18 @@ }
-/* Takes a linked list of filename URIs and opens each file, ensuring the newly opened - * documents and existing documents (if necessary) are only colourised once. */ +/** + * Opens each file in the list @a filenames, ensuring the newly opened documents and + * existing documents (if necessary) are only colourised once. + * Internally, document_open_file() is called for every list item. + * + * @param filenames A list of filenames to load, in locale encoding. + * @param readonly Whether to open the %document in read-only mode. + * @param ft The %filetype for the %document or @c NULL to auto-detect the %filetype. + * @param forced_enc The file encoding to use or @c NULL to auto-detect the file encoding. + * + * @return The index of the opened file or -1 if an error occurred. + **/ void document_open_files(const GSList *filenames, gboolean readonly, filetype *ft, const gchar *forced_enc) { @@ -1104,9 +1178,15 @@ }
-/* Reload document with index idx. - * forced_enc can be NULL to detect the file encoding. - * Returns: TRUE if successful. */ +/** + * Reloads the %document with the given index @a idx with the specified file encoding + * @a forced_enc or @c NULL to auto-detect the file encoding. + * + * @param idx The %document index for the file to reload. + * @param forced_enc The file encoding to use or @c NULL to auto-detect the file encoding. + * + * @return @a TRUE if the %document was actually reloaded or @a FALSE otherwise. + **/ gboolean document_reload_file(gint idx, const gchar *forced_enc) { gint pos = 0; @@ -1170,9 +1250,19 @@ }
-/* This saves the file. - * When force is set then it is always saved, even if it is unchanged(useful when using Save As) - * It returns whether the file could be saved or not. */ +/** + * Save the %document specified by @a idx. Saving includes replacing tabs by spaces, + * stripping trailing spaces and adding a final new line at the end of the file (all only if + * user enabled these features). The filetype is set again or auto-detected if it wasn't + * set yet. After all, the "document-save" signal is emitted for plugins. + * + * If the file is not modified, this functions does nothing unless force is set to @c TRUE. + * + * @param idx The %document index for the file to save. + * @param force Whether to save the file even if it is not modified (e.g. for Save As). + * + * @return @c TRUE if the file was saved or @c FALSE if the file could not or should not be saved. + **/ gboolean document_save_file(gint idx, gboolean force) { gchar *data; @@ -2161,6 +2251,14 @@ }
+/** + * Sets the encoding of a %document. + * This function only set the encoding of the %document, it does not any conversions. The new + * encoding is used when e.g. saving the file. + * + * @param idx The index of the %document. + * @param new_encoding The encoding to be set for the %document. + **/ void document_set_encoding(gint idx, const gchar *new_encoding) { if (! DOC_IDX_VALID(idx) || new_encoding == NULL ||
Modified: trunk/src/document.h =================================================================== --- trunk/src/document.h 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/document.h 2008-02-17 18:00:42 UTC (rev 2263) @@ -21,7 +21,13 @@ * $Id$ */
+/** + * @file document.h + * Document related actions: new, save, open, etc. + * Also Scintilla search actions. + **/
+ #ifndef GEANY_DOCUMENT_H #define GEANY_DOCUMENT_H 1
@@ -36,72 +42,105 @@ } FileEncoding;
-/* Structure for representing an open tab with all its related stuff. */ +/** + * Structure for representing an open tab with all its properties. + **/ typedef struct document { + /** General flag to represent this document is active and all properties are set correctly. */ gboolean is_valid; + /** Whether this %document support source code symbols(tags) to show in the sidebar. */ gboolean has_tags; - // the filename is encoded in UTF-8, but every GLibC function expect the locale representation + /** The UTF-8 encoded file name. Be careful glibc and GLib functions expect the locale + representation of the file name which can be different from this. + For conversion into locale encoding for use with file functions of GLib, you can use + @ref utils_get_locale_from_utf8. */ gchar *file_name; + /** The encoding of the %document, must be a valid string representation of an encoding, can + * be retrieved with @ref encodings_get_charset_from_index. */ gchar *encoding; + /** Internally used flag to indicate whether the file of this %document has a byte-order-mark. */ gboolean has_bom; + /** The filetype for this %document, it's only a reference to one of the elements of the global + * filetypes array. */ filetype *file_type; + /** TMWorkObject object for this %document. */ TMWorkObject *tm_file; + /** The Scintilla object for this %document. */ ScintillaObject *sci; + /** GtkLabel shown in the notebook header. */ GtkWidget *tab_label; + /** GtkLabel shown in the notebook right-click menu. */ GtkWidget *tabmenu_label; + /** GtkTreeView object for this %document within the Open Files treeview of the sidebar. */ GtkWidget *tag_tree; + /** GtkTreeStore object for this %document within the Open Files treeview of the sidebar. */ GtkTreeStore *tag_store; - GtkTreeIter iter; // open files item for this document + /** Iter for this %document within the Open Files treeview of the sidebar. */ + GtkTreeIter iter; + /** Whether this %document is read-only. */ gboolean readonly; + /** Whether this %document has been changed since it was last saved. */ gboolean changed; + /** %Document-specific line wrapping setting. */ gboolean line_wrapping; + /** %Document-specific indentation setting. */ gboolean auto_indent; - gfloat scroll_percent; // % to scroll view by on paint, if positive. - time_t last_check; // to remember the last disk check + /** Percentage to scroll view by on paint, if positive. */ + gfloat scroll_percent; + /** Time of the last disk check. */ + time_t last_check; + /** Modification time of this %document on disk. */ time_t mtime; + /** Internally used by the Undo/Redo management code. */ GTrashStack *undo_actions; + /** Internally used by the Undo/Redo management code. */ GTrashStack *redo_actions; + /** Internally used. */ FileEncoding saved_encoding; + /** %Document-specific tab setting. */ gboolean use_tabs; } document;
-/* dynamic array of document elements to hold all information of the notebook tabs */ +// Dynamic array of document elements to hold all information of the notebook tabs. extern GArray *doc_array;
-/* doc_list wraps doc_array so it can be used with C array syntax. - * Example: doc_list[0].sci = NULL; */ +/** + * doc_list wraps doc_array so it can be used with C array syntax. + * Example: doc_list[0].sci = NULL; + **/ #define doc_list ((document *)doc_array->data)
-#define DOC_IDX_VALID(idx) \ - ((idx) >= 0 && (guint)(idx) < doc_array->len && doc_list[idx].is_valid) +/** + * DOC_IDX_VALID checks whether the passed index points to a valid %document object by checking + * important properties. It returns FALSE if the index is not valid and then this index + * must not be used. + **/ +#define DOC_IDX_VALID(doc_idx) \ + ((doc_idx) >= 0 && (guint)(doc_idx) < doc_array->len && doc_list[doc_idx].is_valid)
+/** + * DOC_FILENAME) returns the filename of the %document corresponding to the passed index or + * GEANY_STRING_UNTITLED (e.g. _("untitled")) if the %document's filename was not yet set. + * This macro never returns NULL. + **/ #define DOC_FILENAME(doc_idx) \ - ((doc_list[doc_idx].file_name != NULL) ? \ - (doc_list[doc_idx].file_name) : GEANY_STRING_UNTITLED) + ((doc_list[doc_idx].file_name != NULL) ? (doc_list[doc_idx].file_name) : GEANY_STRING_UNTITLED)
-/* returns the document index which has the given filename. - * is_tm_filename is needed when passing TagManager filenames because they are - * dereferenced, and would not match the link filename. */ gint document_find_by_filename(const gchar *filename, gboolean is_tm_filename);
-/* returns the document index which has sci */ gint document_find_by_sci(ScintillaObject *sci);
-/* returns the index of the notebook page from the document index */ gint document_get_notebook_page(gint doc_idx);
-/* returns the index of the given notebook page in the document list */ gint document_get_n_idx(guint page_num);
-/* returns the index of the current notebook page in the document list */ gint document_get_cur_idx();
-/* returns NULL if no documents are open */ document *document_get_current();
@@ -113,33 +152,25 @@ void document_set_text_changed(gint idx);
-// Apply just the prefs that can change in the Preferences dialog void document_apply_update_prefs(gint idx);
-/* removes the given notebook tab and clears the related entry in the document list */ gboolean document_remove(guint page_num);
-/* See document.c. */ gint document_new_file(const gchar *filename, filetype *ft, const gchar *text);
gint document_clone(gint old_idx, const gchar *utf8_filename);
-/* See document.c. */ gint document_open_file(const gchar *locale_filename, gboolean readonly, filetype *ft, const gchar *forced_enc);
gint document_open_file_full(gint idx, const gchar *filename, gint pos, gboolean readonly, filetype *ft, const gchar *forced_enc);
-/* Takes a new line separated list of filename URIs and opens each file. - * length is the length of the string or -1 if it should be detected */ void document_open_file_list(const gchar *data, gssize length);
-/* Takes a linked list of filename URIs and opens each file, ensuring the newly opened - * documents and existing documents (if necessary) are only colourised once. */ void document_open_files(const GSList *filenames, gboolean readonly, filetype *ft, const gchar *forced_enc);
@@ -147,16 +178,11 @@ gboolean document_reload_file(gint idx, const gchar *forced_enc);
-/* This saves the file. - * When force is set then it is always saved, even if it is unchanged(useful when using Save As) - * It returns whether the file could be saved or not. */ gboolean document_save_file(gint idx, gboolean force);
gboolean document_search_bar_find(gint idx, const gchar *text, gint flags, gboolean inc);
-/* General search function, used from the find dialog. - * Returns -1 on failure or the start position of the matching text. */ gint document_find_text(gint idx, const gchar *text, gint flags, gboolean search_backwards, gboolean scroll, GtkWidget *parent);
@@ -173,7 +199,6 @@
void document_update_tag_list(gint idx, gboolean update);
-/* sets the filetype of the document (sets syntax highlighting and tagging) */ void document_set_filetype(gint idx, filetype *type);
gchar *document_get_eol_mode(gint idx);
Modified: trunk/src/encodings.c =================================================================== --- trunk/src/encodings.c 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/encodings.c 2008-02-17 18:00:42 UTC (rev 2263) @@ -178,18 +178,17 @@ }
-/* - * gtk_status_icon_get_stock: - * @idx: #GeanyEncodingIndex to retrieve the corresponding character set +/** + * Gets the character set name of the specified index e.g. for use with + * @ref document_set_encoding(). * - * Gets the character set name of the specified index e.g. for use with - * document_set_encoding. + * @param idx @ref GeanyEncodingIndex to retrieve the corresponding character set. * - * Return value: charset according to idx, - * or %NULL if the index is invalid. * - * Since: 0.13 - */ + * @return The charset according to idx, or @c NULL if the index is invalid. + * + * @since 0.13 + **/ const gchar* encodings_get_charset_from_index(gint idx) { g_return_val_if_fail(idx >= 0 && idx < GEANY_ENCODINGS_MAX, NULL); @@ -406,19 +405,18 @@ }
-/* - * encodings_convert_to_utf8_from_charset: - * @buffer: the input string to convert - * @size: the length of the string, or -1 if the string is nul-terminated - * @charset: the charset to be used for conversion - * @fast: TRUE to only convert the input and skip extended checks on the converted string +/** + * Tries to convert @a buffer into UTF-8 encoding from the encoding specified with @a charset. + * If @a fast is not set, additional checks to validate the converted string are performed. * - * Tries to convert @buffer into UTF-8 encoding from the encoding specified with @charset. - * If @fast is not set, additional checks to validate the converted string are performed. + * @param buffer The input string to convert. + * @param size The length of the string, or -1 if the string is nul-terminated. + * @param charset The charset to be used for conversion. + * @param fast @c TRUE to only convert the input and skip extended checks on the converted string. * - * Return value: If the conversion was successful, a newly allocated nul-terminated string, - * which must be freed with g_free(). Otherwise %NULL. - */ + * @return If the conversion was successful, a newly allocated nul-terminated string, + * which must be freed with g_free(). Otherwise @c NULL. + **/ gchar *encodings_convert_to_utf8_from_charset(const gchar *buffer, gsize size, const gchar *charset, gboolean fast) { @@ -462,18 +460,17 @@ }
-/* - * encodings_convert_to_utf8: - * @buffer: the input string to convert - * @size: the length of the string, or -1 if the string is nul-terminated. - * @used_encoding: return location of the detected encoding of the input string, or %NULL +/** + * Tries to convert @a buffer into UTF-8 encoding and store the detected original encoding in + * @a used_encoding. * - * Tries to convert @buffer into UTF-8 encoding and store the detected original encoding in - * @used_encoding. + * @param buffer the input string to convert. + * @param size the length of the string, or -1 if the string is nul-terminated. + * @param used_encoding return location of the detected encoding of the input string, or @c NULL. * - * Return value: If the conversion was successful, a newly allocated nul-terminated string, - * which must be freed with g_free(). Otherwise %NULL. - */ + * @return If the conversion was successful, a newly allocated nul-terminated string, + * which must be freed with g_free(). Otherwise @c NULL. + **/ gchar *encodings_convert_to_utf8(const gchar *buffer, gsize size, gchar **used_encoding) { gchar *locale_charset = NULL;
Modified: trunk/src/encodings.h =================================================================== --- trunk/src/encodings.h 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/encodings.h 2008-02-17 18:00:42 UTC (rev 2263) @@ -22,6 +22,11 @@ */
+/** + * @file encodings.h + * Encoding conversion and Byte Order Mark (BOM) handling. + **/ + /* * Modified by the gedit Team, 2002. See the gedit AUTHORS file for a * list of people on the gedit Team. @@ -47,12 +52,19 @@ GEANY_ENCODING_GROUPS_MAX } GeanyEncodingGroup;
+ +/** Structure to represent an encoding to be used in Geany. */ typedef struct { + /** The index of the encoding, must be one of GeanyEncodingIndex. */ gint idx; + /** Internally used member for grouping */ gint order; + /** Internally used member for grouping */ GeanyEncodingGroup group; + /** String representation of the encoding, e.g. "ISO-8859-3" */ gchar *charset; + /** Translatable and descriptive name of the encoding, e.g. "South European" */ gchar *name; } GeanyEncoding;
@@ -85,6 +97,10 @@ * Copyright (C) 2002 Red Hat, Inc. */
+/** + * @enum GeanyEncodingIndex + * List of known and supported encodings. + **/ typedef enum { GEANY_ENCODING_ISO_8859_1,
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/plugindata.h 2008-02-17 18:00:42 UTC (rev 2263) @@ -25,70 +25,13 @@ #ifndef PLUGIN_H #define PLUGIN_H
-/** - * Public symbols supported: - * - * version_check() - * Use VERSION_CHECK() macro instead. Required by Geany. - * - * PluginInfo* info() - * Use PLUGIN_INFO() macro to define it. Required by Geany. - * - * GeanyData* geany_data - * Geany owned fields and functions. - * - * PluginFields* plugin_fields - * Plugin owned fields, including flags. - * - * GeanyCallback geany_callbacks[] - * An array for connecting GeanyObject events, which should be terminated with - * {NULL, NULL, FALSE, NULL}. See signals below. - * - * void configure(GtkWidget *parent) - * Called when the plugin should show a configure dialog to let the user set some basic - * plugin configuration. Optionally, can be omitted when not needed. - * - * void init(GeanyData *data) - * Called after loading the plugin. data is the same as geany_data. - * - * void cleanup() - * Called before unloading the plugin. Required for normal plugins - it should undo - * everything done in init() - e.g. destroy menu items, free memory. - */
/** - * Signals: - * - * "document-new" - * Sent when a new document is created. - * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); - * - * "document-open" - * Sent when a file is opened. - * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); - * - * "document-save" - * Sent when a file is saved. - * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); - * - * "document-activate" - * Sent when switching notebook pages. - * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); - * - * "project-open" - * Sent after a project is opened but before session files are loaded. - * Handler: void user_function(GObject *obj, GKeyFile *config, gpointer user_data); - * - * "project-save" - * Sent when a project is saved(happens when the project is created, the properties - * dialog is closed or Geany is exited). This signal is emitted shortly before Geany - * will write the contents of the GKeyFile to the disc. - * Handler: void user_function(GObject *obj, GKeyFile *config, gpointer user_data); - * - * "project-close" - * Sent after a project is closed. - * Handler: void user_function(GObject *obj, gpointer user_data); - */ + * @file plugindata.h + * This file defines the plugin API, the interface between Geany and its plugins. + * For detailed documentation of the plugin system please read the plugin + * API documentation. + **/
/* The API version should be incremented whenever any plugin data types below are @@ -142,17 +85,23 @@ }
-/* For geany_callbacks array - see top of file. */ +/** callback array entry */ typedef struct GeanyCallback { + /** The name of signal, must be an existing signal. For a list of available signals, + * please see the @link signals Signal documentation @endlink. */ gchar *signal_name; + /** A callback function which is called when the signal is emitted. */ GCallback callback; + /** Set to TRUE to connect your handler with g_signal_connect_after(). */ gboolean after; + /** The user data passed to the signal handler. */ gpointer user_data; } GeanyCallback;
+ typedef enum { PLUGIN_IS_DOCUMENT_SENSITIVE = 1 << 0 // if menu_item should be disabled when there are no documents
Modified: trunk/src/utils.c =================================================================== --- trunk/src/utils.c 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/utils.c 2008-02-17 18:00:42 UTC (rev 2263) @@ -223,6 +223,17 @@ }
+/** + * Write the given @c text into a file with @c filename. + * If the file doesn't exist, it will be created. + * If it already exists, it will be overwritten. + * + * @param filename The filename of the file to write, in locale encoding. + * @param text The text to write into the file. + * + * @return 0 if the directory was successfully created, otherwise the @c errno of the + * failed operation is returned. + **/ gint utils_write_file(const gchar *filename, const gchar *text) { FILE *fp; @@ -639,12 +650,18 @@ }
-/* (taken from libexo from os-cillation) - * NULL-safe string comparison. Returns TRUE if both a and b are - * NULL or if a and b refer to valid strings which are equal. - */ +/** + * @a NULL-safe string comparison. Returns @a TRUE if both @c a and @c b are @a NULL + * or if @c a and @c b refer to valid strings which are equal. + * + * @param a Pointer to first string or @a NULL. + * @param b Pointer to first string or @a NULL. + * + * @return @a TRUE if @c a equals @c b, else @a FALSE. + **/ gboolean utils_str_equal(const gchar *a, const gchar *b) { + /* (taken from libexo from os-cillation) */ if (a == NULL && b == NULL) return TRUE; else if (a == NULL || b == NULL) return FALSE;
@@ -656,8 +673,13 @@ }
-/* removes the extension from filename and return the result in - * a newly allocated string */ +/** + * Remove the extension from @c filename and return the result in a newly allocated string. + * + * @param filename The filename to operate on. + * + * @return A newly-allocated string, should be freed when no longer needed. + **/ gchar *utils_remove_ext_from_filename(const gchar *filename) { gchar *last_dot = strrchr(filename, '.'); @@ -938,8 +960,20 @@ }
-/* Wrapper functions for Key-File-Parser from GLib in keyfile.c to reduce code size */ -gint utils_get_setting_integer(GKeyFile *config, const gchar *section, const gchar *key, const gint default_value) +/** + * Convenience function for g_key_file_get_integer() to add a default value argument. + * + * @param config A GKeyFile object. + * @param section The group name to look in for the key. + * @param key The key to find. + * @param default_value The default value which will be returned when @c section or @c key + * don't exist. + * + * @return The value associated with c key as an integer, or the given default value if the value + * could not be retrieved. + **/ +gint utils_get_setting_integer(GKeyFile *config, const gchar *section, const gchar *key, + const gint default_value) { gint tmp; GError *error = NULL; @@ -956,7 +990,20 @@ }
-gboolean utils_get_setting_boolean(GKeyFile *config, const gchar *section, const gchar *key, const gboolean default_value) +/** + * Convenience function for g_key_file_get_boolean() to add a default value argument. + * + * @param config A GKeyFile object. + * @param section The group name to look in for the key. + * @param key The key to find. + * @param default_value The default value which will be returned when @c section or @c key + * don't exist. + * + * @return The value associated with c key as a boolean, or the given default value if the value + * could not be retrieved. + **/ +gboolean utils_get_setting_boolean(GKeyFile *config, const gchar *section, const gchar *key, + const gboolean default_value) { gboolean tmp; GError *error = NULL; @@ -973,7 +1020,20 @@ }
-gchar *utils_get_setting_string(GKeyFile *config, const gchar *section, const gchar *key, const gchar *default_value) +/** + * Convenience function for g_key_file_get_string() to add a default value argument. + * + * @param config A GKeyFile object. + * @param section The group name to look in for the key. + * @param key The key to find. + * @param default_value The default value which will be returned when @c section or @c key + * don't exist. + * + * @return A newly allocated string, or the given default value if the value could not be + * retrieved. + **/ +gchar *utils_get_setting_string(GKeyFile *config, const gchar *section, const gchar *key, + const gchar *default_value) { gchar *tmp; GError *error = NULL; @@ -1086,8 +1146,8 @@
/* taken from busybox, thanks */ -gchar *utils_make_human_readable_str(unsigned long long size, unsigned long block_size, - unsigned long display_unit) +gchar *utils_make_human_readable_str(unsigned long long size, gulong block_size, + gulong display_unit) { /* The code will adjust for additional (appended) units. */ static const gchar zero_and_units[] = { '0', 0, 'K', 'M', 'G', 'T' }; @@ -1179,7 +1239,7 @@ }
-// Returns: new string with the current time formatted HH:MM:SS. +// Returns: newly allocated string with the current time formatted HH:MM:SS. gchar *utils_get_current_time_string() { const time_t tp = time(NULL); @@ -1402,7 +1462,15 @@ }
-/* Null-safe with fallback encoding conversion. */ +/** + * Converts the given UTF-8 encoded string into locale encoding. + * On Windows platforms, it does nothing and instead it just returns a copy of the input string. + * + * @param utf8_text UTF-8 encoded text. + * + * @return The converted string in locale encoding, or a copy of the input string if conversion + * failed. Should be freed with g_free(). If @a utf8_text is @c NULL, @c NULL is returned. + **/ gchar *utils_get_locale_from_utf8(const gchar *utf8_text) { #ifdef G_OS_WIN32 @@ -1422,7 +1490,15 @@ }
-/* Null-safe with fallback encoding conversion. */ +/** + * Converts the given string (in locale encoding) into UTF-8 encoding. + * On Windows platforms, it does nothing and instead it just returns a copy of the input string. + * + * @param locale_text Text in locale encoding. + * + * @return The converted string in UTF-8 encoding, or a copy of the input string if conversion + * failed. Should be freed with g_free(). If @a locale_text is @c NULL, @c NULL is returned. + **/ gchar *utils_get_utf8_from_locale(const gchar *locale_text) { #ifdef G_OS_WIN32 @@ -1575,6 +1651,16 @@ #endif
+/** + * Create a directory if it doesn't already exist. + * Create intermediate parent directories as needed, too. + * + * @param path The path of the directory to create, in locale encoding. + * @param create_parent_dirs Whether to create intermediate parent directories if necessary. + * + * @return 0 if the directory was successfully created, otherwise the @c errno of the + * failed operation is returned. + **/ gint utils_mkdir(const gchar *path, gboolean create_parent_dirs) { gint mode = 0700; @@ -1590,12 +1676,19 @@ }
-/* Gets a sorted list of files from the specified directory. - * Locale encoding is expected for path and used for the file list. - * The list and the data in the list should be freed after use. - * Returns: The list or NULL if no files found. - * length will point to the number of non-NULL data items in the list, unless NULL. - * error is the location for storing a possible error, or NULL. */ +/** + * Gets a sorted list of files from the specified directory. + * Locale encoding is expected for path and used for the file list. The list and the data + * in the list should be freed after use. + * + * @param path The path of the directory to scan, in locale encoding. + * @param length The location to store the number of non-@a NULL data items in the list, + * unless @a NULL. + * @param error The is the location for storing a possible error, or @a NULL. + * + * @return A newly allocated list or @a NULL if no files found. The list and its data should be + * freed when no longer needed. + **/ GSList *utils_get_file_list(const gchar *path, guint *length, GError **error) { GSList *list = NULL; @@ -1648,10 +1741,18 @@ }
-/* Replaces all occurrences of needle in str with replace. - * Currently this is not safe if replace matches needle. - * Returns: TRUE if needle was found. */ -gboolean utils_string_replace_all(GString *str, const gchar *needle, const gchar *replace) +/** + * Replaces all occurrences of @c needle in @c haystack with @c replace. + * Currently this is not safe if @c replace matches @c needle, so @c needle and @c replace + * must not be equal. + * + * @param haystack The input string to operate on. This string is modified in place. + * @param needle The string which should be replaced. + * @param replace The replacement for @c needle. + * + * @return @a TRUE if @c needle was found, else @a FALSE. + **/ +gboolean utils_string_replace_all(GString *haystack, const gchar *needle, const gchar *replace) { const gchar *c; gssize pos = -1; @@ -1661,15 +1762,15 @@
while (1) { - c = strstr(str->str, needle); + c = strstr(haystack->str, needle); if (c == NULL) break; else { - pos = c - str->str; - g_string_erase(str, pos, strlen(needle)); + pos = c - haystack->str; + g_string_erase(haystack, pos, strlen(needle)); if (replace) - g_string_insert(str, pos, replace); + g_string_insert(haystack, pos, replace); } } return (pos != -1);
Modified: trunk/src/utils.h =================================================================== --- trunk/src/utils.h 2008-02-16 11:21:24 UTC (rev 2262) +++ trunk/src/utils.h 2008-02-17 18:00:42 UTC (rev 2263) @@ -21,18 +21,24 @@ * $Id$ */
+/** + * @file: utils.h + * General utility functions, non-GTK related. + */
#ifndef GEANY_UTILS_H #define GEANY_UTILS_H 1
-// Returns: TRUE if ptr points to a non-zero value. +/** Returns: TRUE if @a ptr points to a non-zero value. */ #define NZV(ptr) \ ((ptr) && (ptr)[0])
-/* Free's ptr (if not NULL), then assigns result to it. - * result can be an expression using the 'old' value of ptr. - * It prevents a memory leak compared with: ptr = func(ptr); */ -#define setptr(ptr, result)\ +/** + * Free's @a ptr (if not @c NULL), then assigns @a result to it. + * @a result can be an expression using the 'old' value of @a ptr. + * It prevents a memory leak compared with: @code ptr = func(ptr); @endcode + **/ +#define setptr(ptr, result) \ {\ gpointer setptr_tmp = ptr;\ ptr = result;\ @@ -42,7 +48,6 @@
void utils_start_browser(const gchar *uri);
-/* taken from anjuta, to determine the EOL mode of the file */ gint utils_get_line_endings(gchar* buffer, glong size);
gboolean utils_isbrace(gchar c, gboolean include_angles); @@ -59,13 +64,10 @@
gboolean utils_check_disk_status(gint idx, gboolean force);
-//gchar *utils_get_current_tag(gint idx, gint direction); gint utils_get_current_function(gint idx, const gchar **tagname);
-/* returns the end-of-line character(s) length of the specified editor */ gint utils_get_eol_char_len(gint idx);
-/* returns the end-of-line character(s) of the specified editor */ const gchar *utils_get_eol_char(gint idx);
gboolean utils_atob(const gchar *str); @@ -74,31 +76,22 @@
gdouble utils_scale_round(gdouble val, gdouble factor);
-/* (taken from libexo from os-cillation) - * NULL-safe string comparison. Returns TRUE if both a and b are - * NULL or if a and b refer to valid strings which are equal. - */ gboolean utils_str_equal(const gchar *a, const gchar *b);
-/* removes the extension from filename and return the result in - * a newly allocated string */ gchar *utils_remove_ext_from_filename(const gchar *filename);
- gchar utils_brace_opposite(gchar ch);
gchar *utils_get_hostname();
gint utils_make_settings_dir();
- gboolean utils_string_replace_all(GString *str, const gchar *needle, const gchar *replace);
gchar *utils_str_replace(gchar *haystack, const gchar *needle, const gchar *replacement);
gint utils_strpos(const gchar* haystack, const gchar * needle);
- gchar *utils_get_date_time(const gchar *format, time_t *time_to_use);
gchar *utils_get_initials(gchar *name); @@ -121,15 +114,11 @@
void utils_beep();
-gchar *utils_make_human_readable_str(unsigned long long size, unsigned long block_size, - unsigned long display_unit); +gchar *utils_make_human_readable_str(unsigned long long size, gulong block_size, + gulong display_unit);
-/* utils_strtod() converts a string containing a hex colour ("0x00ff00") into an integer. - * Basically, it is the same as strtod() would do, but it does not understand hex colour values, - * before ANSI-C99. With with_route set, it takes strings of the format "#00ff00". */ gint utils_strtod(const gchar *source, gchar **end, gboolean with_route);
-// returned string must be freed. gchar *utils_get_current_time_string();
GIOChannel *utils_set_up_io_channel(gint fd, GIOCondition cond, gboolean nblock, @@ -137,37 +126,20 @@
gchar **utils_read_file_in_array(const gchar *filename);
-/* Contributed by Stefan Oltmanns, thanks. - * Replaces \, \r, \n, \t and \uXXX by their real counterparts */ gboolean utils_str_replace_escape(gchar *string);
-/* Wraps a string in place, replacing a space with a newline character. - * wrapstart is the minimum position to start wrapping or -1 for default */ gboolean utils_wrap_string(gchar *string, gint wrapstart);
-/* Simple wrapper for g_locale_from_utf8; returns a copy of utf8_text on failure. */ gchar *utils_get_locale_from_utf8(const gchar *utf8_text);
-/* Simple wrapper for g_locale_to_utf8; returns a copy of locale_text on failure. */ gchar *utils_get_utf8_from_locale(const gchar *locale_text);
- -/* Frees all passed pointers if they are *ALL* non-NULL. - * Do not use if any pointers may be NULL. - * The first argument is nothing special, it will also be freed. - * The list must be ended with NULL. */ void utils_free_pointers(gpointer first, ...) G_GNUC_NULL_TERMINATED;
-/* Creates a string array deep copy of a series of non-NULL strings. - * The first argument is nothing special. - * The list must be ended with NULL. - * If first is NULL, NULL is returned. */ gchar **utils_strv_new(gchar *first, ...) G_GNUC_NULL_TERMINATED;
- gint utils_mkdir(const gchar *path, gboolean create_parent_dirs);
-/* Gets a sorted list of files in the specified directory. */ GSList *utils_get_file_list(const gchar *path, guint *length, GError **error);
gboolean utils_str_has_upper(const gchar *str);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.