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. git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@2263 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
parent
753e2936d8
commit
0e65cff820
13
ChangeLog
13
ChangeLog
@ -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:
|
||||
|
@ -232,6 +232,7 @@ doc/Makefile
|
||||
doc/geany.1
|
||||
geany.spec
|
||||
geany.desktop.in
|
||||
doc/Doxyfile
|
||||
])
|
||||
|
||||
echo "----------------------------------------"
|
||||
|
270
doc/Doxyfile.in
Normal file
270
doc/Doxyfile.in
Normal file
@ -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
|
@ -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 @@ pdf: geany.txt
|
||||
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
|
||||
|
||||
|
266
doc/plugins.dox
Normal file
266
doc/plugins.dox
Normal file
@ -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 ...
|
||||
*
|
||||
*
|
||||
**/
|
@ -581,8 +581,11 @@ static gboolean gtk_show_save_as(const gchar *initdir)
|
||||
#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 @@ gboolean dialogs_show_save_as()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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 @@ void dialogs_show_file_properties(gint idx)
|
||||
|
||||
|
||||
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 @@ static gboolean show_question(GtkWidget *parent, const gchar *yes_btn, const gch
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
@ -21,6 +21,11 @@
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file dialogs.h
|
||||
* File related dialogs, miscellaneous dialogs, font dialog.
|
||||
**/
|
||||
|
||||
|
||||
#ifndef GEANY_DIALOGS_H
|
||||
#define GEANY_DIALOGS_H 1
|
||||
|
152
src/document.c
152
src/document.c
@ -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 @@ static gchar *get_real_path_from_utf8(const gchar *utf8_filename)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gint document_get_notebook_page(gint doc_idx)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gint document_get_n_idx(guint page_num)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gint document_get_cur_idx()
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ void document_finalize()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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 @@ static gint document_create_new_sci(const gchar *filename)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gboolean document_remove(guint page_num)
|
||||
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 @@ static void store_saved_encoding(gint idx)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gint document_new_file(const gchar *filename, filetype *ft, const gchar *text)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ 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. */
|
||||
/**
|
||||
* 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 @@ void document_open_files(const GSList *filenames, gboolean readonly, filetype *f
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ static void get_line_column_from_pos(gint idx, guint byte_pos, gint *line, gint
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ void document_ensure_final_newline(gint idx)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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 ||
|
||||
|
@ -21,6 +21,12 @@
|
||||
* $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 @@ typedef struct FileEncoding
|
||||
} 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_finalize();
|
||||
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 @@ void document_open_files(const GSList *filenames, gboolean readonly, filetype *f
|
||||
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_set_font(gint idx, const gchar *font_name, gint size);
|
||||
|
||||
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);
|
||||
|
@ -178,18 +178,17 @@ const GeanyEncoding *encodings_get_from_index(gint idx)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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 @@ void encodings_init(void)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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 @@ gchar *encodings_convert_to_utf8_from_charset(const gchar *buffer, gsize size,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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;
|
||||
|
@ -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 @@ typedef enum
|
||||
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 @@ gboolean encodings_is_unicode_charset(const gchar *string);
|
||||
* Copyright (C) 2002 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @enum GeanyEncodingIndex
|
||||
* List of known and supported encodings.
|
||||
**/
|
||||
typedef enum
|
||||
{
|
||||
GEANY_ENCODING_ISO_8859_1,
|
||||
|
@ -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 @@ PluginInfo;
|
||||
}
|
||||
|
||||
|
||||
/* 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
|
||||
|
159
src/utils.c
159
src/utils.c
@ -223,6 +223,17 @@ gboolean utils_goto_line(gint idx, gint line)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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 @@ 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.
|
||||
*/
|
||||
/**
|
||||
* @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 @@ gboolean utils_str_equal(const gchar *a, const gchar *b)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gchar *utils_get_initials(gchar *name)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gint utils_get_setting_integer(GKeyFile *config, const gchar *section, const gch
|
||||
}
|
||||
|
||||
|
||||
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 @@ gboolean utils_get_setting_boolean(GKeyFile *config, const gchar *section, const
|
||||
}
|
||||
|
||||
|
||||
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 @@ void utils_beep()
|
||||
|
||||
|
||||
/* 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 @@ gint utils_strtod(const gchar *source, gchar **end, gboolean with_route)
|
||||
}
|
||||
|
||||
|
||||
// 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 @@ gboolean utils_wrap_string(gchar *string, gint wrapstart)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gchar *utils_get_locale_from_utf8(const gchar *utf8_text)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ g_mkdir_with_parents (const gchar *pathname,
|
||||
#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 @@ gint utils_mkdir(const gchar *path, gboolean create_parent_dirs)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gboolean utils_str_has_upper(const gchar *str)
|
||||
}
|
||||
|
||||
|
||||
/* 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 @@ gboolean utils_string_replace_all(GString *str, const gchar *needle, const gchar
|
||||
|
||||
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);
|
||||
|
54
src/utils.h
54
src/utils.h
@ -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 @@ gchar *utils_find_open_xml_tag(const gchar sel[], gint size, gboolean check_tag)
|
||||
|
||||
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 @@ gboolean utils_is_absolute_path(const gchar *path);
|
||||
|
||||
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 @@ gchar *utils_get_current_file_dir_utf8();
|
||||
|
||||
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 @@ GIOChannel *utils_set_up_io_channel(gint fd, GIOCondition cond, gboolean nblock,
|
||||
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user