jekyll-pseudo 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|