geany  1.38
About: Geany is a text editor (using GTK2) with basic features of an integrated development environment (syntax highlighting, code folding, symbol name auto-completion, ...). F: office T: editor programming GTK+ IDE
  Fossies Dox: geany-1.38.tar.bz2  ("unofficial" and yet experimental doxygen-generated source code documentation)  

filetypes.c File Reference
#include "filetypes.h"
#include "app.h"
#include "callbacks.h"
#include "document.h"
#include "filetypesprivate.h"
#include "geany.h"
#include "geanyobject.h"
#include "highlighting.h"
#include "projectprivate.h"
#include "sciwrappers.h"
#include "support.h"
#include "symbols.h"
#include "tm_parser.h"
#include "utils.h"
#include "ui_utils.h"
#include <stdlib.h>
#include <string.h>
#include <glib/gstdio.h>
Include dependency graph for filetypes.c:

Go to the source code of this file.

Macros

#define GEANY_FILETYPE_SEARCH_LINES   2 /* lines of file to search for filetype */
 
#define FT_INIT(ft_id, parser_id, name, title_name, title_type, group_id)
 

Enumerations

enum  TitleType {
  TITLE_NONE , TITLE_SOURCE_FILE , TITLE_FILE , TITLE_SCRIPT ,
  TITLE_DOCUMENT
}
 

Functions

static void create_radio_menu_item (GtkWidget *menu, GeanyFiletype *ftype)
 
static gchar * filetypes_get_conf_extension (const GeanyFiletype *ft)
 
static void read_filetype_config (void)
 
static void create_set_filetype_menu (gboolean config)
 
static gchar * filetypes_get_filename (GeanyFiletype *ft, gboolean user)
 
static gchar * filetype_make_title (const char *name, enum TitleType type)
 
static void ft_init (GeanyFiletypeID ft_id, TMParserType lang, const char *name, const char *title_name, enum TitleType title_type, GeanyFiletypeGroupID group_id)
 
static void init_builtin_filetypes (void)
 
static GeanyFiletypefiletype_new (void)
 
static gint cmp_filetype (gconstpointer pft1, gconstpointer pft2, gpointer data)
 
const GSList * filetypes_get_sorted_by_name (void)
 Gets a list of filetype pointers sorted by name. More...
 
static void filetype_add (GeanyFiletype *ft)
 
static void add_custom_filetype (const gchar *filename)
 
static void init_custom_filetypes (const gchar *path)
 
void filetypes_init_types (void)
 
static void on_document_save (G_GNUC_UNUSED GObject *object, GeanyDocument *doc)
 
static void setup_config_file_menus (void)
 
static GtkWidget * create_sub_menu (GtkWidget *parent, const gchar *title)
 
void filetypes_init (void)
 
static guint match_basename (const GeanyFiletype *ft, const gchar *base_filename)
 
static GeanyFiletypedetect_filetype_conf_file (const gchar *utf8_filename)
 
GeanyFiletypefiletypes_detect_from_extension (const gchar *utf8_filename)
 
static gboolean shebang_find_and_match_filetype (const gchar *utf8_filename, gint first,...)
 
static GeanyFiletypefind_shebang (const gchar *utf8_filename, const gchar *line)
 
static GeanyFiletypefiletypes_detect_from_file_internal (const gchar *utf8_filename, gchar **lines)
 
GeanyFiletypefiletypes_detect_from_document (GeanyDocument *doc)
 
GeanyFiletypefiletypes_detect_from_file (const gchar *utf8_filename)
 Detects filetype based on a shebang line in the file or the filename extension. More...
 
void filetypes_select_radio_item (const GeanyFiletype *ft)
 
static void on_filetype_change (GtkCheckMenuItem *menuitem, gpointer user_data)
 
static void filetype_free (gpointer data, G_GNUC_UNUSED gpointer user_data)
 
void filetypes_free_types (void)
 
static void load_indent_settings (GeanyFiletype *ft, GKeyFile *config, GKeyFile *configh)
 
static void load_settings (guint ft_id, GKeyFile *config, GKeyFile *configh)
 
static void copy_keys (GKeyFile *dest, const gchar *dest_group, GKeyFile *src, const gchar *src_group)
 
static void add_group_keys (GKeyFile *kf, const gchar *group, GeanyFiletype *ft)
 
