[geany/geany] 82e09b: added a bibtex parser that extracts identifiers of entries in bib-files and makes them accessible on the sidebar
Mirco Schoenfeld
git-noreply at xxxxx
Wed Oct 30 00:12:11 UTC 2019
Branch: refs/heads/master
Author: Mirco Schoenfeld <mirco.schoenfeld at tum.de>
Committer: Mirco Schoenfeld <mirco.schoenfeld at tum.de>
Date: Tue, 09 Jul 2019 14:33:53 UTC
Commit: 82e09b5d9b9eed03d42b5ef82c6efaacb0fffc7b
https://github.com/geany/geany/commit/82e09b5d9b9eed03d42b5ef82c6efaacb0fffc7b
Log Message:
-----------
added a bibtex parser that extracts identifiers of entries in bib-files and makes them accessible on the sidebar
Modified Paths:
--------------
ctags/Makefile.am
ctags/main/parsers.h
ctags/parsers/bibtex.c
data/filedefs/filetypes.bibtex
data/filetype_extensions.conf
src/filetypes.c
src/filetypes.h
src/symbols.c
src/tagmanager/tm_parser.c
src/tagmanager/tm_parser.h
Modified: ctags/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -14,6 +14,7 @@ parsers = \
parsers/asciidoc.c \
parsers/asm.c \
parsers/basic.c \
+ parsers/bibtex.c \
parsers/c.c \
parsers/cobol.c \
parsers/iniconf.c \
Modified: ctags/main/parsers.h
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -24,6 +24,7 @@
PhpParser, \
PythonParser, \
TexParser, \
+ BibParser, \
AsmParser, \
ConfParser, \
SqlParser, \
Modified: ctags/parsers/bibtex.c
180 lines changed, 180 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2000-2001, Jérôme Plût
+ * Copyright (c) 2006, Enrico Tröger
+ * Copyright (c) 2019, Mirco Schönfeld
+ *
+ * This source code is released for free distribution under the terms of the
+ * GNU General Public License.
+ *
+ * This module contains functions for generating tags for source files
+ * for the BibTex formatting system.
+ * https://en.wikipedia.org/wiki/BibTeX
+ */
+
+/*
+* INCLUDE FILES
+*/
+#include "general.h" /* must always come first */
+
+#include <ctype.h>
+#include <string.h>
+
+#include "parse.h"
+#include "read.h"
+#include "vstring.h"
+#include "routines.h"
+
+/*
+* DATA DEFINITIONS
+*/
+typedef enum {
+ K_ARTICLE,
+ K_BOOK,
+ K_PAPER,
+ K_THESIS,
+ K_OTHER
+} BibKind;
+
+static kindDefinition BibKinds[] = {
+ { true, 'f', "function", "@article @inbook @incollection" },
+ { true, 'c', "class", "@book @booklet @proceedings" },
+ { true, 'm', "member", "@inproceedings @conference" },
+ { true, 'v', "variable", "@phdthesis @mastersthesis" },
+ { true, 's', "struct", "@manual @misc @techreport" }
+};
+
+/*
+* FUNCTION DEFINITIONS
+*/
+#define BIB_LABEL (1<<2)
+
+static int getBibWord(const char * ref, const char **ptr)
+{
+ const char *p = *ptr;
+
+ while ((*ref != '\0') && (*p != '\0') && (*ref == *p))
+ ref++, p++;
+
+
+ if (*ref)
+ return false;
+
+ *ptr = p;
+ return true;
+}
+
+static void createBibTag(int flags, BibKind kind, const char * l)
+{
+ vString *name = vStringNew ();
+
+ while ((*l == ' '))
+ l++;
+ if (flags & (BIB_LABEL))
+ {
+ if (*l != '{')
+ goto no_tag;
+ l++;
+
+ do
+ {
+ vStringPut(name, (int) *l);
+ ++l;
+ } while ((*l != '\0') && (*l != ','));
+ if (name->buffer[0] != ',')
+ makeSimpleTag(name, kind);
+ }
+ else
+ {
+ vStringPut(name, (int) *l);
+ makeSimpleTag(name, kind);
+ }
+
+no_tag:
+ vStringDelete(name);
+}
+
+static void findBibTags(void)
+{
+ const char *line;
+
+ while ((line = (const char*)readLineFromInputFile()) != NULL)
+ {
+ const char *cp = line;
+ /*int escaped = 0;*/
+
+ for (; *cp != '\0'; cp++)
+ {
+ if (*cp == '%')
+ break;
+ if (*cp == '@')
+ {
+ cp++;
+
+ if (getBibWord("article", &cp))
+ {
+ createBibTag(BIB_LABEL, K_ARTICLE, cp);
+ continue;
+ }else if (getBibWord("inbook", &cp))
+ {
+ createBibTag(BIB_LABEL, K_ARTICLE, cp);
+ continue;
+ }else if (getBibWord("incollection", &cp))
+ {
+ createBibTag(BIB_LABEL, K_ARTICLE, cp);
+ continue;
+ }else if (getBibWord("book", &cp))
+ {
+ createBibTag(BIB_LABEL, K_BOOK, cp);
+ continue;
+ }else if (getBibWord("booklet", &cp))
+ {
+ createBibTag(BIB_LABEL, K_BOOK, cp);
+ continue;
+ }else if (getBibWord("proceedings", &cp))
+ {
+ createBibTag(BIB_LABEL, K_BOOK, cp);
+ continue;
+ }else if (getBibWord("inproceedings", &cp))
+ {
+ createBibTag(BIB_LABEL, K_PAPER, cp);
+ continue;
+ }else if (getBibWord("conference", &cp))
+ {
+ createBibTag(BIB_LABEL, K_PAPER, cp);
+ continue;
+ }else if (getBibWord("phdthesis", &cp))
+ {
+ createBibTag(BIB_LABEL, K_THESIS, cp);
+ continue;
+ }else if (getBibWord("mastersthesis", &cp))
+ {
+ createBibTag(BIB_LABEL, K_THESIS, cp);
+ continue;
+ }else if (getBibWord("manual", &cp))
+ {
+ createBibTag(BIB_LABEL, K_OTHER, cp);
+ continue;
+ }else if (getBibWord("misc", &cp))
+ {
+ createBibTag(BIB_LABEL, K_OTHER, cp);
+ continue;
+ }else if (getBibWord("techreport", &cp))
+ {
+ createBibTag(BIB_LABEL, K_OTHER, cp);
+ continue;
+ }
+ }
+ }
+ }
+}
+
+extern parserDefinition* BibParser (void)
+{
+ static const char *const extensions [] = { "bib", NULL };
+ parserDefinition * def = parserNew ("Bib");
+ def->kindTable = BibKinds;
+ def->kindCount = ARRAY_SIZE (BibKinds);
+ def->extensions = extensions;
+ def->parser = findBibTags;
+ return def;
+}
Modified: data/filedefs/filetypes.bibtex
51 lines changed, 51 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,51 @@
+# For complete documentation of this file, please see Geany's main documentation
+[styling]
+# Edit these in the colorscheme .conf file instead
+default=default
+command=keyword_1
+tag=tag
+math=number_1
+comment=comment
+# mappings below may need checking
+tag2=tag
+math2=number_1
+comment2=comment
+verbatim=default
+shortcmd=keyword_1
+special=keyword_2
+cmdopt=keyword_1
+error=error
+
+[keywords]
+# all items must be in one line
+primary=article
+
+[settings]
+# default extension used when saving files
+extension=bib
+
+# MIME type
+mime_type=text/x-bibtex
+
+# single comments, like # in this file
+comment_single=%
+# multiline comments
+#comment_open=
+#comment_close=
+
+# set to false if a comment character/string should start at column 0 of a line, true uses any
+# indentation of the line, e.g. setting to true causes the following on pressing CTRL+d
+ #command_example();
+# setting to false would generate this
+# command_example();
+# This setting works only for single line comments
+comment_use_indent=true
+
+# context action command (please see Geany's main documentation for details)
+context_action_cmd=
+
+[indentation]
+#width=4
+# 0 is spaces, 1 is tabs, 2 is tab & spaces
+#type=1
+
Modified: data/filetype_extensions.conf
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -10,6 +10,7 @@ Arduino=*.ino;*.pde;
Asciidoc=*.asciidoc;*.adoc;
ASM=*.asm;*.asm51;*.a51;*.s;*.S;*.sx;
Batch=*.bat;*.cmd;*.nt;
+BibTeX=*.bib;
CAML=*.ml;*.mli;
C=*.c;*.xpm;
C++=*.cpp;*.cxx;*.c++;*.cc;*.h;*.hpp;*.hxx;*.h++;*.hh;*.C;*.H;
@@ -41,7 +42,7 @@ HTML=*.htm;*.html;*.shtml;*.hta;*.htd;*.htt;*.cfm;*.tpl;
Java=*.java;*.jsp;
Javascript=*.js;
JSON=*.json;
-LaTeX=*.tex;*.sty;*.idx;*.ltx;*.latex;*.aux;*.bib;
+LaTeX=*.tex;*.sty;*.idx;*.ltx;*.latex;*.aux;
Lisp=*.lisp;
Lua=*.lua;
Make=*.mak;*.mk;GNUmakefile;makefile;Makefile;makefile.*;Makefile.*;
Modified: src/filetypes.c
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -160,6 +160,7 @@ static void init_builtin_filetypes(void)
FT_INIT( SQL, SQL, "SQL", NULL, FILE, MISC );
FT_INIT( COBOL, COBOL, "COBOL", NULL, SOURCE_FILE, COMPILED );
FT_INIT( LATEX, LATEX, "LaTeX", NULL, SOURCE_FILE, MARKUP );
+ FT_INIT( BIBTEX, BIBTEX, "BibTeX", NULL, SOURCE_FILE, MARKUP );
FT_INIT( VHDL, VHDL, "VHDL", NULL, SOURCE_FILE, COMPILED );
FT_INIT( VERILOG, VERILOG, "Verilog", NULL, SOURCE_FILE, COMPILED );
FT_INIT( DIFF, DIFF, "Diff", NULL, FILE, MISC );
Modified: src/filetypes.h
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -74,6 +74,7 @@ typedef enum
GEANY_FILETYPES_VALA,
GEANY_FILETYPES_PASCAL,
GEANY_FILETYPES_LATEX,
+ GEANY_FILETYPES_BIBTEX,
GEANY_FILETYPES_ASM,
GEANY_FILETYPES_CONF,
GEANY_FILETYPES_HAXE,
Modified: src/symbols.c
11 lines changed, 11 insertions(+), 0 deletions(-)
===================================================================
@@ -525,6 +525,17 @@ static void add_top_level_items(GeanyDocument *doc)
NULL);
break;
}
+ case GEANY_FILETYPES_BIBTEX:
+ {
+ tag_list_add_groups(tag_store,
+ &(tv_iters.tag_function), _("Journal Articles"), ICON_NONE,
+ &(tv_iters.tag_class), _("Books & Conference Proceedings"), ICON_NONE,
+ &(tv_iters.tag_member), _("Conference Papers"), ICON_NONE,
+ &(tv_iters.tag_variable), _("Theses"), ICON_NONE,
+ &(tv_iters.tag_struct), _("Other"), ICON_NONE,
+ NULL);
+ break;
+ }
case GEANY_FILETYPES_MATLAB:
{
tag_list_add_groups(tag_store,
Modified: src/tagmanager/tm_parser.c
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -124,6 +124,13 @@ static TMParserMapEntry map_LATEX[] = {
{'n', tm_tag_namespace_t},
{'s', tm_tag_struct_t},
};
+static TMParserMapEntry map_BIBTEX[] = {
+ {'f', tm_tag_function_t},
+ {'c', tm_tag_class_t},
+ {'m', tm_tag_member_t},
+ {'v', tm_tag_variable_t},
+ {'s', tm_tag_struct_t},
+};
static TMParserMapEntry map_ASM[] = {
{'d', tm_tag_macro_t},
@@ -531,6 +538,7 @@ static TMParserMap parser_map[] = {
MAP_ENTRY(PHP),
MAP_ENTRY(PYTHON),
MAP_ENTRY(LATEX),
+ MAP_ENTRY(BIBTEX),
MAP_ENTRY(ASM),
MAP_ENTRY(CONF),
MAP_ENTRY(SQL),
Modified: src/tagmanager/tm_parser.h
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -67,6 +67,7 @@ enum
TM_PARSER_PHP,
TM_PARSER_PYTHON,
TM_PARSER_LATEX,
+ TM_PARSER_BIBTEX,
TM_PARSER_ASM,
TM_PARSER_CONF,
TM_PARSER_SQL,
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list