--[[
Sample plugin file for highlight 3.9
]]
Description="Add cplusplus.com reference links to HTML, LaTeX, RTF and ODT output of C and C++ code"
-- optional parameter: syntax description
function syntaxUpdate(desc)
if desc~="C and C++" then
return
end
function Set (list)
local set = {}
for _, l in ipairs(list) do set[l] = true end
return set
end
string_items = Set {"string" }
stl_items = Set {"array", "bitset", "deque", "forward_list", "list",
"map", "multimap", "multiset", "priority_queue", "queue", "set", "stack",
"unordered_map", "unordered_multimap", "unordered_multiset", "unordered_set",
"vector" }
algorithm_items = Set {"adjacent_find", "binary_search", "copy",
"copy_backward", "count", "count_if", "equal", "equal_range", "fill", "fill_n",
"find", "find_end", "find_first_of", "find_if", "for_each", "generate",
"generate_n", "includes", "inplace_merge", "iter_swap",
"lexicographical_compare", "lower_bound", "make_heap", "max", "max_element",
"merge", "min", "min_element", "mismatch", "next_permutation", "nth_element",
"partial_sort", "partial_sort_copy", "partition", "pop_heap",
"prev_permutation", "push_heap", "random_shuffle", "remove", "remove_copy",
"remove_copy_if", "remove_if", "replace", "replace_copy", "replace_copy_if",
"replace_if", "reverse", "reverse_copy", "rotate", "rotate_copy", "search",
"search_n", "set_difference", "set_intersection", "set_symmetric_difference",
"set_union", "sort", "sort_heap", "stable_partition", "stable_sort", "swap",
"swap_ranges", "transform", "unique", "unique_copy", "upper_bound" }
clib_items = Set {"cassert", "cctype", "cerrno", "cfloat", "ciso646",
"climits", "clocale", "cmath", "csetjmp", "csignal", "cstdarg", "cstddef",
"cstdio ", "cstdlib", "cstring", "ctime"}
iostream_items=Set {
"filebuf", "fstream", "ifstream", "ios", "iostream", "ios_base", "istream",
"istringstream", "ofstream", "ostream", "ostringstream", "streambuf",
"stringbuf", "stringstream", "cerr", "cin", "clog", "cout", "fpos", "streamoff",
"streampos", "streamsize"
}
function getURL(token, cat)
url='http://www.cplusplus.com/reference/'..cat.. '/' .. token .. '/'
if (HL_OUTPUT== HL_FORMAT_HTML or HL_OUTPUT == HL_FORMAT_XHTML) then
return ''.. token .. ''
elseif (HL_OUTPUT == HL_FORMAT_LATEX) then
return '\\href{'..url..'}{'..token..'}'
elseif (HL_OUTPUT == HL_FORMAT_RTF) then
return '{{\\field{\\*\\fldinst HYPERLINK "'..url..'" }{\\fldrslt\\ul\\ulc0 '..token..'}}}'
elseif (HL_OUTPUT == HL_FORMAT_ODT) then
return ''..token..''
end
end
function Decorate(token, state)
if (state ~= HL_STANDARD and state ~= HL_KEYWORD and state ~=HL_PREPROC) then
return
end
if string_items[token] then
return getURL(token, 'string')
elseif stl_items[token] then
return getURL(token, 'stl')
elseif algorithm_items[token] then
return getURL(token, 'algorithm')
elseif clib_items[token] then
return getURL(token, 'clibrary')
elseif iostream_items[token] then
return getURL(token, 'iostream')
end
end
end
function themeUpdate(desc)
if (HL_OUTPUT == HL_FORMAT_HTML or HL_OUTPUT == HL_FORMAT_XHTML) then
Injections[#Injections+1]="a.hl, a.hl:visited {color:inherit;font-weight:inherit;}"
elseif (HL_OUTPUT==HL_FORMAT_LATEX) then
Injections[#Injections+1]="\\usepackage[colorlinks=false, pdfborderstyle={/S/U/W 1}]{hyperref}"
end
end
--The Plugins array assigns code chunks to themes or language definitions.
--The chunks are interpreted after the theme or lang file were parsed,
--so you can refer to elements of these files
Plugins={
{ Type="lang", Chunk=syntaxUpdate },
{ Type="theme", Chunk=themeUpdate },
}