static void copy_ft_groups (GKeyFile *kf)
 
static void load_system_keyfile (GKeyFile *key_file, const gchar *file, GKeyFileFlags flags, GeanyFiletype *ft)
 
void filetypes_load_config (guint ft_id, gboolean reload)
 
void filetypes_save_commands (GeanyFiletype *ft)
 
GtkFileFilter * filetypes_create_file_filter_all_source (void)
 
GtkFileFilter * filetypes_create_file_filter (const GeanyFiletype *ft)
 
gboolean filetype_has_tags (GeanyFiletype *ft)
 
GeanyFiletypefiletypes_lookup_by_name (const gchar *name)
 Finds a filetype pointer from its name field. More...
 
static void compile_regex (GeanyFiletype *ft, gchar *regstr)
 
gboolean filetypes_parse_error_message (GeanyFiletype *ft, const gchar *message, gchar **filename, gint *line)
 
static void read_extensions (GKeyFile *sysconfig, GKeyFile *userconfig)
 
static void read_group (GKeyFile *config, const gchar *group_name, GeanyFiletypeGroupID group_id)
 
static void read_groups (GKeyFile *config)
 
void filetypes_reload_extensions (void)
 
GeanyFiletypefiletypes_index (gint idx)
 Accessor function for GeanyData::filetypes_array items. More...
 
void filetypes_reload (void)
 
const gchar * filetypes_get_display_name (GeanyFiletype *ft)
 Gets ft->name or a translation for filetype None. More...
 
gboolean filetype_get_comment_open_close (const GeanyFiletype *ft, gboolean single_first, const gchar **co, const gchar **cc)
 
static void * copy_ (void *src)
 
static void free_ (void *doc)
 
GType filetype_get_type (void)
 
 G_DEFINE_BOXED_TYPE (GeanyFiletype, filetype, copy_, free_)
 

Variables

GPtrArray * filetypes_array = NULL
 
static GHashTable * filetypes_hash = NULL
 
GSList * filetypes_by_title = NULL
 

Macro Definition Documentation

◆ FT_INIT

