@@ -291,8 +291,67 @@ color: #ffffff; } </pre> </nowiki> <h2><a name="source-hilight">Source highlighting</a></h2> +<h3>Motivation</h3> + * You want to have source code highlighting for the files in your repository + +<h3>Problem</h3> +The main purpose of Fossil is to do versioning the source code. Although it provides a standalone server and lets you navigate through the repository files additional features like source code highlighting from my perspective (I am not a developer of Fossil) is out of scope for an SCM. Just keep the Unix principle: small little programs that do their task and do it well. + +However to have a source code highlighting in the presented web pages would still be desirable. + +<h3>Solution</h3> +There are two scenarios how to implement such a feature: + * Pipe the source code through a filter that could be defined as a configuration option. One solutions for this might be the <a href="http://www.gnu.org/software/src-highlite">GNU Source code Highlighting</a> program. + * Use a Javascript library that renders the code within your browser. One solution for this might be <a href="http://code.google.com/p/syntaxhighlighter">Google Syntax Highlighter</a> + +I estimate that the <i>pipe</i> solution needs some more work/ code changes. Thus I am solely looking at the Javascript solution. + +The SyntaxHighlighter is a library of some Javascript files, a little Flash application and a CSS file. The Flash application is for copying to clipboard, print and view source. You have the option to include all the files into your repository or use the files hosted at Google. The latter may only be an option if you are only all the time. + +For syntax highlighting to work the Header and Footer templates need to be modified and a little code change has to be applied to the Fossil sources. +<p> +<b>Header</b> +<pre> +<html> + <head> + <title>$<project_name>: $<title></title> + <link rel="alternate" type="application/rss+xml" title="RSS Feed" + href="$baseurl/timeline.rss"> + <link rel="stylesheet" href="$baseurl/style.css" type="text/css" + media="screen"> + <link rel="stylesheet" href="$baseurl/doc/tip/www/SyntaxHighlighter.css" type="text/css" + media="screen"> + </head> + +. . . +</pre> +</p><p> +<b>Footer</b> +<pre> +</div> +<div class="footer"> +Fossil version $manifest_version $manifest_date +>/div> +<script language="javascript" src="$baseurl/doc/tip/www/scripts/shCore.js"></script> +<script language="javascript" src="$baseurl/doc/tip/www/scripts/shBrushCpp.js"></script> +<script language="javascript"> +dp.SyntaxHighlighter.ClipboardSwf = '$baseurl/doc/tip/www/scripts/clipboard.swf'; +dp.SyntaxHighlighter.HighlightAll('code'); +</script> +</body></html> +</pre> +</p><p> +<b>Fossil/src/info.c</b> function artifact_page +<pre> +if( zMime==0 ){ + @ <pre name="code" class="c"> + @ %h(blob_str(&content)) + @ </pre> +</pre> +</p> +<h3>Discussion</h3> +The Javascript solution requires a minimum to be fully supported by Fossil. Of course my litte change only applies for C/C++ files. But only little more work needs to be done to get the extension of the file a guess the file type. -Found this link in the mailing list: -[http://ilia.org.il/fossil/source_highlight.html|Source highlighting] +The pipe solution would also be nice but would probably need some more work than this little patch.