Here are some verb-*.lua files for syntax highlighting source code or configuration files. The provided files are based on the tex/context/base/verb-*.lua from the ConTeXt distribution and he verb-cpp.lua files posted by Shen Chen in [1]
Python
The verb-py.lua file distinguishes between the following five states:
- all statements, repeats, conditionals and operators
-
strings (multi line comment with
' ' 'or"""are supported) - preconditions (import, from, as)
- comments
- builtins
-- filename : verb-py.lua
-- comment : Syntax highlighting for Python files.
-- Used original tex/context/base/verb-*.lua files,
-- verb-cpp.lua posted by Shen Chen to the NTG-context
-- list (http://archive.contextgarden.net/message/20081002.173802.460c46fe.en.html)
-- and vim syntax files as starting points.
-- author : Dražen Baić
if not buffers then buffers = { } end
if not buffers.visualizers then buffers.visualizers = { } end
if not buffers.visualizers.py then buffers.visualizers.py = { } end
buffers.visualizers.py.in_py_raw_string = false
buffers.visualizers.py.categories = {}
buffers.visualizers.py.delimiters = {
'@', '%', '^', '&', '*', '(', ')', '-', '+',
'=', '|', '\\', '/', '{', '}', '[', ']', ':', ';', '"',
'\'', '<', '>', ',', '.', '?', ' ', '#'
}
buffers.visualizers.py.colors = {
"prettyone", -- statements, repeats, conditionals and operators
"prettytwo", -- strings
"prettythree", -- preconditions
"prettyfour", -- comments
"prettyfive" -- builtins
}
buffers.visualizers.py.categories.statements = {
'assert',
'break',
'continue',
'del',
'except', 'exec',
'finally',
'global',
'lambda',
'pass', 'print',
'raise', 'return',
'try',
'with',
'yield',
'def', 'class'
}
buffers.visualizers.py.categories.repeats = {
'for', 'while'
}
buffers.visualizers.py.categories.conditionals = {
'if', 'elif', 'else',
}
buffers.visualizers.py.categories.operators = {
'and', 'in', 'is', 'not', 'or'
}
buffers.visualizers.py.categories.precondits = {
'import', 'from', 'as'
}
buffers.visualizers.py.categories.builtins = {
'__import__',
'abs', 'apply',
'bool', 'buffer',
'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex',
'delattr', 'dict', 'dir', 'divmod',
'enumerate', 'Ellipsis', 'eval', 'execfile',
'False', 'file', 'filter', 'float', 'frozenset',
'getattr', 'globals',
'hasattr', 'hash', 'help', 'hex',
'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter',
'len', 'list', 'locals', 'long',
'map', 'max', 'min',
'None', 'NotImplemented',
'object', 'oct', 'open', 'ord',
'pow', 'property',
'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round',
'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super',
'True', 'tuple', 'type',
'unichr', 'unicode',
'vars',
'xrange',
'zip'
}
buffers.visualizers.py.words = { }
for k,v in pairs(buffers.visualizers.py.categories) do
for _,w in pairs(v) do
buffers.visualizers.py.words[w] = k
end
end
buffers.visualizers.py.styles = { }
-- Uncomment the following lines to enable different
-- styles for each state
-- buffers.visualizers.py.styles.statements = "\\bf "
-- buffers.visualizers.py.styles.repeats = "\\bi "
-- buffers.visualizers.py.styles.conditionals = "\\bi "
-- buffers.visualizers.py.styles.operators = "\\bi "
-- buffers.visualizers.py.styles.precondits = "\\bf "
-- buffers.visualizers.py.styles.comments = "\\it "
-- buffers.visualizers.py.styles.strings = "\\bi "
function buffers.flush_py_word(state, word, result)
if #word>0 then
local id = buffers.visualizers.py.words[word]
if id == 'precondits' then
state = buffers.change_state(3,state,result)
if buffers.visualizers.py.styles[id] then
result[#result+1] = buffers.visualizers.py.styles[id] .. buffers.escaped(word)
else
result[#result+1] = buffers.escaped(word)
end
state = buffers.finish_state(state,result)
return state
elseif id == 'builtins' then
state = buffers.change_state(5,state,result)
result[#result+1] = buffers.escaped(word)
state = buffers.finish_state(state,result)
return state
elseif id then
state = buffers.change_state(1,state,result)
if buffers.visualizers.py.styles[id] then
result[#result+1] = buffers.visualizers.py.styles[id] .. buffers.escaped(word)
else
result[#result+1] = buffers.escaped(word)
end
state = buffers.finish_state(state,result)
return state
else
result[#result+1] = buffers.escaped(word)
return state
end
else
state = buffers.finish_state(state,result)
return state
end
end
function buffers.visualizers.py.flush_line(str,nested)
local i, result , word = 1, { }, ""
local state = 0
local delimiters=buffers.visualizers.py.delimiters
local is_delimiter = false
local in_string = false
buffers.currentcolors = buffers.visualizers.py.colors
while i <= #str do
c=string.sub(str,i,i)
if buffers.visualizers.py.in_py_raw_string then
if c=="\'" and string.sub(str,i,i+2)=="\'\'\'" then
-- without the next line the triple quotes won't be colored
-- correctly if they appear in the beginning of a line
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i,i+2))
i=i+2
buffers.visualizers.py.in_py_raw_string=false
state = buffers.finish_state(state,result)
elseif c=="\"" and string.sub(str,i,i+2)=="\"\"\"" then
-- without the next line the triple quotes won't be colored
-- correctly if they appear in the beginning of a line
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i,i+2))
i=i+2
buffers.visualizers.py.in_py_raw_string=false
state = buffers.finish_state(state,result)
else
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped_chr(c)
end
elseif in_string then
if c=="\\" then
result[#result+1] = buffers.escaped(string.sub(str,i,i+1))
i=i+1
elseif c=="\"" then
result[#result+1] = buffers.escaped_chr(c)
in_string=false
state = buffers.finish_state(state,result)
elseif c=="\'" then
result[#result+1] = buffers.escaped_chr(c)
in_string=false
state = buffers.finish_state(state,result)
else
result[#result+1] = buffers.escaped_chr(c)
end
else
for _,v in ipairs(delimiters) do
if c==v then
is_delimiter = true
end
end
if is_delimiter then
if c==" " then
state = buffers.flush_py_word(state,word,result)
result[#result+1] = "\\obs "
elseif (c=="\'") and string.sub(str,i,i+2)=="\'\'\'" then
state = buffers.flush_py_word(state,word,result)
buffers.visualizers.py.in_py_raw_string = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i,i+1))
i=i+1
elseif (c=="\"") and string.sub(str,i,i+2)=="\"\"\"" then
state = buffers.flush_py_word(state,word,result)
buffers.visualizers.py.in_py_raw_string = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i,i+1))
i=i+1
elseif (c=="#") then
state = buffers.flush_py_word(state,word,result)
state = buffers.change_state(4,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i))
i=#str
elseif (c=="\"") and not in_string then
state = buffers.flush_py_word(state,word,result)
in_string = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped_chr(c)
elseif (c=="\'") and not in_string then
state = buffers.flush_py_word(state,word,result)
in_string = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped_chr(c)
elseif (c==".") and (#word==0 or string.find(string.sub(word,1,1),'%d')) then
word = word .. c
is_delimiter=false
else
state = buffers.flush_py_word(state,word,result)
result[#result+1] = buffers.escaped_chr(c)
end
if is_delimiter then
word = ""
is_delimiter=false
end
else
word = word .. c
end
end
i=i+1
end
state = buffers.flush_py_word(state,word,result)
buffers.flush_result(result,false)
end
Apache httpd.conf
The verb-apa.lua file distinguishes between the following five states:
- declarations
- strings
-
sections (like
<Directory>and</Directory>) - comments
- options
-- filename : verb-apa.lua
-- comment : Syntax highlighting for Apache config files.
-- Used original tex/context/base/verb-*.lua files,
-- verb-cpp.lua posted by Shen Chen to the NTG-context
-- list (http://archive.contextgarden.net/message/20081002.173802.460c46fe.en.html)
-- and vim syntax files as starting points.
-- author : Dražen Baić
if not buffers then buffers = { } end
if not buffers.visualizers then buffers.visualizers = { } end
if not buffers.visualizers.apa then buffers.visualizers.apa = { } end
buffers.visualizers.apa.categories = {}
buffers.visualizers.apa.delimiters = {
'"', '\'', ',', '.', '?', ' ', '#', '*', '>'
}
buffers.visualizers.apa.colors = {
"prettyone", -- declarations
"prettytwo", -- strings
"prettythree", -- sections
"prettyfour", -- comments
"prettyfive" -- options
}
buffers.visualizers.apa.categories.declarations_core = {
'AcceptFilter', 'AcceptMutex', 'AcceptPathInfo', 'AccessFileName', 'AddDefaultCharset', 'AllowEncodedSlashes',
'AllowOverride', 'AssignUserId', 'AuthName', 'AuthType',
'CGIMapExtension', 'ChildPerUserId', 'ContentDigest', 'CoreDumpDirectory',
'DefaultType', 'DocumentRoot',
'EnableExceptionHook', 'EnableMMAP', 'EnableSendfile', 'ErrorDocument', 'ErrorLog',
'FileETag', 'ForceType',
'GracefulShutdownTimeout', 'Group',
'HostNameLookups',
'IdentityCheck', 'Include',
'KeepAlive', 'KeepAliveTimeout',
'LimitInternalRecursion', 'LimitRequestBody', 'LimitRequestFields', 'LimitRequestFieldsize', 'LimitRequestLine',
'LimitXMLRequestBody', 'Listen', 'ListenBacklog', 'LockFile',
'LogLevel',
'MaxClients', 'MaxKeepAliveRequests', 'MaxMemFree', 'MaxRequestsPerChild', 'MaxSpareServers', 'MaxSpareThreads',
'MaxSpareThreadsPerChild', 'MaxThreads', 'MinSpareServers',
'MinSpareThreads',
'NameVirtualHost', 'NumServers',
'Options',
'PidFile',
'Require', 'RLimitCPU', 'RLimitMEM', 'RLimitNPROC',
'Satisfy', 'ScoreBoardFile', 'ScriptInterpreterSource', 'SendBufferSize', 'ServerAdmin', 'ServerAlias', 'ServerLimit',
'ServerName', 'ServerPath', 'ServerRoot', 'ServerSignature', 'ServerTokens',
'SetHandler', 'SetInputFilter', 'SetOutputFilter', 'StartServers', 'StartThreads',
'ThreadLimit', 'ThreadsPerChild', 'ThreadStackSize', 'TimeOut', 'TraceEnable',
'UseCanonicalName', 'User',
'Win32DisableAcceptEx'
}
buffers.visualizers.apa.categories.declarations_mod = {
-- mod_actions
'Action', 'Script',
-- mod_alias
'Alias', 'AliasMatch', 'Redirect', 'RedirectMatch', 'RedirectTemp', 'RedirectPermanent', 'ScriptAlias', 'ScriptAliasMatch',
-- mod_auth_basic
'AuthBasicAuthoritative', 'AuthBasicProvider',
-- mod_auth_digest
'AuthDigestAlgorithm', 'AuthDigestDomain', 'AuthDigestNcCheck', 'AuthDigestNonceFormat', 'AuthDigestNonceLifetime',
'AuthDigestProvider', 'AuthDigestQop', 'AuthDigestShmemSize',
-- mod_authn_anon
'Anonymous', 'Anonymous_Authoritative', 'Anonymous_LogEmail', 'Anonymous_MustGiveEmail', 'Anonymous_NoUserID',
'Anonymous_VerifyEmail',
-- mod_authn_dbd
'AuthDBDUserPWQuery', 'AuthDBDUserRealmQuery',
-- mod_authn_dbm
'AuthDBMType', 'AuthDBMUserFile',
-- mod_authn_default
'AuthDefaultAuthoritative',
-- mod_authn_file
'AuthUserFile',
-- mod_authnz_ldap
'AuthLDAPBindDN', 'AuthLDAPBindPassword', 'AuthLDAPCharsetConfig', 'AuthLDAPCompareDNOnServer',
'AuthLDAPDereferenceAliases', 'AuthLDAPGroupAttribute',
'AuthLDAPGroupAttributeIsDN', 'AuthLDAPRemoteUserAttribute', 'AuthLDAPRemoteUserIsDN', 'AuthLDAPUrl',
'AuthzLDAPAuthoritative',
-- mod_authz_dbm
'AuthDBMGroupFile', 'AuthzDBMAuthoritative', 'AuthzDBMType',
-- mod_authz_default
'AuthzDefaultAuthoritative',
-- mod_authz_groupfile
'AuthGroupFile', 'AuthzGroupFileAuthoritative',
-- mod_authz_host
'Allow', 'Deny', 'Order',
-- mod_authz_owner
'AuthzOwnerAuthoritative',
-- mod_authz_user
'AuthzUserAuthoritative',
-- mod_autoindex
'AddAlt', 'AddAltByEncoding', 'AddAltByType', 'AddDescription', 'AddIcon', 'AddIconByEncoding', 'AddIconByType',
'DefaultIcon', 'HeaderName', 'IndexHeadInsert', 'IndexIgnore',
'IndexOptions', 'IndexOrderDefault', 'IndexStyleSheet', 'ReadmeName',
-- mod_cache
'CacheDefaultExpire', 'CacheDisable', 'CacheEnable', 'CacheIgnoreCacheControl', 'CacheIgnoreHeaders',
'CacheIgnoreNoLastMod', 'CacheIgnoreQueryString', 'CacheLastModifiedFactor',
'CacheMaxExpire', 'CacheStoreNoStore', 'CacheStorePrivate',
-- mod_cern_meta
'MetaDir', 'MetaFiles', 'MetaSuffix',
-- mod_cgi and mod_cgid
'ScriptLog', 'ScriptLogBuffer', 'ScriptLogLength', 'ScriptSock',
-- mod_charset_lite
'CharsetDefault', 'CharsetOptions', 'CharsetSourceEnc',
-- mod_dav
'Dav', 'DavDepthInfinity', 'DavMinTimeout',
-- mod_dav_fs
'DavLockDB',
-- mod_dav_lock
'DavGenericLockDB',
-- mod_dbd
'DBDExptime', 'DBDKeep', 'DBDMax', 'DBDMin', 'DBDParams', 'DBDPersist', 'DBDPrepareSQL', 'DBDriver',
-- mod_deflate
'DeflateBufferSize', 'DeflateCompressionLevel', 'DeflateFilterNote', 'DeflateMemLevel', 'DeflateWindowSize',
-- mod_dir
'DirectoryIndex', 'DirectorySlash',
-- mod_disk_cache
'CacheDirLength', 'CacheDirLevels', 'CacheMaxFileSize', 'CacheMinFileSize', 'CacheRoot',
-- mod_dumpio
'DumpIOInput', 'DumpIOLogLevel', 'DumpIOOutput',
-- mod_echo
'ProtocolEcho',
-- mod_env
'PassEnv', 'SetEnv', 'UnsetEnv',
-- mod_example
'Example',
-- mod_expires
'ExpiresActive', 'ExpiresByType', 'ExpiresDefault',
-- mod_ext_filter
'ExtFilterDefine', 'ExtFilterOptions',
-- mod_file_cache
'CacheFile', 'MMapFile',
-- mod_filter
'FilterChain', 'FilterDeclare', 'FilterProtocol', 'FilterProvider', 'FilterTrace',
-- mod_headers
'Header', 'RequestHeader',
-- mod_ident
'IdentityCheck', 'IdentityCheckTimeout',
-- mod_imagemap
'ImapMenu', 'ImapDefault', 'ImapBase',
-- mod_include
'SSIEnableAccess', 'SSIEndTag', 'SSIErrorMsg', 'SSIStartTag', 'SSITimeFormat', 'SSIUndefinedEcho', 'XBitHack',
-- mod_info
'AddModuleInfo',
-- mod_isapi
'ISAPIAppendLogToErrors', 'ISAPIAppendLogToQuery', 'ISAPICacheFile', 'ISAIPFakeAsync', 'ISAPILogNotSupported', 'ISAPIReadAheadBuffer',
-- mod_ldap
'LDAPCacheEntries', 'LDAPCacheTTL', 'LDAPConnectionTimeout', 'LDAPOpCacheEntries', 'LDAPOpCacheTTL',
'LDAPSharedCacheFile', 'LDAPSharedCacheSize', 'LDAPTrustedClientCert',
'LDAPTrustedGlobalCert', 'LDAPTrustedMode', 'LDAPVerifyServerCert',
-- mod_log_config
'BufferedLogs', 'CookieLog', 'CustomLog', 'LogFormat', 'TransferLog',
-- mod_log_forensic
'ForensicLog',
-- mod_mem_cache
'MCacheMaxObjectCount', 'MCacheMaxObjectSize', 'MCacheMaxStreamingBuffer', 'MCacheMinObjectSize',
'MCacheRemovalAlgorithm', 'MCacheSize',
-- mod_mime
'AddCharset', 'AddEncoding', 'AddHandler', 'AddInputFilter', 'AddLanguage', 'AddOutputFilter', 'AddType', 'DefaultLanguage',
'ModMimeUsePathInfo', 'MultiviewsMatch', 'RemoveCharset',
'RemoveEncoding', 'RemoveHandler', 'RemoveInputFilter', 'RemoveLanguage', 'RemoveOutputFilter', 'RemoveType', 'TypesConfig',
-- mod_mime_magic
'MimeMagicFile',
-- mod_negotiation
'CacheNegotiatedDocs', 'ForceLanguagePriority', 'LanguagePriority',
-- mod_nw_ssl
'', 'NWSSLTrustedCerts', 'NWSSLUpgradeable', 'SecureListen',
-- mod_proxy
'AllowCONNECT', 'BalancerMember', 'NoProxy', 'ProxyBadHeader', 'ProxyBlock', 'ProxyDomain', 'ProxyErrorOverride',
'ProxyFtpDirCharset', 'ProxyIOBufferSize', 'ProxyMaxForwards', 'ProxyPass',
'ProxyPassInterpolateEnv', 'ProxyPassMatch', 'ProxyPassReverse', 'ProxyPassReverseCookieDomain', 'ProxyPassReverseCookiePath',
'ProxyPreserveHost', 'ProxyReceiveBufferSize', 'ProxyRemote',
'ProxyRemoteMatch', 'ProxyRequests', 'ProxySet', 'ProxyStatus', 'ProxyTimeout', 'ProxyVia',
-- mod_rewrite
'RewriteBase', 'RewriteCond', 'RewriteEngine', 'RewriteLock', 'RewriteLog', 'RewriteLogLevel', 'RewriteMap', 'RewriteOptions', 'RewriteRule',
-- mod_setenvif
'BrowserMatch', 'BrowserMatchNoCase', 'SetEnvIf', 'SetEnvIfNoCase',
-- mod_so
'LoadFile', 'LoadModule',
-- mod_speling
'CheckCaseOnly', 'CheckSpelling',
-- mod_ssl
'SSLCACertificateFile', 'SSLCACertificatePath', 'SSLCADNRequestFile', 'SSLCADNRequestPath', 'SSLCARevocationFile',
'SSLCARevocationPath', 'SSLCertificateChainFile', 'SSLCertificateFile',
'SSLCertificateKeyFile', 'SSLCipherSuite', 'SSLCryptoDevice', 'SSLEngine', 'SSLHonorCipherOrder', 'SSLMutex', 'SSLOptions',
'SSLPassPhraseDialog', 'SSLProtocol', 'SSLProxyCACertificateFile', 'SSLProxyCACertificatePath', 'SSLProxyCARevocationFile',
'SSLProxyCARevocationPath', 'SSLProxyCipherSuite', 'SSLProxyEngine',
'SSLProxyMachineCertificateFile', 'SSLProxyMachineCertificatePath',
'SSLProxyProtocol', 'SSLProxyVerify', 'SSLProxyVerifyDepth', 'SSLRandomSeed', 'SSLRenegBufferSize', 'SSLRequire',
'SSLRequireSSL', 'SSLSessionCache', 'SSLSessionCacheTimeout', 'SSLUserName',
'SSLVerifyClient', 'SSLVerifyDepth',
-- mod_status
'ExtendedStatus', 'SeeRequestTail',
-- mod_substitute
'Substitute',
-- mod_suexec
'SuexecUserGroup',
-- mod_userdir
'UserDir',
-- mod_usertrack
'CookieDomain', 'CookieExpires', 'CookieName', 'CookieStyle', 'CookieTracking',
-- mod_vhost_alias
'VirtualDocumentRoot', 'VirtualDocumentRootIP', 'VirtualScriptAlias', 'VirtualScriptAliasIP'
}
buffers.visualizers.apa.categories.options = {
-- core
'INode', 'MTime', 'Size',
'Any', 'All', 'On', 'Off', 'Double', 'EMail', 'DNS', 'Min', 'Minimal', 'OS', 'Prod', 'ProductOnly', 'Full',
'emerg', 'alert', 'crit', 'error', 'warn', 'notice', 'info', 'debug',
'registry', 'script', 'inetd', 'standalone',
'user', 'group',
'flock', 'fcntl', 'sysvsem', 'pthread',
-- mod_alias
'permanent', 'temp', 'seeother', 'gone',
-- mod_auth_digest
'none', 'auth', 'auth-int', 'MD5-sess',
-- mod_auth_dbm
'default', 'SDBM', 'GDBM', 'NDBM', 'DB',
-- mod_authz_host
'from',
-- mod_authnz_ldap
'always', 'never', 'searching', 'finding',
'ldap-user', 'ldap-group', 'ldap-dn', 'ldap-attribute', 'ldap-filter',
-- mod_autoindex
'DescriptionWidth', 'FancyIndexing', 'FoldersFirst', 'IconHeight', 'IconsAreLinks', 'IconWidth', 'NameWidth',
'ScanHTMLTitles', 'SuppressColumnSorting', 'SuppressDescription',
'SuppressHTMLPreamble', 'SuppressLastModified', 'SuppressSize', 'TrackModified',
'Ascending', 'Descending', 'Name', 'Date', 'Description',
'IgnoreClient', 'IgnoreCase', 'ShowForbidden', 'SuppresRules',
-- mod_charset_lite
'DebugLevel', 'ImplicitAdd', 'NoImplicitAdd',
-- mod_ext_filter
'PreservesContentLength', 'LogStderr', 'NoLogStderr',
-- mod_headers
'set', 'unset', 'append', 'add',
-- mod_imagemap
'formatted', 'semiformatted', 'unformatted',
'nocontent', 'referer', 'map',
-- mod_ldap
'CA_DER', 'CA_BASE64', 'CA_CERT7_DB', 'CA_SECMOD', 'CERT_DER', 'CERT_BASE64', 'CERT_KEY3_DB',
'CERT_NICKNAME', 'CERT_PFX', 'KEY_DER', 'KEY_BASE64', 'KEY_PFX',
-- mod_mime
'NegotiatedOnly', 'Filters', 'Handlers',
-- mod_rewrite
'inherit',
-- mod_ssl
'builtin', 'sem',
'optional', 'optional_no_ca',
'file', 'exec', 'egd', 'dbm', 'shm',
'SSLv2', 'SSLv3', 'TLSv1', 'kRSA', 'kHDr', 'kDHd', 'kEDH', 'aNULL', 'aRSA', 'aDSS', 'aRH', 'eNULL', 'DES', '3DES',
'RC2', 'RC4', 'IDEA', 'MD5', 'SHA1', 'SHA', 'EXP', 'EXPORT40', 'EXPORT56', 'LOW',
'MEDIUM', 'HIGH', 'RSA', 'DH', 'EDH', 'ADH', 'DSS', 'NULL',
-- mod_usertrack
'Netscape', 'Cookie', 'Cookie2', 'RFC2109', 'RFC2965'
}
buffers.visualizers.apa.categories.sections = {
'<Directory', '</Directory', '<DirectoryMatch', '</DirectoryMatch', '<Files', '</Files',
'<FilesMatch', '</FilesMatch', '<IfModule', '</IfModule',
'<IfDefine', '</IfDefine', '<Location', '</Location', '<LocationMatch', '</LocationMatch',
'<VirtualHost', '</VirtualHost', '<ProxyMatch', '</ProxyMatch'
}
buffers.visualizers.apa.words = { }
for k,v in pairs(buffers.visualizers.apa.categories) do
for _,w in pairs(v) do
buffers.visualizers.apa.words[w] = k
end
end
function buffers.flush_apa_word(state, word, result)
if #word>0 then
local id = buffers.visualizers.apa.words[word]
if id == 'sections' then
state = buffers.change_state(1,state,result)
result[#result+1] = buffers.escaped(word)
state = buffers.finish_state(state,result)
return state
elseif id == 'options' then
state = buffers.change_state(5,state,result)
result[#result+1] = buffers.escaped(word)
state = buffers.finish_state(state,result)
return state
elseif id then
state = buffers.change_state(3,state,result)
result[#result+1] = buffers.escaped(word)
state = buffers.finish_state(state,result)
return state
else
result[#result+1] = buffers.escaped(word)
return state
end
else
state = buffers.finish_state(state,result)
return state
end
end
function buffers.visualizers.apa.flush_line(str,nested)
local i, result , word = 1, { }, ""
local state = 0
local delimiters=buffers.visualizers.apa.delimiters
local is_delimiter = false
local in_string = false
buffers.currentcolors = buffers.visualizers.apa.colors
while i <= #str do
c=string.sub(str,i,i)
if in_string then
if c=="\\" then
result[#result+1] = buffers.escaped(string.sub(str,i,i+1))
i=i+1
elseif c=="\"" then
result[#result+1] = buffers.escaped_chr(c)
in_string=false
state = buffers.finish_state(state,result)
elseif c=="\'" then
result[#result+1] = buffers.escaped_chr(c)
in_string=false
state = buffers.finish_state(state,result)
else
result[#result+1] = buffers.escaped_chr(c)
end
else
for _,v in ipairs(delimiters) do
if c==v then
is_delimiter = true
end
end
if is_delimiter then
if c==" " then
state = buffers.flush_apa_word(state,word,result)
result[#result+1] = "\\obs "
elseif (c=="#") then
state = buffers.flush_apa_word(state,word,result)
state = buffers.change_state(4,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i))
i=#str
elseif (c=="\"") and not in_string then
state = buffers.flush_apa_word(state,word,result)
in_string = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped_chr(c)
elseif (c=="\'") and not in_string then
state = buffers.flush_apa_word(state,word,result)
in_string = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped_chr(c)
elseif (c==">") and not in_string then
state = buffers.flush_apa_word(state,word,result)
state = buffers.change_state(1,state,result)
result[#result+1] = buffers.escaped_chr(c)
elseif (c==".") and (#word==0 or string.find(string.sub(word,1,1),'%d')) then
word = word .. c
is_delimiter=false
else
state = buffers.flush_apa_word(state,word,result)
result[#result+1] = buffers.escaped_chr(c)
end
if is_delimiter then
word = ""
is_delimiter=false
end
else
word = word .. c
end
end
i=i+1
end
state = buffers.flush_apa_word(state,word,result)
buffers.flush_result(result,false)
end
zc.buildout config files
The verb-py.cfg file distinguishes between the following four states:
- sections
- variables
- keywords
- comments
-- filename : verb-cfg.lua
-- comment : Syntax highlighting for zc.buildout config files.
-- Used original tex/context/base/verb-*.lua files,
-- verb-cpp.lua posted by Shen Chen to the NTG-context
-- list (http://archive.contextgarden.net/message/20081002.173802.460c46fe.en.html)
-- and vim syntax files as starting points.
-- author : Dražen Baić
if not buffers then buffers = { } end
if not buffers.visualizers then buffers.visualizers = { } end
if not buffers.visualizers.cfg then buffers.visualizers.cfg = { } end
buffers.visualizers.cfg.categories = {}
buffers.visualizers.cfg.delimiters = {
'"', '\'', ' ', '#', '*', '>' ,'=', '[', ']', '{', '}', '$'
}
buffers.visualizers.cfg.colors = {
"prettyone", -- sections
"prettytwo", -- variables
"prettythree", -- keywords
"prettyfour" -- comments
}
buffers.visualizers.cfg.categories.keywords = {
'additional-fake-eggs',
'client1-address', 'client2-address', 'command',
'debug-mode', 'deprecation-warnings', 'develop', 'download-cache',
'effective-user', 'eggs', 'eggs-directory', 'environment-vars', 'event-log', 'extends', 'extra-paths',
'fake-zope-eggs', 'find-links',
'http-address',
'instance-clone', 'interpreter',
'lock-file',
'nested-packages', 'newest',
'parts', 'pid-file', 'primary-port', 'products',
'recipe',
'scripts', 'socket-name', 'sudo-command',
'unzip', 'update-command', 'url', 'urls', 'user',
'verbose-security', 'version-suffix-packages', 'versions',
'z2-log', 'zcml', 'zeo-address', 'zeo-client', 'zeo-log', 'zope-directory', 'zope2-location'
}
buffers.visualizers.cfg.words = { }
for k,v in pairs(buffers.visualizers.cfg.categories) do
for _,w in pairs(v) do
buffers.visualizers.cfg.words[w] = k
end
end
function buffers.flush_cfg_word(state, word, result)
if #word>0 then
local id = buffers.visualizers.cfg.words[word]
if id == 'keywords' then
state = buffers.change_state(3,state,result)
result[#result+1] = buffers.escaped(word)
state = buffers.finish_state(state,result)
return state
elseif id then
state = buffers.change_state(3,state,result)
result[#result+1] = buffers.escaped(word)
state = buffers.finish_state(state,result)
return state
else
result[#result+1] = buffers.escaped(word)
return state
end
else
state = buffers.finish_state(state,result)
return state
end
end
function buffers.visualizers.cfg.flush_line(str,nested)
local i, result , word = 1, { }, ""
local state = 0
local delimiters=buffers.visualizers.cfg.delimiters
local is_delimiter = false
local in_variable = false
local in_section = false
buffers.currentcolors = buffers.visualizers.cfg.colors
while i <= #str do
c=string.sub(str,i,i)
if in_variable then
if c=="}" then
result[#result+1] = buffers.escaped_chr(c)
in_variable=false
state = buffers.finish_state(state,result)
else
result[#result+1] = buffers.escaped_chr(c)
end
elseif in_section then
if c=="]" then
result[#result+1] = buffers.escaped_chr(c)
in_section=false
state = buffers.finish_state(state,result)
else
result[#result+1] = buffers.escaped_chr(c)
end
else
for _,v in ipairs(delimiters) do
if c==v then
is_delimiter = true
end
end
if is_delimiter then
if c==" " then
state = buffers.flush_cfg_word(state,word,result)
result[#result+1] = "\\obs "
elseif (c=="#") then
state = buffers.flush_cfg_word(state,word,result)
state = buffers.change_state(4,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i))
i=#str
elseif (c=="$") and string.sub(str,i,i+1)=="${" then
state = buffers.flush_cfg_word(state,word,result)
in_variable = true
state = buffers.change_state(2,state,result)
result[#result+1] = buffers.escaped(string.sub(str,i,i+1))
i=i+1
elseif (c=="[") and not in_section then
state = buffers.flush_cfg_word(state,word,result)
in_section = true
state = buffers.change_state(1,state,result)
result[#result+1] = buffers.escaped_chr(c)
else
state = buffers.flush_cfg_word(state,word,result)
result[#result+1] = buffers.escaped_chr(c)
end
if is_delimiter then
word = ""
is_delimiter=false
end
else
word = word .. c
end
end
i=i+1
end
state = buffers.flush_cfg_word(state,word,result)
buffers.flush_result(result,false)
end
Sample Page
Here is an example how to use these files:
\setupcolors[state=start] \definecolor[colorprettyone] [r=.9, g=.0, b=.0] % red \definecolor[colorprettytwo] [r=.0, g=.8, b=.0] % green \definecolor[colorprettythree][r=.0, g=.0, b=.9] % blue \definecolor[colorprettyfour] [s=0.60] % gray \definecolor[colorprettyfive] [orange] \definepalet[colorpretty] [prettyone=colorprettyone, prettytwo=colorprettytwo, prettythree=colorprettythree, prettyfour=colorprettyfour, prettyfive=colorprettyfive] % Apache httpd.conf listings \installprettytype[APA][APA] \definetyping [APA] [option=APA] \definepalet [APAcolorpretty][colorpretty] \setuptyping [APA] [bodyfont=10pt] % Python listings \installprettytype[PY][PY] \definetyping [PY] [option=PY] \definepalet [PYcolorpretty] [colorpretty] \setuptyping [PY] [bodyfont=10pt] % buildout.cfg listings \installprettytype[CFG][CFG] \definetyping [CFG] [option=CFG] \definepalet [CFGcolorpretty][colorpretty] \setuptyping [CFG] [bodyfont=10pt] \starttext \section{httpd.conf sample} \startAPAServerName www.example.com ErrorLog /var/log/apache2/error.log LogLevel error CustomLog /var/log/apache2/access.log combinedio RewriteEngine On RewriteLog /var/log/apache2/rewrite.log # allow access to ZMI only from local network \stopAPA \section{Python sample} \startPY #!/usr/local/bin/python import os.path, sys # Just a comment foo = os.environ.get('FOO') bar = os.environ.get('BAR') if foo: foo = os.path.realpath(foobar) elif bar: bar = os.path.realpath(bar) else: print >> sys.stderr, ''' FOO or BAR need to be set! ''' # Another comment def test_foobar_title(self): nothing_special = getattr(self.types, 'FooBar') \stopPY \section{buildout.cfg sample} \startCFG # Use this section to install and configure a Zope # Enterprise Objects server. # For options see http://pypi.python.org/pypi/plone.recipe.zope2zeoserver [zeoserver] recipe = plone.recipe.zope2zeoserver zope2-location = ${zope2:location} zeo-address = ${buildout:zeo-address} effective-user = zeo # Put the log, pid and socket files in var/zeoserver zeo-log = ${buildout:directory}/var/zeoserver/zeoserver.log pid-file = ${buildout:directory}/var/zeoserver/zeoserver.pid socket-name = ${buildout:directory}/var/zeoserver/zeo.zdsock \stopCFG \stoptextOrder Deny,Allow Deny from all Allow from 10.