Showing posts with label syntax highlighting. Show all posts
Showing posts with label syntax highlighting. Show all posts

Tuesday, May 4, 2010

Test for the Go syntax highlighter

I got some feedback from the Go Nuts mailing list, particularly from Russ Cox who pointed out that predefined identifiers like true, nil, int, and float are not reserved keywords.  So I decided to have two kinds of highlighted keywords:
  1. those that start a type or start a declaration, including for packages:
    struct func interface map chan package import type const var
  2. those that control the flow of the code:
    goto break continue if else switch default case for range go select return fallthrough defer

Then I use the code from $GOROOT/test/rename.go and rename1.go to see the effect of this color scheme:
// $G $D/$F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import "fmt"

func main() {
   n :=
      bool +
         byte +
         float +
         float32 +
         float64 +
         int +
         int8 +
         int16 +
         int32 +
         int64 +
         uint +
         uint8 +
         uint16 +
         uint32 +
         uint64 +
         uintptr +
         true +
         false +
         iota +
         nil +
         cap +
         len +
         make +
         new +
         panic +
         print +
         println
   if n != 27*28/2 {
      fmt.Println("BUG: wrong n", n, 27*28/2)
   }

   var n byte       // ERROR "not a type|expected type"
   var y = float(0) // ERROR "cannot call|expected function"
   const (
      a = 1 + iota // ERROR "string|incompatible types"
   )
}

const (
   bool    = 1
   byte    = 2
   float   = 3
   float32 = 4
   float64 = 5
   int     = 6
   int8    = 7
   int16   = 8
   int32   = 9
   int64   = 10
   uint    = 11
   uint8   = 12
   uint16  = 13
   uint32  = 14
   uint64  = 15
   uintptr = 16
   true    = 17
   false   = 18
   iota    = 19
   nil     = 20
   cap     = 21
   len     = 22
   make    = 23
   new     = 24
   panic   = 25
   print   = 26
   println = 27
)

In the end, if it doesn't suit your aesthetic tastes, you could always download the script and tweak it.

Monday, May 3, 2010

Syntax highlighting for golang

I've been using Alex Gorbatchev's SyntaxHighlighter to ease the task of presenting code on this blog. Seeing that there's currently no "brush" for golang, I decided to create one. I posted the code here for anyone interested. To use it, simply put the following line where you'd normally do it for SyntaxHighlighter brushes (usually before the <head> tag):
<script src='https://raw.github.com/axx/GolangHighlighter/master/shBrushGo.js' type='text/javascript'/>
Then use either "go" or "golang" as alias when you insert golang code on your blog:
<pre class="brush: go">package main
import "fmt"
func main() {
    fmt.Printf("yoohoo!")
}</pre>
This will be rendered as:
package main
import "fmt"
func main() {
    fmt.Printf("yoohoo!")
}
I hope someone else finds it useful. Please drop a comment if you have some suggestions on how to improve it.
EDIT (05AUG2012): I've lost my old server so I had to reconstruct the script and placed it on GitHub. I therefore updated the example and links above.