jekyll-pseudo 0.1.4 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/jekyll-pseudo/brush.rb +1 -1
- data/lib/jekyll-pseudo/grammar.rb +22 -10
- data/lib/jekyll-pseudo/html_brush.rb +8 -2
- data/lib/jekyll-pseudo/mock_brush.rb +6 -2
- data/lib/jekyll-pseudo/version.rb +1 -1
- data/spec/grammar_spec.rb +11 -1
- data/spec/html_spec.rb +4 -0
- metadata +50 -35
- checksums.yaml +0 -7
data/lib/jekyll-pseudo/brush.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Jekyll
|
2
2
|
module Pseudo
|
3
3
|
class Grammar
|
4
|
-
#
|
4
|
+
# parse a block of text, using the given brush to format output (works in a single pass)
|
5
5
|
def format(txt, brush)
|
6
6
|
results = []
|
7
7
|
|
@@ -10,14 +10,28 @@ module Jekyll
|
|
10
10
|
[/\b([A-Z]\w+)/, :sym],
|
11
11
|
[/(\w+)(?=[({\[])/, :fn],
|
12
12
|
[/(\".*?\")/, :string],
|
13
|
-
[/(<-|->|\+\+|<=|>=|--)/, :op],
|
13
|
+
[/(<-|->|\+\+|<=|>=|--)/, :op], # try these operators first
|
14
14
|
[/([-()\[\]{}=<>+*])/, :op], # and these second
|
15
|
+
[/\b([a-z][a-zA-Z0-9]*)(_[a-zA-Z0-9]+)?/, :var],
|
15
16
|
[/^(\s+)/, :indent]
|
16
17
|
]
|
17
|
-
|
18
|
-
txt.strip!
|
19
18
|
|
20
|
-
#
|
19
|
+
# replace tabs with three spaces
|
20
|
+
txt.gsub! /^\t/, ' '
|
21
|
+
|
22
|
+
# count leading whitespace
|
23
|
+
ws = txt.scan(/^ */).map do |leading|
|
24
|
+
leading.size
|
25
|
+
end
|
26
|
+
leading = (ws.min or 0)
|
27
|
+
|
28
|
+
# remove leading whitespace of the given length
|
29
|
+
if leading > 0
|
30
|
+
r = /^ {#{leading}}/
|
31
|
+
txt.gsub! r, ''
|
32
|
+
end
|
33
|
+
|
34
|
+
# lazy man's parser (we don't do any of that silly backtracking)
|
21
35
|
cursor = 0
|
22
36
|
while true
|
23
37
|
matches = mappings.map do |pair|
|
@@ -36,10 +50,10 @@ module Jekyll
|
|
36
50
|
if upto[0] != nil
|
37
51
|
results << brush.plain(txt.slice(cursor, upto[0].begin(0)-cursor))
|
38
52
|
|
39
|
-
match = upto[0][1]
|
40
53
|
# which match?
|
41
|
-
|
42
|
-
|
54
|
+
captures = upto[0].captures
|
55
|
+
results << brush.method(upto[1]).call(*captures)
|
56
|
+
cursor = upto[0].end(0)
|
43
57
|
else
|
44
58
|
# no matches remaining
|
45
59
|
results << brush.plain(txt.slice(cursor, txt.size))
|
@@ -47,8 +61,6 @@ module Jekyll
|
|
47
61
|
end
|
48
62
|
end
|
49
63
|
|
50
|
-
# puts "FINAL: #{results.inspect}"
|
51
|
-
# puts " = #{results.join('').inspect}"
|
52
64
|
return results.join('')
|
53
65
|
end
|
54
66
|
end
|
@@ -11,8 +11,12 @@ module Jekyll
|
|
11
11
|
"<span class='function'>#{txt}</span>"
|
12
12
|
end
|
13
13
|
|
14
|
-
def var(txt)
|
15
|
-
|
14
|
+
def var(txt, sub)
|
15
|
+
if sub
|
16
|
+
"#{txt}<sub>#{sub.slice(1,sub.size)}</sub>"
|
17
|
+
else
|
18
|
+
"#{txt}"
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
def comment(txt)
|
@@ -37,6 +41,8 @@ module Jekyll
|
|
37
41
|
when '<-' then '←'
|
38
42
|
when '->' then '→'
|
39
43
|
when '*' then '×'
|
44
|
+
when '[' then '['
|
45
|
+
when ']' then ']'
|
40
46
|
else txt
|
41
47
|
end
|
42
48
|
# FIXME: html conversion for some operators
|
data/spec/grammar_spec.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require_relative '../lib/jekyll-pseudo.rb'
|
2
2
|
require_relative '../lib/jekyll-pseudo/mock_brush.rb'
|
3
|
-
# require 'spec_helper'
|
4
3
|
|
5
4
|
include Jekyll::Pseudo
|
6
5
|
|
@@ -34,10 +33,21 @@ describe Grammar do
|
|
34
33
|
format('oh "what" a world!').should eql 'oh str("what") a world!'
|
35
34
|
end
|
36
35
|
|
36
|
+
it 'formats variables' do
|
37
|
+
format('x_0').should eql ('xsub(0)')
|
38
|
+
format('x_i').should eql ('xsub(i)')
|
39
|
+
end
|
40
|
+
|
37
41
|
it 'formats functions' do
|
38
42
|
format('fn(b,c)').should eql('fn(fn)op(()b,cop())')
|
39
43
|
format('fn[b,c]').should eql('fn(fn)op([)b,cop(])')
|
40
44
|
format('fn{b,c}').should eql('fn(fn)op({)b,cop(})')
|
41
45
|
end
|
46
|
+
|
47
|
+
it 'strips leading whitespace' do
|
48
|
+
format("\thi\n\tthere").should eql("hi\nthere")
|
49
|
+
format("\thi\n\t\tthere").should eql("hi\ni(\t)there")
|
50
|
+
format("\t\thi\n\tthere").should eql("i(\t)hi\nthere")
|
51
|
+
end
|
42
52
|
end
|
43
53
|
end
|
data/spec/html_spec.rb
CHANGED
@@ -23,6 +23,10 @@ describe HtmlBrush do
|
|
23
23
|
format("# hi!").should eql "<span class='comment'>/* hi! */</span>"
|
24
24
|
end
|
25
25
|
|
26
|
+
it "variable span" do
|
27
|
+
format("a_b").should eql "a<sub>b</sub>"
|
28
|
+
end
|
29
|
+
|
26
30
|
it "operator converstions" do
|
27
31
|
format("<").should eql "<span class='op'>〈</span>"
|
28
32
|
format("*").should eql "<span class='op'>×</span>"
|
metadata
CHANGED
@@ -1,36 +1,44 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-pseudo
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 6
|
9
|
+
version: 0.1.6
|
5
10
|
platform: ruby
|
6
|
-
authors:
|
11
|
+
authors:
|
7
12
|
- Wiktor Macura
|
8
13
|
autorequire:
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
16
|
+
|
17
|
+
date: 2013-07-01 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
14
21
|
name: jekyll
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
22
|
prerelease: false
|
22
|
-
|
23
|
-
requirements:
|
24
|
-
- -
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
27
32
|
description: jekyll-pseudo helps typeset pseudocode with minimal formatting
|
28
|
-
email:
|
33
|
+
email:
|
29
34
|
- wmacura@gmail.com
|
30
35
|
executables: []
|
36
|
+
|
31
37
|
extensions: []
|
38
|
+
|
32
39
|
extra_rdoc_files: []
|
33
|
-
|
40
|
+
|
41
|
+
files:
|
34
42
|
- .gitignore
|
35
43
|
- .ruby-version
|
36
44
|
- Gemfile
|
@@ -46,29 +54,36 @@ files:
|
|
46
54
|
- lib/jekyll-pseudo/version.rb
|
47
55
|
- spec/grammar_spec.rb
|
48
56
|
- spec/html_spec.rb
|
57
|
+
has_rdoc: true
|
49
58
|
homepage: http://github.com/wkm/jekyll-pseudo
|
50
59
|
licenses: []
|
51
|
-
|
60
|
+
|
52
61
|
post_install_message:
|
53
62
|
rdoc_options: []
|
54
|
-
|
63
|
+
|
64
|
+
require_paths:
|
55
65
|
- lib
|
56
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
66
80
|
requirements: []
|
81
|
+
|
67
82
|
rubyforge_project:
|
68
|
-
rubygems_version:
|
83
|
+
rubygems_version: 1.3.6
|
69
84
|
signing_key:
|
70
|
-
specification_version:
|
85
|
+
specification_version: 3
|
71
86
|
summary: A trivial jekyll plugin for formatting pseudocode
|
72
|
-
test_files:
|
87
|
+
test_files:
|
73
88
|
- spec/grammar_spec.rb
|
74
89
|
- spec/html_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 6675c1135d5bedd8f3fc925ba10e589246d04d63
|
4
|
-
data.tar.gz: 81f4f5f0b5e2dd9c79cc373140cb08a3fffe52d8
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 3042a6d5ec4c71a0ac59162aad2d80eb3430ca85c2183876e1763d939db509de8e563a2c65c377f2d1b1f2f737b92e947660aeb02442a82968aa1d83a65612d7
|
7
|
-
data.tar.gz: 3db7b240dbc2f0832f0770c51f345912a1d4c0be5e2aeac454162e063c199bc8a2b0754600734442836167c02076f7a6efe742f18569a99176bb6ab337edd28c
|