From 8ae260015fa6ecd5aa39a84898f42837935c9953 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 22 May 2009 22:57:03 -0400 Subject: highlight: New plugin supporting syntax highlighting of pretty much anything. * debian/control: Add suggests for libhighlight-perl, although that package is not yet created by Debian's highlight source package. (See #529869) --- doc/plugins/highlight.mdwn | 72 ++++++++++++++++++++++ doc/style.css | 18 ++++++ ..._use_of_syntax_plugin_on_source_code_files.mdwn | 3 + doc/todo/syntax_highlighting.mdwn | 28 ++++----- doc/todo/syntax_highlighting/discussion.mdwn | 2 + ...wiki-formatted_comments_with_syntax_plugin.mdwn | 5 ++ 6 files changed, 111 insertions(+), 17 deletions(-) create mode 100644 doc/plugins/highlight.mdwn (limited to 'doc') diff --git a/doc/plugins/highlight.mdwn b/doc/plugins/highlight.mdwn new file mode 100644 index 000000000..07e888f36 --- /dev/null +++ b/doc/plugins/highlight.mdwn @@ -0,0 +1,72 @@ +[[!template id=plugin name=highlight author="[[Joey]]"]] +[[!tag type/format]] + +This plugin allows ikiwiki to syntax highlight source files, using +a fast syntax highlighter that supports over a hundred programming +languages and file formats. + +## prerequisites + +You will need to install the perl bindings to the +[highlight library](http://www.andre-simon.de/), which in Debian +are in the [[!debpkg libhighlight-perl]] package. + +## configuration + +Nothing will be highlighted by default. +To enable syntax highlighting, use the `tohighlight` setting in your +setup file to control which files should be syntax highlighted. +Here is a typical setting for it, enabling highlighting for files +with the extensions .c, etc, and also for any files named "Makefile". + + tohighlight => .c, .h, .cpp, .pl, .py, Makefile:make", + +It knows what language to use for most filename extensions (see +`/etc/highlight/filetypes.conf` for a partial list), but if you want to +bind an unusual filename extension, or any file without an extension +(such as a Makefile), to a language, you can do so by appending a colon +and the name of the language, as illustrated for Makefiles above. + +## embedding highlighted code + +To embed highlighted code on a page, you can use the +[[ikiwiki/directive/format]] directive. + +For example: + + \[[!format c """ + void main () { + printf("hello, world!"); + } + """]] + +You can do this for any of the extensions/filenames enabled in +`tohighlight`. + +## colors + +The colors etc used for the syntax highlighting are entirely configurable +by CSS. See ikiwiki's [[style.css]] for the defaults. + +## limitations + +With this plugin enabled, source files become full-fledged ikiwiki pages, +which means they can include [[WikiLinks|ikiwiki/wikilink]] and +[[directives|ikiwiki/directive]] like any other page can, and are also +affected by the [[smiley]] plugin, if it is enabled. This can be +annoying if your code accidentially contains things that look like those. + +On the other hand, this also allows your syntax highlighed +source code to contain markdown formatted comments and hyperlinks +to other code files, like this: + + /* \[[!format mdwn """ + This comment will be formatted as *markdown*! + + See [[bar.h]]. + ""]] */ + +## security + +This lets anyone who can edit a page in your wiki also edit +source code files that are in your wiki. Use appropriate caution. diff --git a/doc/style.css b/doc/style.css index 74d968ddf..e6512aed8 100644 --- a/doc/style.css +++ b/doc/style.css @@ -389,3 +389,21 @@ span.color { border: 1px solid #aaa; padding: 3px; } + +/* Used by the highlight plugin. */ + +pre.hl { color:#000000; background-color:#ffffff; } +.hl.num { color:#2928ff; } +.hl.esc { color:#ff00ff; } +.hl.str { color:#ff0000; } +.hl.dstr { color:#818100; } +.hl.slc { color:#838183; font-style:italic; } +.hl.com { color:#838183; font-style:italic; } +.hl.dir { color:#008200; } +.hl.sym { color:#000000; } +.hl.line { color:#555555; } +.hl.mark { background-color:#ffffbb; } +.hl.kwa { color:#000000; font-weight:bold; } +.hl.kwb { color:#830000; } +.hl.kwc { color:#000000; font-weight:bold; } +.hl.kwd { color:#010181; } diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files.mdwn index cd5ff34de..71b4b88f0 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files.mdwn @@ -12,3 +12,6 @@ this would allow the use of ikiwiki for [[!wikipedia literate programming]]. * I have started something along these lines see [[plugins/contrib/sourcehighlight]]. For some reason I started with source-highlight [[DavidBremner]] * I wonder if this is similar to what you want: + +> The new [[plugins/highlight]] plugin is in ikiwiki core and supports +> source code files natively. [[done]] --[[Joey]] diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 81ba19bc8..01aa7b576 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -28,13 +28,17 @@ things easier for the user. also uses source-highlight, and operates on whole source files. Updated to work with the fix for [[bugs/multiple_pages_with_same_name]]. Untested with files with no extension, e.g. `Makefile`. * [[users/jasonblevins]]'s code plugin uses source-highlight, and supports both - while file and directive use. + whole file and directive use. * [hlsimple](http://pivot.cs.unb.ca/git/?p=ikiplugins.git;a=blob_plain;f=IkiWiki/Plugin/hlsimple.pm;hb=HEAD) is a wrapper for the the perl module [[!cpan Syntax::Highlight::Engine::Simple]]. This is pure perl, pretty simple, uses css. It ought to be pretty fast (according to the author, and just because it is not external). On the other hand, there are not many predefined languages yet. Defining language syntaxes is about as much work as source-highlight, but in perl. I plan to package the base module for debian. Perhaps after the author releases the 5 or 6 language definitions he has running on his web site, it might be suitable for inclusion in ikiwiki. [[DavidBremner]] +* [[plugins/highlight]] uses [highlight](http://www.andre-simon.de) via + its swig bindings. It supports whole files only. It uses either + keepextension or noextension, as appropriate for the type of file. + ## General problems / requirements * Using non-perl syntax highlighting backends is slower. All things equal, @@ -56,7 +60,6 @@ releases the 5 or 6 language definitions he has running on his web site, it migh > it has a pass-through feature that I find very useful. My memory is unfortunately a bit fuzzy as to how > well the swig bindings work. [[DavidBremner]] - * Engines that already support a wide variety of file types are of course preferred. If the engine doesn't support a particular type of file, it could fall back to doing something simple like @@ -105,20 +108,11 @@ releases the 5 or 6 language definitions he has running on his web site, it migh Perhaps the thing to do here is to use the new `longname` parameter to the format hook, to give them all names that will group together at or - near the end of the list. Ie: "Syntax: perl", "Syntax: C", etc. - -## format directive and comments - -Hmm, the [[ikiwiki/directive/format]] directive would also allow comments -inside source files to have mdwn embedded in them, without making the use -of mdwn a special case, or needing to postprocess the syntax highlighter -output to find comments. - - /* \[[!format mdwn """ - - This is a comment in my C file. You can use mdwn in here. + near the end of the list. Ie: "Syntax: perl", "Source code: c", etc. - """]] */ +--- -Note that this assumes that directives are expanded in source files, -which has its own set of problems. +I'm calling this [[done]] since I added the [[plugins/highlight]] +plugin. There are some unresolved issues touched on here, +but they either have the own other bug reports, or are documented +as semi-features in the docs to the plugin. --[[Joey]] diff --git a/doc/todo/syntax_highlighting/discussion.mdwn b/doc/todo/syntax_highlighting/discussion.mdwn index 7a4095c65..27cb7084b 100644 --- a/doc/todo/syntax_highlighting/discussion.mdwn +++ b/doc/todo/syntax_highlighting/discussion.mdwn @@ -24,3 +24,5 @@ repository? --[[JasonBlevins]] >> [[sourcecode|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]] >> plugin only adds the file extensions listed in the config. This shouldn't cause >> massive drop-down menu pollution. -- [[Will]] + +>>> That seems to be the way to go! --[[Joey]] diff --git a/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn b/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn index a5244c9ef..7a4a295d4 100644 --- a/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn +++ b/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn @@ -2,3 +2,8 @@ wiki syntax within the comments of code pretty-printed with the [[plugins/contrib/syntax]] plugin. This would allow the use of links and formatting in comments. + +> You can do this using the [[plugins/highlight]] plugin, but you have +> to explicitly put a format directive in the comment to do it. Thus, +> I'm leaving this open for now.. ideally, comments would be detected, +> and formatted as markdown. --[[Joey]] -- cgit v1.2.3