overpass-doc 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +195 -1
- data/lib/overpass-doc.rb +1 -0
- data/lib/overpass-doc/generator.rb +18 -92
- data/lib/overpass-doc/package.rb +111 -0
- data/lib/overpass-doc/views/index.erb +6 -6
- data/lib/overpass-doc/views/layout.erb +5 -5
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fe57639d0bde35c080d670d1cf3e3f554908ba18722a4e1724f1c2ca225899d
|
4
|
+
data.tar.gz: cb2986b10059b85fc5b3c89c786b19ce7f3df406596b151d005f4bd23245f21c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 579de47255bdd080218e1028594ea92f7656cd96ad9ff26e56097c23ea6d79218437c69d7eb761cea168caeec6255935bf1ee696e367aaa7dec02d2fa0dc4d44
|
7
|
+
data.tar.gz: 1d9291ccd32817d62e97a887b856188e9cfda505f6d242f1a8f92f7772066cd7420c903523f997c11155ee72e2f3a7c2cc3688bfaa5cecb203c44c03dc731b77
|
data/README.md
CHANGED
@@ -1 +1,195 @@
|
|
1
|
-
# Generate HTML documentation
|
1
|
+
# Generate HTML documentation for OSM Overpass queries
|
2
|
+
|
3
|
+
`overpass-doc` provides a simple tool for generating browsable HTML documentation
|
4
|
+
from Overpass queries.
|
5
|
+
|
6
|
+
It's intended to support people in producing tutorials and training material
|
7
|
+
to help people learn how to query OpenStreetmap. It may also be helpful to local
|
8
|
+
communities or projects that regularly need to share and run queries. For example to
|
9
|
+
help monitor changes in their area, or identify mapping tasks.
|
10
|
+
|
11
|
+
## Documenting Overpass queries
|
12
|
+
|
13
|
+
`overpass-doc` supports markup for documenting Overpass QL queries, as well as a
|
14
|
+
package metadata for a collection of queries.
|
15
|
+
|
16
|
+
These features are described in the next sections.
|
17
|
+
|
18
|
+
### Overpass QL Documentation Extensions
|
19
|
+
|
20
|
+
`overpass-doc` processes your Overpass queries, saved as text files with a `.op` extension.
|
21
|
+
|
22
|
+
It then looks for a comment at the top of the query. Like Javadoc, rdoc and
|
23
|
+
similar tools, the content of those comments are used to provide metadata
|
24
|
+
|
25
|
+
All simple documentation lines at the start of a query will be treated as its description. E.g:
|
26
|
+
|
27
|
+
```
|
28
|
+
/*
|
29
|
+
This is a description
|
30
|
+
of my query. It has multiple
|
31
|
+
lines
|
32
|
+
*/
|
33
|
+
```
|
34
|
+
|
35
|
+
Special tag can be used to specify other metadata, such as the title of a query:
|
36
|
+
|
37
|
+
```
|
38
|
+
/*
|
39
|
+
This is a description
|
40
|
+
of my query. It has multiple
|
41
|
+
lines
|
42
|
+
@title This is the title
|
43
|
+
*/
|
44
|
+
```
|
45
|
+
|
46
|
+
The full list of supported tags is:
|
47
|
+
|
48
|
+
* `@title`: should have a single value. Last title tag wins
|
49
|
+
* `@author`: author(s) of the query.
|
50
|
+
* `@see`: add one or more links
|
51
|
+
* `@tags`: add a tag to a query. Multiple values
|
52
|
+
|
53
|
+
Here's an example that uses all these:
|
54
|
+
|
55
|
+
```
|
56
|
+
/*
|
57
|
+
Specifies a bounding box to query for glacier data in a specific area of
|
58
|
+
Switzerland.
|
59
|
+
|
60
|
+
@title Extract glacier features as a specific location
|
61
|
+
@author Leigh Dodds
|
62
|
+
@see https://en.wikipedia.org/wiki/Upper_Grindelwald_Glacier
|
63
|
+
@tags glacier
|
64
|
+
*/
|
65
|
+
[out:json][timeout:25][bbox:46.5914,8.0828,46.6301, 8.1674];
|
66
|
+
// gather results
|
67
|
+
(
|
68
|
+
// query part for: “natural=glacier”
|
69
|
+
node["natural"="glacier"];
|
70
|
+
way["natural"="glacier"];
|
71
|
+
relation["natural"="glacier"];
|
72
|
+
);
|
73
|
+
// print results
|
74
|
+
out body;
|
75
|
+
>;
|
76
|
+
out skel qt;
|
77
|
+
```
|
78
|
+
|
79
|
+
The query description can be written in [Markdown](http://daringfireball.net/projects/markdown/). So
|
80
|
+
you can include embedded markup, e.g. links, that help to further document a query.
|
81
|
+
|
82
|
+
### Overview Documentation
|
83
|
+
|
84
|
+
When processing a directory of queries, `overpass-doc` will automatically look for a file called
|
85
|
+
`overview.md`. If found, this file will be automatically parsed as Markdown and its contents included
|
86
|
+
in an Overview section on the homepage of the documentation.
|
87
|
+
|
88
|
+
While the `description` in the `package.json` file is intended to provide a one line summary of the
|
89
|
+
package, the `overview.md` file is intended to provide a more detailed introduction. Both are optional,
|
90
|
+
so authors can choose which approach they prefer.
|
91
|
+
|
92
|
+
### Package Metadata
|
93
|
+
|
94
|
+
`overpass-doc` considers a directory of queries to be a _package_. Metadata that describes a package
|
95
|
+
and how its documentation should be generated is provided by a valid JSON file called `package.json` which
|
96
|
+
is found in the same directory.
|
97
|
+
|
98
|
+
The following example of a package.json file shows how to provide a title and a short description
|
99
|
+
of a package of files. The title and description will automatically be injected into the documentation.
|
100
|
+
|
101
|
+
```
|
102
|
+
{
|
103
|
+
"title": "Sample OSM Queries",
|
104
|
+
"description": "A useful selection of queries for beginners"
|
105
|
+
}
|
106
|
+
```
|
107
|
+
|
108
|
+
It is common for a collection of queries to be written by the same person, be tagged in the same
|
109
|
+
way, or be useful against the same collection of endpoints. Rather than repeatedly apply the
|
110
|
+
`@author`, `@tags` and `@endpoint` annotations to all queries in a package, default values can be
|
111
|
+
specified in the `package.json` file.
|
112
|
+
|
113
|
+
The following example shows how to do this:
|
114
|
+
|
115
|
+
```
|
116
|
+
{
|
117
|
+
"title": "Sample OSM Queries",
|
118
|
+
"description": "A useful selection of queries for beginners"
|
119
|
+
"author": ["Leigh Dodds"],
|
120
|
+
}
|
121
|
+
```
|
122
|
+
|
123
|
+
Note that because `@author`, `@tags` and `@see` are all multi-valued annotations, their values
|
124
|
+
must be specified as a JSON array.
|
125
|
+
|
126
|
+
The `package.json` file can also be used to indicate that extra files in the query directory should be
|
127
|
+
processed and included in the documentation. E.g.:
|
128
|
+
|
129
|
+
```
|
130
|
+
{
|
131
|
+
"title": "Sample OSM Queries",
|
132
|
+
"description": "A useful selection of queries for beginners"
|
133
|
+
"extra-files": ["more-info.md"]
|
134
|
+
}
|
135
|
+
```
|
136
|
+
|
137
|
+
This will trigger `overpass-doc` to process the `more-info.md` file as Markdown, converting it to
|
138
|
+
`more-info.html` which is added to the output directory. A link to `more-info` will be automatically
|
139
|
+
added to the header navigation
|
140
|
+
|
141
|
+
## Example
|
142
|
+
|
143
|
+
Here's [some example output](https://ldodds.github.io/osm-queries/) using the example queries included in the project.
|
144
|
+
|
145
|
+
## Installation
|
146
|
+
|
147
|
+
`overpass-doc` is available as a gem:
|
148
|
+
|
149
|
+
gem install overpass-doc
|
150
|
+
|
151
|
+
### Manual Install
|
152
|
+
|
153
|
+
You'll need to make sure you have the following installed:
|
154
|
+
|
155
|
+
* Ruby 2.5.0+
|
156
|
+
* RubyGems
|
157
|
+
* Bundler
|
158
|
+
* Rake
|
159
|
+
|
160
|
+
Once you have those installed, clone the repository and run the provided rake targets to build and install the gem
|
161
|
+
locally:
|
162
|
+
|
163
|
+
git clone https://github.com/ldodds/overpass-doc.git
|
164
|
+
cd overpass-doc
|
165
|
+
|
166
|
+
The code uses two gems which you'll need to have installed: JSON and [Redcarpet](https://github.com/vmg/redcarpet):
|
167
|
+
|
168
|
+
bundle install
|
169
|
+
|
170
|
+
Once installed you should be able to run the `bin/overpass-doc` command-line tool.
|
171
|
+
|
172
|
+
## Usage
|
173
|
+
|
174
|
+
_Note: the command-line syntax is likely to change in future. E.g. to add more options and/or other commands_
|
175
|
+
|
176
|
+
This takes two parameters:
|
177
|
+
|
178
|
+
* The input directory. The tool will process all `.op` files in that directory
|
179
|
+
* The output directory. All HTML output and required assets will be placed here
|
180
|
+
|
181
|
+
The output directory is optional. If not specified it will create a directory called
|
182
|
+
`overpass-doc` in the current directory.
|
183
|
+
|
184
|
+
E.g. you can run:
|
185
|
+
|
186
|
+
overpass-doc queries pages
|
187
|
+
|
188
|
+
This will generate documentation from the bundled examples and place it into the specified
|
189
|
+
directory.
|
190
|
+
|
191
|
+
## License
|
192
|
+
|
193
|
+
This work is hereby released into the Public Domain.
|
194
|
+
|
195
|
+
To view a copy of the public domain dedication, visit http://creativecommons.org/licenses/publicdomain or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
|
data/lib/overpass-doc.rb
CHANGED
@@ -9,38 +9,31 @@ module OverpassDoc
|
|
9
9
|
@output_dir = output_dir
|
10
10
|
@asset_dir = asset_dir || File.join( File.dirname( __FILE__ ) , "assets")
|
11
11
|
@view_dir = view_dir || File.join( File.dirname( __FILE__ ) , "views")
|
12
|
-
@package =
|
13
|
-
@
|
12
|
+
@package = OverpassDoc::Package.new(@dir)
|
13
|
+
@templates = {}
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
|
16
|
+
def run
|
17
|
+
copy_assets
|
18
|
+
@package.generate(self)
|
19
|
+
rescue => e
|
20
|
+
puts e
|
21
|
+
puts e.backtrace
|
18
22
|
end
|
19
23
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
Hash.new
|
24
|
+
def read_template(name)
|
25
|
+
return @templates[name] if @templates[name]
|
26
|
+
@templates[name] = File.read(File.join(@view_dir, "#{name}.erb"))
|
27
|
+
return @templates[name]
|
26
28
|
end
|
27
29
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
def write_file(package, filename, content)
|
31
|
+
if File.dirname(filename) != "."
|
32
|
+
FileUtils.mkdir_p File.join(@output_dir, File.dirname(filename))
|
33
|
+
end
|
34
|
+
File.open(File.join(@output_dir, filename), "w") do |f|
|
35
|
+
f.puts(content)
|
34
36
|
end
|
35
|
-
queries.sort! {|x,y| x.title <=> y.title }
|
36
|
-
queries
|
37
|
-
end
|
38
|
-
|
39
|
-
def run()
|
40
|
-
copy_assets()
|
41
|
-
generate_index()
|
42
|
-
generate_query_pages()
|
43
|
-
copy_extra_files()
|
44
37
|
end
|
45
38
|
|
46
39
|
def copy_assets(asset_dir=@asset_dir)
|
@@ -51,72 +44,5 @@ module OverpassDoc
|
|
51
44
|
FileUtils.cp_r( "#{@asset_dir}/.", @output_dir )
|
52
45
|
end
|
53
46
|
|
54
|
-
def copy_extra_files()
|
55
|
-
@package["extra-files"].each do |file|
|
56
|
-
markup = File.read( File.join(@dir, file) )
|
57
|
-
renderer = Redcarpet::Render::HTML.new({})
|
58
|
-
markdown = Redcarpet::Markdown.new(renderer, {})
|
59
|
-
template = ERB.new( read_template(:extra) )
|
60
|
-
_content = markdown.render(markup)
|
61
|
-
html = layout do
|
62
|
-
b = binding
|
63
|
-
template.result(b)
|
64
|
-
end
|
65
|
-
file = File.join(@output_dir, file.gsub(".md", ".html"))
|
66
|
-
File.open(file, "w") do |f|
|
67
|
-
f.puts html
|
68
|
-
end
|
69
|
-
end if @package["extra-files"]
|
70
|
-
end
|
71
|
-
|
72
|
-
def get_overview()
|
73
|
-
overview = File.join(@dir, "overview.md")
|
74
|
-
if File.exists?( overview )
|
75
|
-
markup = File.read( overview )
|
76
|
-
renderer = Redcarpet::Render::HTML.new({})
|
77
|
-
markdown = Redcarpet::Markdown.new(renderer, {})
|
78
|
-
return markdown.render(markup)
|
79
|
-
end
|
80
|
-
nil
|
81
|
-
end
|
82
|
-
|
83
|
-
def generate_index()
|
84
|
-
$stderr.puts("Generating index.html");
|
85
|
-
_title = @package["title"] || "Overpass Query Documentation"
|
86
|
-
_overview = get_overview()
|
87
|
-
_description = @package["description"] || ""
|
88
|
-
template = ERB.new( read_template(:index) )
|
89
|
-
html = layout do
|
90
|
-
b = binding
|
91
|
-
template.result(b)
|
92
|
-
end
|
93
|
-
File.open(File.join(@output_dir, "index.html"), "w") do |f|
|
94
|
-
f.puts(html)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def layout
|
99
|
-
b = binding
|
100
|
-
_title = @package["title"] || "Overpass Query Documentation"
|
101
|
-
_overview = get_overview()
|
102
|
-
ERB.new( read_template(:layout) ).result(b)
|
103
|
-
end
|
104
|
-
|
105
|
-
def generate_query_pages()
|
106
|
-
template = ERB.new( read_template(:query) )
|
107
|
-
@queries.each do |query|
|
108
|
-
$stderr.puts("Generating docs for #{query.path}")
|
109
|
-
File.open( File.join(@output_dir, query.output_filename), "w" ) do |f|
|
110
|
-
b = binding
|
111
|
-
_title = @package["title"] || "Overpass Query Documentation"
|
112
|
-
_overview = get_overview()
|
113
|
-
html = layout do
|
114
|
-
template.result(b)
|
115
|
-
end
|
116
|
-
f.puts( html )
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
47
|
end
|
122
48
|
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module OverpassDoc
|
2
|
+
#A directory containing a package.json, query files and supporting assets
|
3
|
+
class Package
|
4
|
+
attr_reader :dir, :queries, :metadata
|
5
|
+
|
6
|
+
def initialize(src_dir)
|
7
|
+
@dir = src_dir
|
8
|
+
@metadata = parse_metadata()
|
9
|
+
@queries = parse_queries()
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate(generator)
|
13
|
+
generate_index(generator)
|
14
|
+
generate_query_pages(generator)
|
15
|
+
copy_extra_files(generator)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_metadata()
|
21
|
+
package = File.join(@dir, "package.json")
|
22
|
+
if File.exists?(package)
|
23
|
+
return JSON.load( File.open(package) )
|
24
|
+
end
|
25
|
+
Hash.new
|
26
|
+
end
|
27
|
+
|
28
|
+
def parse_queries()
|
29
|
+
queries = []
|
30
|
+
Dir.glob("#{@dir}/**/*.op") do |file|
|
31
|
+
content = File.read(file)
|
32
|
+
path = file.gsub("#{@dir}/", "")
|
33
|
+
queries << OverpassDoc::Query.new(path, content, @metadata)
|
34
|
+
end
|
35
|
+
queries.sort! {|x,y| x.title <=> y.title }
|
36
|
+
queries
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy_extra_files(generator)
|
40
|
+
@metadata["extra-files"].each do |file|
|
41
|
+
markup = File.read( File.join(@dir, file) )
|
42
|
+
_content = render_markdown(markup)
|
43
|
+
template = ERB.new( generator.read_template(:extra) )
|
44
|
+
html = layout(generator) do
|
45
|
+
b = binding
|
46
|
+
template.result(b)
|
47
|
+
end
|
48
|
+
filename = file.gsub(".md", ".html")
|
49
|
+
generator.write_file(self, filename, html)
|
50
|
+
end if @metadata["extra-files"]
|
51
|
+
end
|
52
|
+
|
53
|
+
#available in template
|
54
|
+
def overview
|
55
|
+
return @overview if @overview
|
56
|
+
overview = File.join(@dir, "overview.md")
|
57
|
+
if File.exists?( overview )
|
58
|
+
markup = File.read( overview )
|
59
|
+
@overview = render_markdown(markup)
|
60
|
+
return @overview
|
61
|
+
end
|
62
|
+
nil
|
63
|
+
end
|
64
|
+
|
65
|
+
def generate_index(generator)
|
66
|
+
$stderr.puts("Generating index.html")
|
67
|
+
generator.write_file(self, "index.html", render_with_layout(generator, :index))
|
68
|
+
end
|
69
|
+
|
70
|
+
def render_markdown(src)
|
71
|
+
renderer = Redcarpet::Render::HTML.new({})
|
72
|
+
markdown = Redcarpet::Markdown.new(renderer, {})
|
73
|
+
markdown.render(src)
|
74
|
+
end
|
75
|
+
|
76
|
+
def render_with_layout(generator, template, variables={})
|
77
|
+
template = ERB.new( generator.read_template(template) )
|
78
|
+
b = binding
|
79
|
+
variables.each do |key, value|
|
80
|
+
b.local_variable_set(key, value)
|
81
|
+
end
|
82
|
+
html = layout(generator) do
|
83
|
+
template.result(b)
|
84
|
+
end
|
85
|
+
return html
|
86
|
+
end
|
87
|
+
|
88
|
+
def layout(generator)
|
89
|
+
b = binding
|
90
|
+
ERB.new( generator.read_template(:layout) ).result(b)
|
91
|
+
end
|
92
|
+
|
93
|
+
#available in template
|
94
|
+
def title
|
95
|
+
@metadata["title"] || "Overpass Query Documentation"
|
96
|
+
end
|
97
|
+
|
98
|
+
def description
|
99
|
+
@metadata["description"] || ""
|
100
|
+
end
|
101
|
+
|
102
|
+
def generate_query_pages(generator)
|
103
|
+
@queries.each do |query|
|
104
|
+
$stderr.puts("Generating docs for #{query.path}")
|
105
|
+
html = render_with_layout(generator, :query, {query: query})
|
106
|
+
generator.write_file(self, query.output_filename, html)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
<div class="container">
|
2
2
|
<div class="bg-light p-5 rounded">
|
3
|
-
<h1><%=
|
4
|
-
<p class="lead"><%=
|
3
|
+
<h1><%= title %></h1>
|
4
|
+
<p class="lead"><%= description %></p>
|
5
5
|
</div>
|
6
6
|
|
7
|
-
<% if
|
7
|
+
<% if overview %>
|
8
8
|
<div class="row">
|
9
9
|
<div class="col">
|
10
10
|
<h3 id="overview">Overview</h3>
|
11
|
-
<%=
|
11
|
+
<%= overview %>
|
12
12
|
</div>
|
13
13
|
</div>
|
14
14
|
<% end %>
|
@@ -16,7 +16,7 @@
|
|
16
16
|
<div class="row">
|
17
17
|
<div class="col">
|
18
18
|
<h3>Queries</h3>
|
19
|
-
<p>This set of documentation covers <strong><%=
|
19
|
+
<p>This set of documentation covers <strong><%= queries.size %></strong> queries</p>
|
20
20
|
<table class="table table-hover">
|
21
21
|
<thead>
|
22
22
|
<tr>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
</tr>
|
25
25
|
</thead>
|
26
26
|
<tbody>
|
27
|
-
<%
|
27
|
+
<% queries.each do |query| %>
|
28
28
|
<tr>
|
29
29
|
<td><a href="<%= query.output_filename %>"><%= query.title %></a></td><td><code><%= query.path %></code></td>
|
30
30
|
</tr>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html class="h-100">
|
3
3
|
<head>
|
4
4
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
5
|
-
<title><%=
|
5
|
+
<title><%= title %></title>
|
6
6
|
|
7
7
|
<script src="jquery.js" type="text/javascript"></script>
|
8
8
|
<script src="bootstrap.min.js" type="text/javascript"></script>
|
@@ -41,19 +41,19 @@
|
|
41
41
|
<header>
|
42
42
|
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
|
43
43
|
<div class="container-fluid">
|
44
|
-
<a class="navbar-brand" href="index.html"><%=
|
44
|
+
<a class="navbar-brand" href="index.html"><%= title %></a>
|
45
45
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
46
46
|
<span class="navbar-toggler-icon"></span>
|
47
47
|
</button>
|
48
48
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
49
49
|
<ul class="navbar-nav me-auto mb-2 mb-md-0">
|
50
|
-
<% if
|
50
|
+
<% if overview %>
|
51
51
|
<li class="nav-item">
|
52
52
|
<a class="nav-link active" aria-current="page" href="index.html#overview">Overview</a>
|
53
53
|
</li>
|
54
54
|
<% end %>
|
55
|
-
<% if
|
56
|
-
<%
|
55
|
+
<% if metadata["extra-files"] %>
|
56
|
+
<% metadata["extra-files"].each do |file| %>
|
57
57
|
<li class="nav-item">
|
58
58
|
<a class="nav-link" href="<%= file.gsub(".md", ".html") %>"><%= file.gsub(".md", "").capitalize %></a>
|
59
59
|
</li>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: overpass-doc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leigh Dodds
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/overpass-doc/assets/util/simple-hint.js
|
109
109
|
- lib/overpass-doc/assets/util/xml-hint.js
|
110
110
|
- lib/overpass-doc/generator.rb
|
111
|
+
- lib/overpass-doc/package.rb
|
111
112
|
- lib/overpass-doc/query.rb
|
112
113
|
- lib/overpass-doc/views/extra.erb
|
113
114
|
- lib/overpass-doc/views/index.erb
|