#define FT_INIT (   ft_id,
  parser_id,
  name,
  title_name,
  title_type,
  group_id 
)
Value:
ft_init(GEANY_FILETYPES_##ft_id, TM_PARSER_##parser_id, name, title_name, \
TITLE_##title_type, GEANY_FILETYPE_GROUP_##group_id)
const gchar * name
Definition: document.c:3219
static void ft_init(GeanyFiletypeID ft_id, TMParserType lang, const char *name, const char *title_name, enum TitleType title_type, GeanyFiletypeGroupID group_id)
Definition: filetypes.c:98

Definition at line 110 of file filetypes.c.

◆ GEANY_FILETYPE_SEARCH_LINES

#define GEANY_FILETYPE_SEARCH_LINES   2 /* lines of file to search for filetype */

Definition at line 55 of file filetypes.c.

Enumeration Type Documentation

◆ TitleType

enum TitleType
Enumerator
TITLE_NONE 
TITLE_SOURCE_FILE 
TITLE_FILE 
TITLE_SCRIPT 
TITLE_DOCUMENT 

Definition at line 70 of file filetypes.c.

Function Documentation

◆ add_custom_filetype()

◆ add_group_keys()

static void add_group_keys ( GKeyFile *  kf,
const gchar *  group,
GeanyFiletype ft 
)
static

◆ cmp_filetype()

static gint cmp_filetype ( gconstpointer  pft1,
gconstpointer  pft2,
gpointer  data 
)
static

◆ compile_regex()

static void compile_regex ( GeanyFiletype ft,
gchar *  regstr 
)
static

◆ copy_()

static void * copy_ ( void *  src)
static

Definition at line 1569 of file filetypes.c.

◆ copy_ft_groups()

static void copy_ft_groups ( GKeyFile *  kf)
static

◆ copy_keys()

static void copy_keys ( GKeyFile *  dest,
const gchar *  dest_group,
GKeyFile *  src,
const gchar *  src_group 
)
static

Definition at line 969 of file filetypes.c.

References foreach_strv, NULL, and ptr.

Referenced by add_group_keys(), and copy_ft_groups().

◆ create_radio_menu_item()

static void create_radio_menu_item ( GtkWidget *  menu,
GeanyFiletype ftype 
)
static

◆ create_set_filetype_menu()

◆ create_sub_menu()

static GtkWidget * create_sub_menu ( GtkWidget *  parent,
const gchar *  title 
)
static

Definition at line 410 of file filetypes.c.

References gtk_container_add().

Referenced by create_set_filetype_menu().

◆ detect_filetype_conf_file()

static GeanyFiletype * detect_filetype_conf_file ( const gchar *  utf8_filename)
static

◆ filetype_add()

static void filetype_add ( GeanyFiletype ft)
static

◆ filetype_free()

◆ filetype_get_comment_open_close()

gboolean filetype_get_comment_open_close ( const GeanyFiletype ft,
gboolean  single_first,
const gchar **  co,
const gchar **  cc 
)

◆ filetype_get_type()

GType filetype_get_type ( void  )

◆ filetype_has_tags()

gboolean filetype_has_tags ( GeanyFiletype ft)

◆ filetype_make_title()

static gchar * filetype_make_title ( const char *  name,
enum TitleType  type 
)
static

Definition at line 80 of file filetypes.c.

References _, name, NULL, TITLE_DOCUMENT, TITLE_FILE, TITLE_NONE, TITLE_SCRIPT, and TITLE_SOURCE_FILE.

Referenced by add_custom_filetype(), ft_init(), and read_group().

◆ filetype_new()

◆ filetypes_create_file_filter()

GtkFileFilter * filetypes_create_file_filter ( const GeanyFiletype ft)

◆ filetypes_create_file_filter_all_source()

GtkFileFilter * filetypes_create_file_filter_all_source ( void  )

Definition at line 1182 of file filetypes.c.

References _, filetypes, filetypes_array, and GEANY_FILETYPES_NONE.

Referenced by create_open_file_dialog().

◆ filetypes_detect_from_document()

◆ filetypes_detect_from_extension()

◆ filetypes_detect_from_file()

GeanyFiletype * filetypes_detect_from_file ( const gchar *  utf8_filename)

Detects filetype based on a shebang line in the file or the filename extension.

Parameters
utf8_filenameThe filename in UTF-8 encoding.
Returns
(transfer: none) The detected filetype for utf8_filename or filetypes[GEANY_FILETYPES_NONE] if it could not be detected.

Definition at line 759 of file filetypes.c.

References filetypes_detect_from_extension(), filetypes_detect_from_file_internal(), line, lines, NULL, and utils_get_locale_from_utf8().

◆ filetypes_detect_from_file_internal()

static GeanyFiletype * filetypes_detect_from_file_internal ( const gchar *  utf8_filename,
gchar **  lines 
)
static

◆ filetypes_free_types()

void filetypes_free_types ( void  )

◆ filetypes_get_conf_extension()

◆ filetypes_get_display_name()

const gchar * filetypes_get_display_name ( GeanyFiletype ft)

Gets ft->name or a translation for filetype None.

Parameters
ft.
Returns
.
Since
Geany 0.20

Definition at line 1527 of file filetypes.c.

References _, GEANY_FILETYPES_NONE, GeanyFiletype::id, and GeanyFiletype::name.

Referenced by compile_regex(), create_statusbar_statistics(), and symbols_show_load_tags_dialog().

◆ filetypes_get_filename()

static gchar * filetypes_get_filename ( GeanyFiletype ft,
gboolean  user 
)
static

◆ filetypes_get_sorted_by_name()

const GSList * filetypes_get_sorted_by_name ( void  )

Gets a list of filetype pointers sorted by name.

The list does not change on subsequent calls.

Returns
(element-type: GeanyFiletype) (transfer: none) The list - do not free.
See also
filetypes_by_title.

Definition at line 234 of file filetypes.c.

References cmp_filetype(), filetypes_by_title, list, and NULL.

Referenced by plugin_configure(), and print_filetypes().

◆ filetypes_index()

GeanyFiletype * filetypes_index ( gint  idx)

Accessor function for GeanyData::filetypes_array items.

Example:

@ GEANY_FILETYPES_C
Definition: filetypes.h:55
GeanyFiletype * filetypes_index(gint idx)
Accessor function for GeanyData::filetypes_array items.
Definition: filetypes.c:1489
Parameters
idxfiletypes_array index.
Returns
(transfer: none) The filetype, or NULL if idx is out of range.
Since
0.16

Definition at line 1489 of file filetypes.c.

References filetypes, filetypes_array, and NULL.

Referenced by autocomplete_check_html(), make_comment_block(), and open_file_dialog_handle_response().

◆ filetypes_init()

void filetypes_init ( void  )

Definition at line 461 of file filetypes.c.

References create_set_filetype_menu(), filetypes_init_types(), and setup_config_file_menus().

Referenced by main_lib().

◆ filetypes_init_types()

◆ filetypes_load_config()

◆ filetypes_lookup_by_name()

GeanyFiletype * filetypes_lookup_by_name ( const gchar *  name)

Finds a filetype pointer from its name field.

Parameters
nameFiletype name.
Returns
(transfer: none) The filetype found, or NULL.
Since
0.15

Definition at line 1242 of file filetypes.c.

References EMPTY, filetypes_hash, geany_debug(), name, and NULL.

Referenced by build_load_menu(), copy_ft_groups(), filetypes_detect_from_file_internal(), instantsave_document_new_cb(), load_settings(), open_session_file(), and read_group().

◆ filetypes_parse_error_message()

gboolean filetypes_parse_error_message ( GeanyFiletype ft,
const gchar *  message,
gchar **  filename,
gint *  line 
)

◆ filetypes_reload()

◆ filetypes_reload_extensions()

◆ filetypes_save_commands()

void filetypes_save_commands ( GeanyFiletype ft)

◆ filetypes_select_radio_item()

void filetypes_select_radio_item ( const GeanyFiletype ft)

◆ find_shebang()

◆ free_()

static void free_ ( void *  doc)
static

Definition at line 1570 of file filetypes.c.

◆ ft_init()

static void ft_init ( GeanyFiletypeID  ft_id,
TMParserType  lang,
const char *  name,
const char *  title_name,
enum TitleType  title_type,
GeanyFiletypeGroupID  group_id 
)
static

◆ G_DEFINE_BOXED_TYPE()

G_DEFINE_BOXED_TYPE ( GeanyFiletype  ,
filetype  ,
copy_  ,
free_   
)

◆ init_builtin_filetypes()

static void init_builtin_filetypes ( void  )
static

Definition at line 116 of file filetypes.c.

References _, FT_INIT, NONE, and NULL.

Referenced by filetypes_init_types().

◆ init_custom_filetypes()

static void init_custom_filetypes ( const gchar *  path)
static

Definition at line 287 of file filetypes.c.

References add_custom_filetype(), filename, foreach_dir, and NULL.

Referenced by filetypes_init_types().

◆ load_indent_settings()

static void load_indent_settings ( GeanyFiletype ft,
GKeyFile *  config,
GKeyFile *  configh 
)
static

◆ load_settings()

◆ load_system_keyfile()

static void load_system_keyfile ( GKeyFile *  key_file,
const gchar *  file,
GKeyFileFlags  flags,
GeanyFiletype ft 
)
static

◆ match_basename()

static guint match_basename ( const GeanyFiletype ft,
const gchar *  base_filename 
)
static

◆ on_document_save()

◆ on_filetype_change()

static void on_filetype_change ( GtkCheckMenuItem *  menuitem,
gpointer  user_data 
)
static

Definition at line 797 of file filetypes.c.

References document_get_current(), document_set_filetype(), ignore_callback, and NULL.

Referenced by create_radio_menu_item().

◆ read_extensions()

static void read_extensions ( GKeyFile *  sysconfig,
GKeyFile *  userconfig 
)
static

Definition at line 1381 of file filetypes.c.

References filetypes, filetypes_array, list, name, and NULL.

Referenced by read_filetype_config().

◆ read_filetype_config()

static void read_filetype_config ( void  )
static

◆ read_group()

◆ read_groups()

static void read_groups ( GKeyFile *  config)
static

◆ setup_config_file_menus()

static void setup_config_file_menus ( void  )
static

◆ shebang_find_and_match_filetype()

static gboolean shebang_find_and_match_filetype ( const gchar *  utf8_filename,
gint  first,
  ... 
)
static

Definition at line 561 of file filetypes.c.

References filetypes_array, filetypes_detect_from_extension(), GeanyFiletype::id, and NULL.

Referenced by find_shebang().

Variable Documentation

◆ filetypes_array

◆ filetypes_by_title

◆ filetypes_hash

GHashTable* filetypes_hash = NULL
static