Difference between revisions of "Verbatim with LuaTeX"
Jump to navigation
Jump to search
m |
|||
(3 intermediate revisions by 3 users not shown) | |||
Line 804: | Line 804: | ||
end | end | ||
</pre> | </pre> | ||
+ | |||
+ | == Sample Page == | ||
+ | Here is an example how to use these files: | ||
+ | |||
+ | <texcode> | ||
+ | \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} | ||
+ | \startAPA | ||
+ | <VirtualHost *> | ||
+ | ServerName 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 | ||
+ | <LocationMatch /manage> | ||
+ | Order Deny,Allow | ||
+ | Deny from all | ||
+ | Allow from 10. | ||
+ | </LocationMatch> | ||
+ | </VirtualHost> | ||
+ | \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 | ||
+ | \stoptext | ||
+ | </texcode> | ||
+ | |||
+ | [[Category:Basics]] |
Latest revision as of 17:12, 8 June 2020
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.