treetop 1.6.10 → 1.6.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Rakefile +7 -15
- data/doc/pitfalls_and_advanced_techniques.markdown +6 -0
- data/lib/treetop/compiler/ruby_builder.rb +2 -2
- data/lib/treetop/ruby_extensions/string.rb +0 -6
- data/lib/treetop/version.rb +1 -1
- metadata +3 -5
- data/doc/site.rb +0 -112
- data/doc/sitegen.rb +0 -78
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 479a05ee2597d0a16e55fef607e2dabc61aca6eb0dd32fe7c09c1da57c26c249
|
4
|
+
data.tar.gz: 2ce5744718e261584c53809ac8248468bae57ec0caea18b1c14fb26c03c0aaa0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cef679ab06930e13ace292dc7abbb17004c4bad6225db29264198a6695698f6bbc0514fbd6dba6ded1a04d7ba522e7f58a9352d738ea78608dbd901589e3489
|
7
|
+
data.tar.gz: 5c47cf26a21d43c5ab2aad2f8627905d52d9ed88a8bbb2d0a810c000d316579d1cd054497877ecb59de6ce33778fd45b1d3886bf15051c6d9a73a49da6a1e7af
|
data/Rakefile
CHANGED
@@ -29,23 +29,15 @@ task :version do
|
|
29
29
|
puts 'Treetop is '+Treetop::VERSION::STRING
|
30
30
|
end
|
31
31
|
|
32
|
-
desc 'Generate website files'
|
33
|
-
task :
|
34
|
-
`cd doc; ruby ./site.rb`
|
35
|
-
end
|
36
|
-
|
37
|
-
desc 'Upload website files'
|
38
|
-
task :website_upload do
|
39
|
-
# The website is now done using gh-pages
|
32
|
+
desc 'Generate and upload website files'
|
33
|
+
task :website do
|
40
34
|
system <<-END
|
35
|
+
rm -rf .doc-tmp
|
36
|
+
cp -r doc .doc-tmp
|
41
37
|
git checkout gh-pages
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
git push
|
38
|
+
rm -r doc
|
39
|
+
mv .doc-tmp doc
|
40
|
+
rake website upload
|
46
41
|
git checkout master
|
47
42
|
END
|
48
43
|
end
|
49
|
-
|
50
|
-
desc 'Generate and upload website files'
|
51
|
-
task :website => [:website_generate, :website_upload]
|
@@ -49,3 +49,9 @@ This says that `'end'` must be followed by a space, but this space is not consum
|
|
49
49
|
end
|
50
50
|
|
51
51
|
In general, when the syntax gets tough, it helps to focus on what you really mean. A keyword is a character not followed by another character that isn't a space.
|
52
|
+
|
53
|
+
## Poor Performance with Large Unicode Strings
|
54
|
+
|
55
|
+
Treetop may perform poorly when parsing very large (more than 100KB) unicode strings. This is due to the fact that substring lookups on Ruby unicode strings are linear-time operations, and not constant-time operations like they are on ASCII encoded strings. This means that parse times for larger strings can be exponentially worse than for smaller strings.
|
56
|
+
|
57
|
+
If your input and grammar only expect ASCII strings, you can achieve significant performance improvements for large strings by re-encoding them to ASCII using `input.encode(Encoding::US_ASCII)`. See [this issue on GitHub](https://github.com/cjheath/treetop/issues/31) for more information and other possible workarounds for unicode strings.
|
@@ -9,11 +9,11 @@ module Treetop
|
|
9
9
|
def initialize
|
10
10
|
@level = 0
|
11
11
|
@address_space = LexicalAddressSpace.new
|
12
|
-
@ruby = ""
|
12
|
+
@ruby = String.new("")
|
13
13
|
end
|
14
14
|
|
15
15
|
def <<(ruby_line)
|
16
|
-
return if ruby_line
|
16
|
+
return if ruby_line == ''
|
17
17
|
ruby << ruby_line.tabto(level) << "\n"
|
18
18
|
end
|
19
19
|
|
data/lib/treetop/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: treetop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Sobo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: polyglot
|
@@ -123,8 +123,6 @@ files:
|
|
123
123
|
- doc/index.markdown
|
124
124
|
- doc/pitfalls_and_advanced_techniques.markdown
|
125
125
|
- doc/semantic_interpretation.markdown
|
126
|
-
- doc/site.rb
|
127
|
-
- doc/sitegen.rb
|
128
126
|
- doc/syntactic_recognition.markdown
|
129
127
|
- doc/tt.1
|
130
128
|
- doc/using_in_ruby.markdown
|
@@ -201,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
199
|
version: '0'
|
202
200
|
requirements: []
|
203
201
|
rubyforge_project:
|
204
|
-
rubygems_version: 2.
|
202
|
+
rubygems_version: 2.7.6.2
|
205
203
|
signing_key:
|
206
204
|
specification_version: 4
|
207
205
|
summary: A Ruby-based text parsing and interpretation DSL
|
data/doc/site.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'erector'
|
3
|
-
require "#{File.dirname(__FILE__)}/sitegen"
|
4
|
-
require 'fileutils'
|
5
|
-
require 'bluecloth'
|
6
|
-
|
7
|
-
class Layout < Erector::Widget
|
8
|
-
def content
|
9
|
-
html do
|
10
|
-
head do
|
11
|
-
link :rel => "stylesheet",
|
12
|
-
:type => "text/css",
|
13
|
-
:href => "./screen.css"
|
14
|
-
|
15
|
-
rawtext %(
|
16
|
-
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
|
17
|
-
</script>
|
18
|
-
<script type="text/javascript">
|
19
|
-
_uacct = "UA-3418876-1";
|
20
|
-
urchinTracker();
|
21
|
-
</script>
|
22
|
-
)
|
23
|
-
end
|
24
|
-
|
25
|
-
body do
|
26
|
-
div :id => 'top' do
|
27
|
-
div :id => 'main_navigation' do
|
28
|
-
main_navigation
|
29
|
-
end
|
30
|
-
end
|
31
|
-
div :id => 'middle' do
|
32
|
-
div :id => 'main_content' do
|
33
|
-
main_content
|
34
|
-
end
|
35
|
-
end
|
36
|
-
div :id => 'bottom' do
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def main_navigation
|
44
|
-
ul do
|
45
|
-
li { link_to "Documentation", SyntacticRecognition, Documentation }
|
46
|
-
li { link_to "Contribute", Contribute }
|
47
|
-
li { link_to "Home", Index }
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def main_content
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class Index < Layout
|
56
|
-
def main_content
|
57
|
-
bluecloth "index.markdown"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class Documentation < Layout
|
62
|
-
abstract
|
63
|
-
|
64
|
-
def main_content
|
65
|
-
div :id => 'secondary_navigation' do
|
66
|
-
ul do
|
67
|
-
li { link_to 'Syntax', SyntacticRecognition }
|
68
|
-
li { link_to 'Semantics', SemanticInterpretation }
|
69
|
-
li { link_to 'Using In Ruby', UsingInRuby }
|
70
|
-
li { link_to 'Advanced Techniques', PitfallsAndAdvancedTechniques }
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
div :id => 'documentation_content' do
|
75
|
-
documentation_content
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
class SyntacticRecognition < Documentation
|
81
|
-
def documentation_content
|
82
|
-
bluecloth "syntactic_recognition.markdown"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
class SemanticInterpretation < Documentation
|
87
|
-
def documentation_content
|
88
|
-
bluecloth "semantic_interpretation.markdown"
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
class UsingInRuby < Documentation
|
93
|
-
def documentation_content
|
94
|
-
bluecloth "using_in_ruby.markdown"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
class PitfallsAndAdvancedTechniques < Documentation
|
99
|
-
def documentation_content
|
100
|
-
bluecloth "pitfalls_and_advanced_techniques.markdown"
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
|
105
|
-
class Contribute < Layout
|
106
|
-
def main_content
|
107
|
-
bluecloth "contributing_and_planned_features.markdown"
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
|
112
|
-
Layout.generate_site
|
data/doc/sitegen.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
class Layout < Erector::Widget
|
2
|
-
|
3
|
-
class << self
|
4
|
-
def inherited(page_class)
|
5
|
-
puts page_class
|
6
|
-
(@@page_classes ||= []) << page_class
|
7
|
-
end
|
8
|
-
|
9
|
-
def generate_site
|
10
|
-
FileUtils.mkdir_p(site_dir)
|
11
|
-
@@page_classes.each do |page_class|
|
12
|
-
page_class.generate_html unless page_class.abstract?
|
13
|
-
puts page_class
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def generate_html
|
18
|
-
File.open(absolute_path, 'w') do |file|
|
19
|
-
file.write(new.to_html)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def absolute_path
|
24
|
-
absolutize(relative_path)
|
25
|
-
end
|
26
|
-
|
27
|
-
def relative_path
|
28
|
-
"#{name.gsub('::', '_').underscore}.html"
|
29
|
-
end
|
30
|
-
|
31
|
-
def absolutize(relative_path)
|
32
|
-
File.join(site_dir, relative_path)
|
33
|
-
end
|
34
|
-
|
35
|
-
def abstract
|
36
|
-
@abstract = true
|
37
|
-
end
|
38
|
-
|
39
|
-
def abstract?
|
40
|
-
@abstract
|
41
|
-
end
|
42
|
-
|
43
|
-
def site_dir
|
44
|
-
File.join(File.dirname(__FILE__), "../website")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def bluecloth(relative_path)
|
49
|
-
File.open(File.join(File.dirname(__FILE__), relative_path)) do |file|
|
50
|
-
rawtext BlueCloth.new(file.read).to_html
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def absolutize(relative_path)
|
55
|
-
self.class.absolutize(relative_path)
|
56
|
-
end
|
57
|
-
|
58
|
-
def link_to(link_text, page_class, section_class=nil)
|
59
|
-
if instance_of?(page_class) || section_class && is_a?(section_class)
|
60
|
-
text link_text
|
61
|
-
else
|
62
|
-
a link_text, :href => page_class.relative_path
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class String
|
68
|
-
def underscore
|
69
|
-
camel_cased_word = self
|
70
|
-
return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
|
71
|
-
word = camel_cased_word.to_s.gsub('::'.freeze, '/'.freeze)
|
72
|
-
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze)
|
73
|
-
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze)
|
74
|
-
word.tr!("-".freeze, "_".freeze)
|
75
|
-
word.downcase!
|
76
|
-
word
|
77
|
-
end
|
78
|
-
end
|