added a bibtex parser that extracts identifiers of entries in bib-files and makes them accessible on the sidebar
parent
aa54866f98
commit
82e09b5d9b
|
@ -14,6 +14,7 @@ parsers = \
|
||||||
parsers/asciidoc.c \
|
parsers/asciidoc.c \
|
||||||
parsers/asm.c \
|
parsers/asm.c \
|
||||||
parsers/basic.c \
|
parsers/basic.c \
|
||||||
|
parsers/bibtex.c \
|
||||||
parsers/c.c \
|
parsers/c.c \
|
||||||
parsers/cobol.c \
|
parsers/cobol.c \
|
||||||
parsers/iniconf.c \
|
parsers/iniconf.c \
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
PhpParser, \
|
PhpParser, \
|
||||||
PythonParser, \
|
PythonParser, \
|
||||||
TexParser, \
|
TexParser, \
|
||||||
|
BibParser, \
|
||||||
AsmParser, \
|
AsmParser, \
|
||||||
ConfParser, \
|
ConfParser, \
|
||||||
SqlParser, \
|
SqlParser, \
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -10,6 +10,7 @@ Arduino=*.ino;*.pde;
|
||||||
Asciidoc=*.asciidoc;*.adoc;
|
Asciidoc=*.asciidoc;*.adoc;
|
||||||
ASM=*.asm;*.asm51;*.a51;*.s;*.S;*.sx;
|
ASM=*.asm;*.asm51;*.a51;*.s;*.S;*.sx;
|
||||||
Batch=*.bat;*.cmd;*.nt;
|
Batch=*.bat;*.cmd;*.nt;
|
||||||
|
BibTeX=*.bib;
|
||||||
CAML=*.ml;*.mli;
|
CAML=*.ml;*.mli;
|
||||||
C=*.c;*.xpm;
|
C=*.c;*.xpm;
|
||||||
C++=*.cpp;*.cxx;*.c++;*.cc;*.h;*.hpp;*.hxx;*.h++;*.hh;*.C;*.H;
|
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;
|
Java=*.java;*.jsp;
|
||||||
Javascript=*.js;
|
Javascript=*.js;
|
||||||
JSON=*.json;
|
JSON=*.json;
|
||||||
LaTeX=*.tex;*.sty;*.idx;*.ltx;*.latex;*.aux;*.bib;
|
LaTeX=*.tex;*.sty;*.idx;*.ltx;*.latex;*.aux;
|
||||||
Lisp=*.lisp;
|
Lisp=*.lisp;
|
||||||
Lua=*.lua;
|
Lua=*.lua;
|
||||||
Make=*.mak;*.mk;GNUmakefile;makefile;Makefile;makefile.*;Makefile.*;
|
Make=*.mak;*.mk;GNUmakefile;makefile;Makefile;makefile.*;Makefile.*;
|
||||||
|
|
|
@ -160,6 +160,7 @@ static void init_builtin_filetypes(void)
|
||||||
FT_INIT( SQL, SQL, "SQL", NULL, FILE, MISC );
|
FT_INIT( SQL, SQL, "SQL", NULL, FILE, MISC );
|
||||||
FT_INIT( COBOL, COBOL, "COBOL", NULL, SOURCE_FILE, COMPILED );
|
FT_INIT( COBOL, COBOL, "COBOL", NULL, SOURCE_FILE, COMPILED );
|
||||||
FT_INIT( LATEX, LATEX, "LaTeX", NULL, SOURCE_FILE, MARKUP );
|
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( VHDL, VHDL, "VHDL", NULL, SOURCE_FILE, COMPILED );
|
||||||
FT_INIT( VERILOG, VERILOG, "Verilog", NULL, SOURCE_FILE, COMPILED );
|
FT_INIT( VERILOG, VERILOG, "Verilog", NULL, SOURCE_FILE, COMPILED );
|
||||||
FT_INIT( DIFF, DIFF, "Diff", NULL, FILE, MISC );
|
FT_INIT( DIFF, DIFF, "Diff", NULL, FILE, MISC );
|
||||||
|
|
|
@ -74,6 +74,7 @@ typedef enum
|
||||||
GEANY_FILETYPES_VALA,
|
GEANY_FILETYPES_VALA,
|
||||||
GEANY_FILETYPES_PASCAL,
|
GEANY_FILETYPES_PASCAL,
|
||||||
GEANY_FILETYPES_LATEX,
|
GEANY_FILETYPES_LATEX,
|
||||||
|
GEANY_FILETYPES_BIBTEX,
|
||||||
GEANY_FILETYPES_ASM,
|
GEANY_FILETYPES_ASM,
|
||||||
GEANY_FILETYPES_CONF,
|
GEANY_FILETYPES_CONF,
|
||||||
GEANY_FILETYPES_HAXE,
|
GEANY_FILETYPES_HAXE,
|
||||||
|
|
|
@ -525,6 +525,17 @@ static void add_top_level_items(GeanyDocument *doc)
|
||||||
NULL);
|
NULL);
|
||||||
break;
|
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:
|
case GEANY_FILETYPES_MATLAB:
|
||||||
{
|
{
|
||||||
tag_list_add_groups(tag_store,
|
tag_list_add_groups(tag_store,
|
||||||
|
|
|
@ -124,6 +124,13 @@ static TMParserMapEntry map_LATEX[] = {
|
||||||
{'n', tm_tag_namespace_t},
|
{'n', tm_tag_namespace_t},
|
||||||
{'s', tm_tag_struct_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[] = {
|
static TMParserMapEntry map_ASM[] = {
|
||||||
{'d', tm_tag_macro_t},
|
{'d', tm_tag_macro_t},
|
||||||
|
@ -531,6 +538,7 @@ static TMParserMap parser_map[] = {
|
||||||
MAP_ENTRY(PHP),
|
MAP_ENTRY(PHP),
|
||||||
MAP_ENTRY(PYTHON),
|
MAP_ENTRY(PYTHON),
|
||||||
MAP_ENTRY(LATEX),
|
MAP_ENTRY(LATEX),
|
||||||
|
MAP_ENTRY(BIBTEX),
|
||||||
MAP_ENTRY(ASM),
|
MAP_ENTRY(ASM),
|
||||||
MAP_ENTRY(CONF),
|
MAP_ENTRY(CONF),
|
||||||
MAP_ENTRY(SQL),
|
MAP_ENTRY(SQL),
|
||||||
|
|
|
@ -67,6 +67,7 @@ enum
|
||||||
TM_PARSER_PHP,
|
TM_PARSER_PHP,
|
||||||
TM_PARSER_PYTHON,
|
TM_PARSER_PYTHON,
|
||||||
TM_PARSER_LATEX,
|
TM_PARSER_LATEX,
|
||||||
|
TM_PARSER_BIBTEX,
|
||||||
TM_PARSER_ASM,
|
TM_PARSER_ASM,
|
||||||
TM_PARSER_CONF,
|
TM_PARSER_CONF,
|
||||||
TM_PARSER_SQL,
|
TM_PARSER_SQL,
|
||||||
|
|
Loading…
Reference in New Issue