From 5d6bc3a75d3857231cb4bf91e4c96856f68232af Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 6 Mar 2013 20:31:24 +0400 Subject: [PATCH] add highlighting and folding for POD documentation --- demo/kitchen-sink/docs/perl.pl | 5 +++++ lib/ace/mode/_test/tokens_perl.json | 13 +++++++++++++ lib/ace/mode/folding/cstyle.js | 11 ++++++++++- lib/ace/mode/perl.js | 7 ++++++- lib/ace/mode/perl_highlight_rules.js | 14 ++++++++++++++ lib/ace/mode/powershell.js | 2 +- 6 files changed, 49 insertions(+), 3 deletions(-) diff --git a/demo/kitchen-sink/docs/perl.pl b/demo/kitchen-sink/docs/perl.pl index 01178e1c..d6a332e2 100644 --- a/demo/kitchen-sink/docs/perl.pl +++ b/demo/kitchen-sink/docs/perl.pl @@ -1,4 +1,8 @@ #!/usr/bin/perl +=begin + perl example code for Ace +=cut + use strict; use warnings; my $num_primes = 0; @@ -30,3 +34,4 @@ for my $p (0 .. ($num_primes-1)) print $primes[$p], ", "; } print "\n"; + diff --git a/lib/ace/mode/_test/tokens_perl.json b/lib/ace/mode/_test/tokens_perl.json index 9822a8bd..30bb39c6 100644 --- a/lib/ace/mode/_test/tokens_perl.json +++ b/lib/ace/mode/_test/tokens_perl.json @@ -1,6 +1,17 @@ [[ "start", ["comment","#!/usr/bin/perl"] +],[ + "block_comment", + ["comment.doc","=begin"] +],[ + "block_comment", + ["comment.doc"," perl example code for Ace"] +],[ + "start", + ["comment.doc","=cut"] +],[ + "start" ],[ "start", ["keyword","use"], @@ -211,4 +222,6 @@ ["text",";"] ],[ "start" +],[ + "start" ]] \ No newline at end of file diff --git a/lib/ace/mode/folding/cstyle.js b/lib/ace/mode/folding/cstyle.js index f3ee25ea..8be20d27 100644 --- a/lib/ace/mode/folding/cstyle.js +++ b/lib/ace/mode/folding/cstyle.js @@ -35,7 +35,16 @@ var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; -var FoldMode = exports.FoldMode = function() {}; +var FoldMode = exports.FoldMode = function(commentRegex) { + if (commentRegex) { + this.foldingStartMarker = new RegExp( + this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) + ); + this.foldingStopMarker = new RegExp( + this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) + ); + } +}; oop.inherits(FoldMode, BaseFoldMode); (function() { diff --git a/lib/ace/mode/perl.js b/lib/ace/mode/perl.js index de0ed19f..ff8eaa18 100644 --- a/lib/ace/mode/perl.js +++ b/lib/ace/mode/perl.js @@ -42,13 +42,18 @@ var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules()); this.$outdent = new MatchingBraceOutdent(); - this.foldingRules = new CStyleFoldMode(); + this.foldingRules = new CStyleFoldMode({start: "^=(begin|item)\\b", end: "^=(cut)\\b"}); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; + this.blockComment = [ + {start: "=begin", end: "=cut"}, + {start: "=item", end: "=cut"} + ]; + this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); diff --git a/lib/ace/mode/perl_highlight_rules.js b/lib/ace/mode/perl_highlight_rules.js index 98586bb7..046ecb7b 100644 --- a/lib/ace/mode/perl_highlight_rules.js +++ b/lib/ace/mode/perl_highlight_rules.js @@ -82,6 +82,10 @@ var PerlHighlightRules = function() { { token : "comment", regex : "#.*$" + }, { + token : "comment.doc", + regex : "^=(?:begin|item)\\b", + next : "block_comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)" @@ -141,6 +145,16 @@ var PerlHighlightRules = function() { token : "string", regex : '.+' } + ], + "block_comment": [ + { + token: "comment.doc", + regex: "^=cut\\b", + next: "start" + }, + { + defaultToken: "comment.doc" + } ] }; }; diff --git a/lib/ace/mode/powershell.js b/lib/ace/mode/powershell.js index db414c2e..b0c12eb7 100644 --- a/lib/ace/mode/powershell.js +++ b/lib/ace/mode/powershell.js @@ -13,7 +13,7 @@ var Mode = function() { this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); - this.foldingRules = new CStyleFoldMode(); + this.foldingRules = new CStyleFoldMode({start: "^\\s*(<#)", end: "^[#\\s]>\\s*$"}); }; oop.inherits(Mode, TextMode);