Skip to content

Commit

Permalink
Merge pull request #3611 from masatake/org--optimize
Browse files Browse the repository at this point in the history
Org:  optimize
  • Loading branch information
masatake committed Dec 27, 2022
2 parents 12ff207 + d068172 commit 2fc641e
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 33 deletions.
52 changes: 29 additions & 23 deletions optlib/org.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,45 +10,50 @@

static void initializeOrgParser (const langType language)
{
addLanguageOptscriptToHook (language, SCRIPT_HOOK_PRELUDE,
"{{ /kindTable [\n"
" /part\n"
" /chapter\n"
" /section\n"
" /subsection\n"
" /subsubsection\n"
" /paragraph\n"
" /subparagraph\n"
" ] def\n"
"}}");

addLanguageRegexTable (language, "toplevel");
addLanguageRegexTable (language, "srcblock");

addLanguageTagMultiTableRegex (language, "toplevel",
"^[:blank:]*#\\+begin_src[ ]+([a-zA-Z0-9][-#+a-zA-Z0-9]*)",
"", "", "{tenter=srcblock}{_guest=\\1,0end,}", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*\\*\\*\\*\\*\\*\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "G", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*\\*\\*\\*\\*\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "P", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*\\*\\*\\*\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "b", "", NULL);
"^[^#*<]+",
"", "", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*\\*\\*\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "u", "", NULL);
"^#\\+begin_src[ ]+([a-zA-Z0-9][-#+a-zA-Z0-9]*)",
"", "", "{tenter=srcblock}{_guest=\\1,0end,}", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*\\*\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "s", "", NULL);
"^#\\+(NAME|name):[[:blank:]]+([[:graph:][:blank:]]+)([\n])?",
"\\2", "d", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "c", "", NULL);
"^#[^\n]*\n",
"", "", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^\\*[ \t]+([[:graph:][:blank:]]+)([\n])?",
"\\1", "p", "", NULL);
"^(\\*{1,7})[ \t]+([[:graph:][:blank:]]+)([\n])?",
"", "", ""
"{{\n"
" \\2 kindTable \\1 length 1 sub get @2 _tag _commit pop\n"
"}}", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^<<([^>]+)>>",
"\\1", "d", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^#\\+(NAME|name):[[:blank:]]+([[:graph:][:blank:]]+)([\n])?",
"\\2", "d", "", NULL);
addLanguageTagMultiTableRegex (language, "toplevel",
"^.",
"", "", "", NULL);
addLanguageTagMultiTableRegex (language, "srcblock",
"^[:blank:]*#\\+end_src",
"^[^#]+",
"", "", "", NULL);
addLanguageTagMultiTableRegex (language, "srcblock",
"^#\\+end_src",
"", "", "{tleave}{_guest=,,0end}", NULL);
addLanguageTagMultiTableRegex (language, "srcblock",
"^.",
Expand Down Expand Up @@ -106,6 +111,7 @@ extern parserDefinition* OrgParser (void)
def->patterns = patterns;
def->aliases = aliases;
def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
def->useCork = CORK_QUEUE;
def->kindTable = OrgKindTable;
def->kindCount = ARRAY_SIZE(OrgKindTable);
def->initialize = initializeOrgParser;
Expand Down
34 changes: 24 additions & 10 deletions optlib/org.ctags
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,43 @@
# definition of levels
--_tabledef-Org=toplevel
--_tabledef-Org=srcblock

--_prelude-Org={{
/kindTable [
/part
/chapter
/section
/subsection
/subsubsection
/paragraph
/subparagraph
] def
}}

################################
# beginning of toplevel
################################
--_mtable-regex-Org=toplevel/[^#*<]+//
# if encounter a src block do language identify languge and defer
--_mtable-regex-Org=toplevel/[:blank:]*#\+begin_src[ ]+([a-zA-Z0-9][-#+a-zA-Z0-9]*)//{tenter=srcblock}{_guest=\1,0end,}
--_mtable-regex-Org=toplevel/#\+begin_src[ ]+([a-zA-Z0-9][-#+a-zA-Z0-9]*)//{tenter=srcblock}{_guest=\1,0end,}
# labels
--_mtable-regex-Org=toplevel/#\+(NAME|name):[[:blank:]]+([[:graph:][:blank:]]+)([\n])?/\2/d/
# skip #...
--_mtable-regex-Org=toplevel/#[^\n]*\n//
# sections stuff
--_mtable-regex-Org=toplevel/\*\*\*\*\*\*\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/G/
--_mtable-regex-Org=toplevel/\*\*\*\*\*\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/P/
--_mtable-regex-Org=toplevel/\*\*\*\*\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/b/
--_mtable-regex-Org=toplevel/\*\*\*\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/u/
--_mtable-regex-Org=toplevel/\*\*\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/s/
--_mtable-regex-Org=toplevel/\*\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/c/
--_mtable-regex-Org=toplevel/\*[ \t]+([[:graph:][:blank:]]+)([\n])?/\1/p/
--_mtable-regex-Org=toplevel/(\*{1,7})[ \t]+([[:graph:][:blank:]]+)([\n])?//{{
\2 kindTable \1 length 1 sub get @2 _tag _commit pop
}}
# labels
--_mtable-regex-Org=toplevel/<<([^>]+)>>/\1/d/
--_mtable-regex-Org=toplevel/#\+(NAME|name):[[:blank:]]+([[:graph:][:blank:]]+)([\n])?/\2/d/
## else do nothing (end of toplevel)
--_mtable-regex-Org=toplevel/.//

################################
# beginning of src block
################################
# if end of src block exit
--_mtable-regex-Org=srcblock/[:blank:]*#\+end_src//{tleave}{_guest=,,0end}
--_mtable-regex-Org=srcblock/[^#]+//
--_mtable-regex-Org=srcblock/#\+end_src//{tleave}{_guest=,,0end}
# else do nothing
--_mtable-regex-Org=srcblock/.//

0 comments on commit 2fc641e

Please sign in to comment.