giblish 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +79 -0
- data/Rakefile +18 -0
- data/{resources → docgen/resources}/css/giblish.css +0 -0
- data/{resources → docgen/resources}/fonts/Ubuntu-B.ttf +0 -0
- data/{resources → docgen/resources}/fonts/Ubuntu-BI.ttf +0 -0
- data/{resources → docgen/resources}/fonts/Ubuntu-R.ttf +0 -0
- data/{resources → docgen/resources}/fonts/Ubuntu-RI.ttf +0 -0
- data/{resources → docgen/resources}/fonts/mplus1p-regular-fallback.ttf +0 -0
- data/{resources → docgen/resources}/images/giblish_logo.png +0 -0
- data/{resources → docgen/resources}/images/giblish_logo.svg +0 -0
- data/{resources → docgen/resources}/themes/giblish.yml +0 -0
- data/docgen/scripts/Jenkinsfile +18 -0
- data/docgen/scripts/githook_examples/post-update.example +24 -0
- data/docs/setup_server.adoc +67 -0
- data/docs/setup_server_assets/Render Documents.png +0 -0
- data/docs/setup_server_assets/View Documents.png +0 -0
- data/giblish.gemspec +2 -5
- data/lib/giblish-search.rb +53 -20
- data/lib/giblish/buildgraph.rb +28 -10
- data/lib/giblish/buildindex.rb +6 -26
- data/lib/giblish/core.rb +39 -24
- data/lib/giblish/docconverter.rb +151 -77
- data/lib/giblish/gititf.rb +1 -1
- data/lib/giblish/utils.rb +106 -13
- data/lib/giblish/version.rb +1 -1
- metadata +18 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70c09507979ec9eacf59cfcb8405c929b35b7c24882db0099d4493c18439b754
|
4
|
+
data.tar.gz: e707817cee1413bbc9fd28a04ac54a1f5147176ef01070e189096a387620a0e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54fbe435b49ec492065b3ba9f9c6bab31d08e56f5843937b36a4bd8c0bd4253ec6bacecc5f2cc530a1ebb188e8289c498fd68d8a7a6951b7b3831d2e7956bffe
|
7
|
+
data.tar.gz: 83eb9c41b4437f29e4e779ca7782bc464d42daffd97e0d36ef8482f7155c2ce9364097b97745d700773368c419354d086d2b767e08d1758f9c7ddb11dfdb6aca
|
data/README.adoc
CHANGED
@@ -174,3 +174,82 @@ cgi-script must be located at http://your_web_site.com/cgi-bin/giblish-search.cg
|
|
174
174
|
and this gem provides a default implementation that you can copy from the .../lib
|
175
175
|
folder to the correct destination.
|
176
176
|
====
|
177
|
+
|
178
|
+
== Text search implementation
|
179
|
+
|
180
|
+
The text search enables a user to search for a text string and receive matching
|
181
|
+
sections in the documentation tree.
|
182
|
+
|
183
|
+
To make this work, three things are needed
|
184
|
+
|
185
|
+
. the source text of all adoc files together with a JSON file that maps sections to
|
186
|
+
their line numbers. This 'search data' is collected by giblish when it generates the
|
187
|
+
html files to the destination directory. The JSON file and all adoc source files
|
188
|
+
are copied to a well-known place in the destination tree (see below).
|
189
|
+
. an html form somewhere in the rendered pages that receives the user input (text string
|
190
|
+
and other parameters) to start a search.
|
191
|
+
** giblish injects such an html form in the generated index page when the user
|
192
|
+
specifies the '-m' switch.
|
193
|
+
. a server side script that
|
194
|
+
** receive a text string to search for
|
195
|
+
** parses the search data for matches to the text string
|
196
|
+
** presents the result to the user
|
197
|
+
|
198
|
+
This gem contains an example implementation of a server side script. It is implemented
|
199
|
+
in ruby and uses 'grep' to parse the search data. It then generates a result page where
|
200
|
+
each matching section is shown and when clicked, will navigate the user to that section
|
201
|
+
in the corresponding document.
|
202
|
+
|
203
|
+
=== Search data and html form parameters
|
204
|
+
|
205
|
+
giblish will copy all search data to a 'search_assets' dir just under the destination
|
206
|
+
root. This is illustrated below.
|
207
|
+
|
208
|
+
.When rendering documents from a git branch
|
209
|
+
dst_root_dir
|
210
|
+
|- branch_1_top_dir
|
211
|
+
| |- index.html
|
212
|
+
| |- file_1.html
|
213
|
+
| |- dir_1
|
214
|
+
| | |- file2.html
|
215
|
+
|- branch_2_top_dir
|
216
|
+
|- branch_x_...
|
217
|
+
|- web_assets
|
218
|
+
|- search_assets
|
219
|
+
| |- branch_1_top_dir
|
220
|
+
| |- heading_index.json
|
221
|
+
| |- file1.adoc
|
222
|
+
| |- dir_1
|
223
|
+
| | |- file2.adoc
|
224
|
+
| |- ...
|
225
|
+
| |- branch_2_top_dir
|
226
|
+
| | ...
|
227
|
+
|
228
|
+
assume that the file tree looks like this when not
|
229
|
+
rendering a git branch:
|
230
|
+
|
231
|
+
.When rendering documents not in a git branch
|
232
|
+
dst_root_dir
|
233
|
+
|- index.html
|
234
|
+
|- file_1.html
|
235
|
+
|- dir_1
|
236
|
+
| |- file2.html
|
237
|
+
|...
|
238
|
+
|- web_assets (only if a custom stylesheet is used...)
|
239
|
+
|- search_assets
|
240
|
+
| |- heading_index.json
|
241
|
+
| |- file1.adoc
|
242
|
+
| |- dir_1
|
243
|
+
| | |- file2.adoc
|
244
|
+
| |- ...
|
245
|
+
|
246
|
+
The parameters that is sent to the cgi script via the html form generated
|
247
|
+
by giblish are:
|
248
|
+
|
249
|
+
* searchphrase -> the text string to search for
|
250
|
+
* ignorecase -> wether to ignore case or not
|
251
|
+
* useregexp -> wether the searchphrase above is treated as a regexp or
|
252
|
+
ordinary text
|
253
|
+
* css -> the css file name to use when styling the search result page
|
254
|
+
* topdir -> the absolute path to the root of the generated document tree
|
255
|
+
* reltop -> <clarify this>
|
data/Rakefile
CHANGED
@@ -13,6 +13,24 @@ Rake::TestTask.new(:current) do |t|
|
|
13
13
|
t.test_files = FileList["test/**/index_heading_test.rb"]
|
14
14
|
end
|
15
15
|
|
16
|
+
Rake::TestTask.new(:paths) do |t|
|
17
|
+
t.libs << "test"
|
18
|
+
t.libs << "lib"
|
19
|
+
t.test_files = FileList["test/**/pathmanager_test.rb"]
|
20
|
+
end
|
21
|
+
|
22
|
+
Rake::TestTask.new(:graph) do |t|
|
23
|
+
t.libs << "test"
|
24
|
+
t.libs << "lib"
|
25
|
+
t.test_files = FileList["test/**/depgraph_test.rb"]
|
26
|
+
end
|
27
|
+
|
28
|
+
Rake::TestTask.new(:css) do |t|
|
29
|
+
t.libs << "test"
|
30
|
+
t.libs << "lib"
|
31
|
+
t.test_files = FileList["test/**/linkcss_test.rb"]
|
32
|
+
end
|
33
|
+
|
16
34
|
Rake::TestTask.new(:sandbox) do |t|
|
17
35
|
t.libs << "test"
|
18
36
|
t.libs << "lib"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
pipeline {
|
2
|
+
agent any
|
3
|
+
stages {
|
4
|
+
stage('Render html documentation') {
|
5
|
+
steps {
|
6
|
+
echo "workspace path: ${env.WORKSPACE}"
|
7
|
+
// render html versions of all docs found under the 'docs' subdir
|
8
|
+
// in the repo
|
9
|
+
sh "giblish -n -f html -w ${env.WORKSPACE} -s giblish -r docgen/resources docs gendocs"
|
10
|
+
}
|
11
|
+
}
|
12
|
+
// stage('Render pdf documentation') {
|
13
|
+
// steps {
|
14
|
+
// sh "giblish -n -f pdf -s vironova-theme -r scripts/adocgen/resources Documents/MiniTEM/third_party_software/ MiniTEM/Deployment/doc"
|
15
|
+
// }
|
16
|
+
// }
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# This hook script kicks-in after git has completed
|
4
|
+
# a push, it will thus never be able to abort a push.
|
5
|
+
#
|
6
|
+
# This hook will:
|
7
|
+
# - ping Jenkins to trigger any builds related to the
|
8
|
+
# git push
|
9
|
+
|
10
|
+
# let the user perfoming a git push know that we actually do something
|
11
|
+
echo "Start post-update"
|
12
|
+
|
13
|
+
# Hit Jenkins to initiate a Jenkins poll for which jobs that shall be started as
|
14
|
+
# consequence of a push to a specific git repo. The generic format for this is:
|
15
|
+
# curl <jenkins_url>/git/notifyCommit?url=<git repo url>
|
16
|
+
#
|
17
|
+
# If jenkins is accessible on http://jenkins.example.com:8080 and
|
18
|
+
# you want to initiate a poll for jobs associated with the giblish repository on
|
19
|
+
# github located at https://github.com/rillbert/giblish.git
|
20
|
+
# you would use the following:
|
21
|
+
curl http://jenkins.example.com:8080/git/notifyCommit?url=https://github.com/rillbert/giblish.git
|
22
|
+
|
23
|
+
# Tell user we're done
|
24
|
+
echo "Finished post-update"
|
@@ -0,0 +1,67 @@
|
|
1
|
+
= Setup web site powered by giblish
|
2
|
+
:imagesdir: setup_server_assets
|
3
|
+
:numbered:
|
4
|
+
|
5
|
+
== Purpose
|
6
|
+
|
7
|
+
To describe how to setup a web site with documents automatically generated from a git repo.
|
8
|
+
|
9
|
+
== Toolchain
|
10
|
+
|
11
|
+
* git
|
12
|
+
* giblish
|
13
|
+
* git server side hooks to kick-off the document rendering after a git push.
|
14
|
+
* a tool that can execute scripts after a git push. *Jenkins* is used in this instruction. Some advantages over calling giblish directly from a git hook:
|
15
|
+
** the document rendering is asynchronous to the git push from the client.
|
16
|
+
** the script executed by Jenkins (the 'pipeline' in Jenkis lingo) can be stored and versioned in the same git repo as the documents to be rendered.
|
17
|
+
* a web server to publish the rendered html documents.
|
18
|
+
|
19
|
+
=== Sequence for rendering documents
|
20
|
+
|
21
|
+
The following image shows how the sequence from user commit to rendered documents.
|
22
|
+
|
23
|
+
image::Render Documents.png[]
|
24
|
+
|
25
|
+
=== Sequence for viewing documents
|
26
|
+
|
27
|
+
This is just the standard way of accessing a web site. The html page served by the web server will be the latest generated html page.
|
28
|
+
|
29
|
+
image::View Documents.png[]
|
30
|
+
|
31
|
+
== Server requirements
|
32
|
+
|
33
|
+
The server that will render the documents need the following tools installed:
|
34
|
+
|
35
|
+
* git
|
36
|
+
* giblish
|
37
|
+
|
38
|
+
The server that runs Jenkins will (of course) need Jenkins installed.
|
39
|
+
|
40
|
+
=== Setup server for both Jenkins and doc rendering on Ubuntu 16.04
|
41
|
+
|
42
|
+
The easiest setup is to use the same server to run Jenkins and to render the documents. For an Ubuntu 16.04 installation, you can install the needed tools as follows:
|
43
|
+
|
44
|
+
* install git `sudo apt install git`
|
45
|
+
* install Jenkins See https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-16-04[this doc].
|
46
|
+
* install giblish `sudo gem install giblish`
|
47
|
+
|
48
|
+
|
49
|
+
== server side git hooks
|
50
|
+
|
51
|
+
git supports hooks in several parts of the sequence of getting changes ommitted and pushed to a remote repo. For details on git hooks see https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks[this doc]. See <<post-update-hook>> An example of a `post-update` hook that triggers Jenkins
|
52
|
+
|
53
|
+
|
54
|
+
[appendix]
|
55
|
+
[[post-update-hook]]
|
56
|
+
== post-update hook
|
57
|
+
|
58
|
+
Below is an example of a `post-update` hook that triggers Jenkins jobs after a push to a git repo. This hook should be installed on the server side git repository to trigger Jenkins builds
|
59
|
+
|
60
|
+
.Example of a git hook triggering Jenkins builds
|
61
|
+
----
|
62
|
+
include::../docgen/scripts/githook_examples/post-update.example[]
|
63
|
+
----
|
64
|
+
|
65
|
+
== Jenkins pipeline script
|
66
|
+
|
67
|
+
Below is a very basic example of a Jenkins pipeline that triggers giblish to render html and pdf documents located in a specific directory in a git repository.
|
Binary file
|
Binary file
|
data/giblish.gemspec
CHANGED
@@ -38,11 +38,8 @@ Gem::Specification.new do |spec|
|
|
38
38
|
# Usage: spec.add_runtime_dependency "[gem name]", [[version]]
|
39
39
|
spec.add_runtime_dependency "asciidoctor", "~>2.0", ">= 2.0.10"
|
40
40
|
spec.add_runtime_dependency "asciidoctor-diagram", ["~> 1.5"]
|
41
|
-
spec.add_runtime_dependency "asciidoctor-pdf", [">= 1.5.0.
|
41
|
+
spec.add_runtime_dependency "asciidoctor-pdf", [">= 1.5.0.beta.6"]
|
42
42
|
spec.add_runtime_dependency "git", "~> 1.3"
|
43
43
|
spec.add_runtime_dependency "rouge", "~> 3.3"
|
44
|
-
|
45
|
-
# https://github.com/asciidoctor/asciidoctor-pdf/releases
|
46
|
-
# spec.add_runtime_dependency "prawn-svg", "~> 0.27.1"
|
47
|
-
spec.add_runtime_dependency "prawn-svg", "~> 0.29.1"
|
44
|
+
spec.add_runtime_dependency "prawn-svg", "~> 0.29.1"
|
48
45
|
end
|
data/lib/giblish-search.rb
CHANGED
@@ -215,10 +215,7 @@ class SearchDocTree
|
|
215
215
|
private
|
216
216
|
|
217
217
|
def get_uri_top
|
218
|
-
|
219
|
-
return @input_data[:referer][0,@input_data[:referer].rindex('/')]
|
220
|
-
end
|
221
|
-
return @input_data[:referer].chomp('/')
|
218
|
+
return @input_data[:referer][0,@input_data[:referer].rindex('/')]
|
222
219
|
end
|
223
220
|
|
224
221
|
def wash_line line
|
@@ -239,6 +236,8 @@ class SearchDocTree
|
|
239
236
|
# ...
|
240
237
|
def format_search_adoc index,uri_top
|
241
238
|
str = ""
|
239
|
+
# debug print referer...
|
240
|
+
# str << "uri_top: #{uri_top}\n"
|
242
241
|
index.each do |file_info|
|
243
242
|
filename = Pathname.new(file_info["filepath"]).basename
|
244
243
|
str << "== #{file_info["title"]}\n\n"
|
@@ -313,7 +312,7 @@ def cgi_main cgi
|
|
313
312
|
ignorecase: cgi.has_key?("ignorecase"),
|
314
313
|
useregexp: cgi.has_key?("useregexp"),
|
315
314
|
doc_root_abs: Pathname.new(cgi["topdir"]),
|
316
|
-
referer_rel_top: Pathname.new("
|
315
|
+
referer_rel_top: Pathname.new("#{cgi["reltop"]}"),
|
317
316
|
referer: cgi.referer,
|
318
317
|
uri_path: URI(cgi.referer).path,
|
319
318
|
client_css: cgi["css"],
|
@@ -328,17 +327,16 @@ def cgi_main cgi
|
|
328
327
|
#
|
329
328
|
# if the source was rendered from a git branch, the paths
|
330
329
|
# search_assets = <index_dir>/../search_assets/<branch_name>/
|
331
|
-
#
|
330
|
+
# styles_top = ../web_assets/css
|
332
331
|
#
|
333
332
|
# and if not, the path is
|
334
333
|
# search_assets = <index_dir>/search_assets
|
335
|
-
#
|
334
|
+
# styles_top = /web_assets/css
|
335
|
+
# <link rel="stylesheet" href="/web_assets/css/virodoc.css">
|
336
336
|
#
|
337
|
-
# The styles dir shall be a relative path
|
338
337
|
if input_data[:doc_root_abs].join("./search_assets").exist?
|
339
338
|
# this is not from a git branch
|
340
339
|
input_data[:search_top] = input_data[:doc_root_abs].join("./search_assets")
|
341
|
-
# input_data[:styles_top] = Pathname.new(input_data[:uri_path]).join("./web_assets/css")
|
342
340
|
input_data[:styles_top] = Pathname.new(input_data[:referer_rel_top]).join("web_assets/css")
|
343
341
|
input_data[:gitbranch] = false
|
344
342
|
elsif input_data[:doc_root_abs].join("../search_assets").exist?
|
@@ -350,21 +348,53 @@ def cgi_main cgi
|
|
350
348
|
raise ScriptError, "Could not find search_assets dir!"
|
351
349
|
end
|
352
350
|
|
353
|
-
#
|
354
|
-
|
351
|
+
# Set some reasonable default attributes and options
|
352
|
+
adoc_attributes = {
|
355
353
|
"data-uri" => 1,
|
356
|
-
"linkcss" => 1,
|
357
|
-
"stylesdir" => input_data[:styles_top].to_s,
|
358
|
-
"stylesheet" => input_data[:client_css],
|
359
|
-
"copycss!" => 1
|
360
354
|
}
|
361
355
|
|
356
|
+
converter_options = {
|
357
|
+
backend: "html5",
|
358
|
+
# need this to let asciidoctor include the default css if user
|
359
|
+
# has not specified any css
|
360
|
+
safe: Asciidoctor::SafeMode::SAFE,
|
361
|
+
header_footer: true,
|
362
|
+
attributes: adoc_attributes
|
363
|
+
}
|
364
|
+
|
365
|
+
# use a relative stylesheet (same as the index page was rendered with)
|
366
|
+
# if the script has received input in the client_css form field
|
367
|
+
if !input_data[:client_css].nil? && !input_data[:client_css].empty?
|
368
|
+
css_path = if input_data[:styles_top].to_s[0] != '/'
|
369
|
+
"/" + input_data[:styles_top].to_s
|
370
|
+
else
|
371
|
+
input_data[:styles_top].to_s
|
372
|
+
end
|
373
|
+
adoc_attributes.merge!({
|
374
|
+
"linkcss" => 1,
|
375
|
+
"stylesdir" => css_path,
|
376
|
+
"stylesheet" => input_data[:client_css],
|
377
|
+
"copycss!" => 1
|
378
|
+
})
|
379
|
+
end
|
380
|
+
|
362
381
|
# search the docs and render html
|
363
382
|
sdt = SearchDocTree.new(input_data)
|
364
383
|
docstr = sdt.search
|
365
384
|
|
385
|
+
# used for debug purposes
|
386
|
+
# docstr = <<~EOF
|
387
|
+
#
|
388
|
+
# #{input_data[:referer_rel_top]} is branch: #{input_data[:gitbranch]}
|
389
|
+
#
|
390
|
+
# #{adoc_attributes.to_s}
|
391
|
+
#
|
392
|
+
#
|
393
|
+
# #{sdt.search}
|
394
|
+
# EOF
|
395
|
+
|
366
396
|
# send the result back to the client
|
367
|
-
print Asciidoctor.convert
|
397
|
+
print Asciidoctor.convert(docstr, converter_options)
|
368
398
|
end
|
369
399
|
|
370
400
|
# assume that the file tree looks like this when running
|
@@ -410,10 +440,14 @@ end
|
|
410
440
|
|
411
441
|
# Usage:
|
412
442
|
# to start a local web server for development work
|
413
|
-
# giblish-
|
443
|
+
# giblish-search.rb <web_root>
|
444
|
+
#
|
445
|
+
# to run as a cgi script via a previously setup web server
|
446
|
+
# giblish-search.rb
|
414
447
|
#
|
415
|
-
#
|
416
|
-
# giblish-
|
448
|
+
# (note that you might need to rename the script to eg
|
449
|
+
# giblish-search.cgi or similar depending on your web server
|
450
|
+
# setup)
|
417
451
|
#
|
418
452
|
if __FILE__ == $PROGRAM_NAME
|
419
453
|
|
@@ -425,7 +459,6 @@ if __FILE__ == $PROGRAM_NAME
|
|
425
459
|
cgi = CGI.new
|
426
460
|
print cgi.header
|
427
461
|
begin
|
428
|
-
# hello_world
|
429
462
|
cgi_main cgi
|
430
463
|
rescue Exception => e
|
431
464
|
print e.message
|
data/lib/giblish/buildgraph.rb
CHANGED
@@ -26,17 +26,20 @@ module Giblish
|
|
26
26
|
@next_id = 0
|
27
27
|
@processed_docs = processed_docs
|
28
28
|
@paths = paths
|
29
|
-
@
|
30
|
-
@
|
29
|
+
@converter_options = options.dup
|
30
|
+
# @options = options.dup
|
31
|
+
@extension = @converter_options.key?(:extension) ? options[:extension] : "html"
|
31
32
|
@docid_cache = DocidCollector.docid_cache
|
32
33
|
@docid_deps = DocidCollector.docid_deps
|
33
34
|
@dep_graph = build_dep_graph
|
34
35
|
end
|
35
36
|
|
36
37
|
# get the asciidoc source for the document.
|
37
|
-
def source
|
38
|
+
def source(make_searchable = false)
|
38
39
|
<<~DOC_STR
|
39
40
|
#{generate_header}
|
41
|
+
#{add_search_box if make_searchable}
|
42
|
+
#{generate_graph_header}
|
40
43
|
#{generate_labels}
|
41
44
|
#{generate_deps}
|
42
45
|
#{generate_footer}
|
@@ -58,15 +61,9 @@ module Giblish
|
|
58
61
|
result
|
59
62
|
end
|
60
63
|
|
61
|
-
def
|
64
|
+
def generate_graph_header
|
62
65
|
t = Time.now
|
63
66
|
<<~DOC_STR
|
64
|
-
= Document-id reference graph
|
65
|
-
from #{@paths.src_root_abs}
|
66
|
-
|
67
|
-
Generated by Giblish at::
|
68
|
-
#{t.strftime('%Y-%m-%d %H:%M')}
|
69
|
-
|
70
67
|
Below is a graph that visualizes what documents (by doc-id) a specific
|
71
68
|
document references.
|
72
69
|
|
@@ -84,6 +81,18 @@ module Giblish
|
|
84
81
|
DOC_STR
|
85
82
|
end
|
86
83
|
|
84
|
+
def generate_header
|
85
|
+
t = Time.now
|
86
|
+
<<~DOC_STR
|
87
|
+
= Document-id reference graph
|
88
|
+
from #{@paths.src_root_abs}
|
89
|
+
|
90
|
+
Generated by Giblish at::
|
91
|
+
#{t.strftime('%Y-%m-%d %H:%M')}
|
92
|
+
|
93
|
+
DOC_STR
|
94
|
+
end
|
95
|
+
|
87
96
|
def generate_footer
|
88
97
|
<<~DOC_STR
|
89
98
|
}
|
@@ -91,6 +100,15 @@ module Giblish
|
|
91
100
|
DOC_STR
|
92
101
|
end
|
93
102
|
|
103
|
+
def add_search_box
|
104
|
+
# TODO: Fix the hard-coded path
|
105
|
+
Giblish::generate_search_box_html(
|
106
|
+
@converter_options[:attributes]["stylesheet"],
|
107
|
+
"/cgi-bin/giblish-search.cgi",
|
108
|
+
@paths
|
109
|
+
)
|
110
|
+
end
|
111
|
+
|
94
112
|
def make_dot_entry(doc_dict, info)
|
95
113
|
# split title into multiple rows if it is too long
|
96
114
|
line_length = 15
|
data/lib/giblish/buildindex.rb
CHANGED
@@ -58,33 +58,13 @@ module Giblish
|
|
58
58
|
|
59
59
|
def add_search_box
|
60
60
|
# TODO: Fix the hard-coded path
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
<<~SEARCH_INFO
|
67
|
-
++++
|
68
|
-
<form class="example" action="#{cgi_path}" style="margin:20px 0px 20px 0px;max-width:380px">
|
69
|
-
Search all documents:
|
70
|
-
<input id="searchphrase" type="text" placeholder="Search.." name="searchphrase"/>
|
71
|
-
<button id="search" type="submit">Search</button>
|
72
|
-
<br>
|
73
|
-
|
74
|
-
<input id="ignorecase" type="checkbox" value="true" name="ignorecase" checked/>
|
75
|
-
<label for="ignorecase">Ignore Case</label>
|
76
|
-
|
77
|
-
<input id="useregexp" type="checkbox" value="true" name="regexp"/>
|
78
|
-
<label for="useregexp">Use Regexp</label>
|
79
|
-
|
80
|
-
<input type="hidden" name="topdir" value="#{@paths.dst_root_abs.to_s}"</input>
|
81
|
-
<input type="hidden" name="reltop" value="#{@paths.reldir_from_web_root(@paths.dst_root_abs)}"</input>
|
82
|
-
<input type="hidden" name="css" value="#{css}"</input>
|
83
|
-
</form>
|
84
|
-
++++
|
85
|
-
|
86
|
-
SEARCH_INFO
|
61
|
+
Giblish::generate_search_box_html(
|
62
|
+
@converter.converter_options[:attributes]["stylesheet"],
|
63
|
+
"/cgi-bin/giblish-search.cgi",
|
64
|
+
@paths
|
65
|
+
)
|
87
66
|
end
|
67
|
+
|
88
68
|
def get_docid_statistics
|
89
69
|
largest = ""
|
90
70
|
clash = []
|
data/lib/giblish/core.rb
CHANGED
@@ -69,38 +69,53 @@ module Giblish
|
|
69
69
|
# build index and other fancy stuff if not suppressed
|
70
70
|
unless @options[:suppressBuildRef]
|
71
71
|
# build a dependency graph (only if we resolve docids...)
|
72
|
-
dep_graph_exist =
|
73
|
-
if Giblish::GraphBuilderGraphviz.supported
|
74
|
-
gb = Giblish::GraphBuilderGraphviz.new @processed_docs, @paths, {extension: @converter.converter_options[:fileext]}
|
75
|
-
@converter.convert_str(gb.source, @paths.dst_root_abs, "graph")
|
76
|
-
else
|
77
|
-
Giblog.logger.warn { "Lacking access to needed tools for generating a visual dependency graph." }
|
78
|
-
Giblog.logger.warn { "The dependency graph will not be generated !!" }
|
79
|
-
false
|
80
|
-
end
|
81
|
-
else
|
82
|
-
false
|
83
|
-
end
|
72
|
+
dep_graph_exist = @options[:resolveDocid] && build_graph_page
|
84
73
|
|
85
74
|
# build a reference index
|
86
|
-
|
87
|
-
ib = index_factory
|
88
|
-
@converter.convert_str(
|
89
|
-
ib.source(
|
90
|
-
dep_graph_exist,@options[:make_searchable]
|
91
|
-
),
|
92
|
-
@paths.dst_root_abs, "index",
|
93
|
-
logger: adoc_logger)
|
94
|
-
|
95
|
-
# clean up cached files and adoc resources
|
96
|
-
remove_diagram_temps if dep_graph_exist
|
97
|
-
GC.start
|
75
|
+
build_index_page(dep_graph_exist)
|
98
76
|
end
|
99
77
|
conv_error
|
100
78
|
end
|
101
79
|
|
102
80
|
protected
|
103
81
|
|
82
|
+
def build_graph_page
|
83
|
+
if Giblish::GraphBuilderGraphviz.supported
|
84
|
+
# gb = Giblish::GraphBuilderGraphviz.new @processed_docs, @paths, {extension: @converter.converter_options[:fileext]}
|
85
|
+
gb = Giblish::GraphBuilderGraphviz.new @processed_docs, @paths, @converter.converter_options
|
86
|
+
errors = @converter.convert_str(
|
87
|
+
gb.source(
|
88
|
+
@options[:make_searchable]
|
89
|
+
),
|
90
|
+
@paths.dst_root_abs,
|
91
|
+
"graph"
|
92
|
+
)
|
93
|
+
remove_diagram_temps unless errors
|
94
|
+
!errors
|
95
|
+
else
|
96
|
+
Giblog.logger.warn { "Lacking access to needed tools for generating a visual dependency graph." }
|
97
|
+
Giblog.logger.warn { "The dependency graph will not be generated !!" }
|
98
|
+
false
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def build_index_page(dep_graph_exist)
|
103
|
+
# build a reference index
|
104
|
+
adoc_logger = Giblish::AsciidoctorLogger.new Logger::Severity::WARN
|
105
|
+
ib = index_factory
|
106
|
+
@converter.convert_str(
|
107
|
+
ib.source(
|
108
|
+
dep_graph_exist,@options[:make_searchable]
|
109
|
+
),
|
110
|
+
@paths.dst_root_abs,
|
111
|
+
"index",
|
112
|
+
logger: adoc_logger
|
113
|
+
)
|
114
|
+
|
115
|
+
# clean up cached files and adoc resources
|
116
|
+
GC.start
|
117
|
+
end
|
118
|
+
|
104
119
|
# get the correct index builder type depending on supplied
|
105
120
|
# user options
|
106
121
|
def index_factory
|
data/lib/giblish/docconverter.rb
CHANGED
@@ -39,8 +39,11 @@ module Giblish
|
|
39
39
|
# the user if applicable
|
40
40
|
@converter_options[:attributes] = DEFAULT_ATTRIBUTES.dup
|
41
41
|
@converter_options[:attributes].merge!(options[:attributes]) unless options[:attributes].nil?
|
42
|
-
|
43
42
|
@converter_options[:backend] = options[:backend]
|
43
|
+
|
44
|
+
# give derived classes the opportunity to add options and attributes
|
45
|
+
add_backend_options(@converter_options)
|
46
|
+
add_backend_attributes(@converter_options[:attributes])
|
44
47
|
end
|
45
48
|
|
46
49
|
# Public: Convert one single adoc file using the specific conversion
|
@@ -56,23 +59,18 @@ module Giblish
|
|
56
59
|
|
57
60
|
Giblog.logger.info {"Processing: #{filepath}"}
|
58
61
|
|
59
|
-
#
|
60
|
-
|
61
|
-
@converter_options[:to_dir] = @paths.adoc_output_dir(filepath).to_s
|
62
|
-
@converter_options[:base_dir] =
|
63
|
-
Giblish::PathManager.closest_dir(filepath).to_s
|
64
|
-
@converter_options[:to_file] =
|
65
|
-
Giblish::PathManager.get_new_basename(filepath,
|
66
|
-
@converter_options[:fileext])
|
62
|
+
# update the relevant options for each specific document
|
63
|
+
set_common_doc_specific_options(filepath,logger)
|
67
64
|
|
68
|
-
#
|
69
|
-
@converter_options[:
|
65
|
+
# give derived classes the opportunity to set doc specific attributes
|
66
|
+
add_doc_specific_attributes(filepath,true, @converter_options[:attributes])
|
70
67
|
|
71
68
|
Giblog.logger.debug {"converter_options: #{@converter_options}"}
|
72
69
|
|
73
70
|
# do the actual conversion
|
74
71
|
doc = Asciidoctor.convert_file filepath, @converter_options
|
75
72
|
|
73
|
+
# bail out if asciidoctor failed to convert the doc
|
76
74
|
if logger && logger.max_severity && logger.max_severity > Logger::Severity::WARN
|
77
75
|
raise RuntimeError, "Failed to convert the file #{filepath}"
|
78
76
|
end
|
@@ -88,6 +86,7 @@ module Giblish
|
|
88
86
|
# Returns: whether any errors occured during conversion (true) or
|
89
87
|
# not (false).
|
90
88
|
def convert_str(src_str, dst_dir, basename,logger: nil)
|
89
|
+
|
91
90
|
index_opts = @converter_options.dup
|
92
91
|
|
93
92
|
# use the same options as when converting all docs
|
@@ -98,6 +97,10 @@ module Giblish
|
|
98
97
|
index_opts[:base_dir] = dst_dir.to_s
|
99
98
|
index_opts.delete_if {|k, _v| %i[to_file].include? k}
|
100
99
|
|
100
|
+
# give derived classes the opportunity to set doc specific attributes
|
101
|
+
index_filepath = dst_dir + "#{basename}.#{index_opts[:fileext]}"
|
102
|
+
add_doc_specific_attributes(index_filepath,false, index_opts[:attributes])
|
103
|
+
|
101
104
|
# load and convert the document using the converter options
|
102
105
|
doc = nil, output = nil
|
103
106
|
|
@@ -108,105 +111,176 @@ module Giblish
|
|
108
111
|
doc = Asciidoctor.load src_str, index_opts
|
109
112
|
output = doc.convert index_opts
|
110
113
|
|
111
|
-
index_filepath = dst_dir + "#{basename}.#{index_opts[:fileext]}"
|
112
|
-
|
113
114
|
if logger && logger.max_severity && logger.max_severity > Logger::Severity::WARN
|
114
115
|
raise RuntimeError, "Failed to convert string to asciidoc!! Will _not_ generate #{index_filepath.to_s}"
|
115
116
|
end
|
117
|
+
|
118
|
+
# write the converted document to an index file located at the
|
119
|
+
# destination root
|
120
|
+
doc.write output, index_filepath.to_s
|
116
121
|
rescue Exception => e
|
117
122
|
Giblog.logger.error(e)
|
118
123
|
conv_error = true
|
119
124
|
end
|
120
125
|
|
121
|
-
|
122
|
-
# write the converted document to an index file located at the
|
123
|
-
# destination root
|
124
|
-
doc.write output, index_filepath.to_s
|
125
126
|
conv_error
|
126
127
|
end
|
127
128
|
|
128
129
|
protected
|
129
130
|
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
# generated file
|
131
|
+
# Hook for specific converters to inject their own options.
|
132
|
+
# The following options must be provided by the derived class:
|
133
|
+
# :fileext - a string with the filename extention to use for the
|
134
|
+
# generated file
|
135
135
|
#
|
136
|
-
#
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
136
|
+
# backend_options - the option dict from the backend implementation
|
137
|
+
def add_backend_options(backend_options)
|
138
|
+
@converter_options.merge!(backend_options)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Hook for specific converters to inject their own attributes
|
142
|
+
# valid for all conversions.
|
143
|
+
# backend_attributes - the attribute dict from the backend implementation
|
144
|
+
def add_backend_attributes(backend_attributes)
|
145
|
+
@converter_options[:attributes].merge!(backend_attributes)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Hook for specific converters to inject attributes on a per-doc
|
149
|
+
# basis
|
150
|
+
def add_doc_specific_attributes(filepath, is_src, attributes)
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
def set_common_doc_specific_options(src_filepath,logger)
|
157
|
+
# create an asciidoc doc object and convert to requested
|
158
|
+
# output using current conversion options
|
159
|
+
@converter_options[:to_dir] = @paths.adoc_output_dir(src_filepath).to_s
|
160
|
+
@converter_options[:base_dir] =
|
161
|
+
Giblish::PathManager.closest_dir(src_filepath).to_s
|
162
|
+
@converter_options[:to_file] =
|
163
|
+
Giblish::PathManager.get_new_basename(src_filepath,
|
164
|
+
@converter_options[:fileext])
|
165
|
+
@converter_options[:logger] = logger unless logger.nil?
|
144
166
|
end
|
145
167
|
end
|
146
168
|
|
147
|
-
# Converts asciidoc files to html5 output.
|
169
|
+
# Converts asciidoc files to html5 output.
|
148
170
|
class HtmlConverter < DocConverter
|
149
171
|
def initialize(paths, options)
|
150
172
|
super paths, options
|
151
173
|
|
152
|
-
#
|
153
|
-
|
174
|
+
# validate that things are ok on the resource front
|
175
|
+
# and copy if needed
|
176
|
+
@dst_asset_dir = @paths.dst_root_abs.join("web_assets")
|
177
|
+
validate_and_copy_resources @dst_asset_dir
|
154
178
|
|
155
|
-
#
|
156
|
-
|
157
|
-
html_attrib["data-uri"] = 1
|
179
|
+
# convenience path to css dir
|
180
|
+
@dst_css_dir = @dst_asset_dir.join("css")
|
158
181
|
|
159
|
-
#
|
160
|
-
|
161
|
-
|
182
|
+
# identify ourselves as an html converter
|
183
|
+
add_backend_options({backend: "html5", fileext: "html"})
|
184
|
+
# setup the attributes specific for this converter
|
185
|
+
add_backend_attributes(get_common_attributes)
|
162
186
|
end
|
163
187
|
|
164
|
-
|
165
|
-
|
166
|
-
def setup_stylesheet_attributes(css_dir)
|
167
|
-
return {} if @paths.resource_dir_abs.nil?
|
188
|
+
protected
|
168
189
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
190
|
+
def add_doc_specific_attributes(filepath, is_src_file, attributes)
|
191
|
+
doc_attributes = {}
|
192
|
+
if @paths.resource_dir_abs and not @web_root
|
193
|
+
# user wants to use own styling without use of a
|
194
|
+
# web root. the correct css link is the relative path
|
195
|
+
# from the specific doc to the common css directory
|
196
|
+
css_rel_dir = if is_src_file
|
197
|
+
# the filepath is a src path
|
198
|
+
@paths.relpath_to_dir_after_generate(
|
199
|
+
filepath,
|
200
|
+
@dst_css_dir
|
201
|
+
)
|
202
|
+
else
|
203
|
+
# the given file path is the destination path of
|
204
|
+
# the generated file, find the relative path to the
|
205
|
+
# css dir
|
206
|
+
dst_dir = PathManager.closest_dir(filepath)
|
207
|
+
@dst_css_dir.relative_path_from(dst_dir)
|
208
|
+
end
|
209
|
+
doc_attributes["stylesdir"] = css_rel_dir.to_s
|
210
|
+
end
|
174
211
|
|
175
|
-
|
176
|
-
@user_style &&
|
177
|
-
attrib["stylesheet"] =
|
178
|
-
/\.(css|CSS)$/ =~ @user_style ? @user_style : "#{@user_style}.css"
|
179
|
-
Giblog.logger.debug {"stylesheet attributes: #{attrib}"}
|
180
|
-
attrib
|
212
|
+
attributes.merge!(doc_attributes)
|
181
213
|
end
|
182
214
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
215
|
+
private
|
216
|
+
|
217
|
+
def get_common_attributes
|
218
|
+
# Setting 'data-uri' makes asciidoctor embed images in the resulting
|
219
|
+
# html file
|
220
|
+
html_attrib = {
|
221
|
+
"data-uri" => 1,
|
222
|
+
}
|
187
223
|
|
188
|
-
|
189
|
-
|
190
|
-
|
224
|
+
if @paths.resource_dir_abs
|
225
|
+
# user wants to use own styling, set common attributes
|
226
|
+
html_attrib.merge!(
|
227
|
+
{
|
228
|
+
"linkcss" => 1,
|
229
|
+
"stylesheet" => @user_style ||= "giblish.css",
|
230
|
+
"copycss!" => 1
|
231
|
+
}
|
232
|
+
)
|
233
|
+
|
234
|
+
# check if user wants to use a web root path
|
235
|
+
@web_root = @paths.web_root_abs
|
236
|
+
|
237
|
+
if @web_root
|
238
|
+
# if user requested a web root to be used, the correct
|
239
|
+
# css link is the relative path from the web root to the
|
240
|
+
# css file. This is true for all documents
|
241
|
+
wr_rel = @dst_css_dir.relative_path_from @web_root
|
242
|
+
Giblog.logger.info {"Relative web root: #{wr_rel}"}
|
243
|
+
html_attrib["stylesdir"] = "/" << wr_rel.to_s
|
244
|
+
end
|
245
|
+
end
|
246
|
+
html_attrib
|
247
|
+
end
|
191
248
|
|
192
|
-
|
249
|
+
def copy_resource_dir(dst_dir)
|
250
|
+
# create assets_dir and copy everything in the resource dir
|
251
|
+
# to the destination
|
252
|
+
Dir.exist?(dst_dir) || FileUtils.mkdir_p(dst_dir)
|
253
|
+
|
254
|
+
# copy all subdirs that exist in the source tree to the
|
255
|
+
# dst tree
|
193
256
|
%i[css fonts images].each do |dir|
|
194
257
|
src = "#{@paths.resource_dir_abs}/#{dir}"
|
195
|
-
Dir.exist?(src) && FileUtils.copy_entry(src, "#{
|
258
|
+
Dir.exist?(src) && FileUtils.copy_entry(src, "#{dst_dir}/#{dir}")
|
196
259
|
end
|
260
|
+
end
|
197
261
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
262
|
+
# make as sure as we can that the user has given a
|
263
|
+
# directory with valid resources
|
264
|
+
def validate_and_copy_resources(dst_dir)
|
265
|
+
# we don't have a resource path, which is fine, use
|
266
|
+
# defaults
|
267
|
+
return nil unless @paths.resource_dir_abs
|
268
|
+
|
269
|
+
# If user has requested the use of a specific css, use that,
|
270
|
+
# otherwise use asciidoctor default css
|
271
|
+
if @user_style
|
272
|
+
# Make sure that a user supplied stylesheet ends with .css or .CSS
|
273
|
+
@user_style && @user_style =
|
274
|
+
/\.(css|CSS)$/ =~ @user_style ? @user_style : "#{@user_style}.css"
|
275
|
+
|
276
|
+
# bail out if we can not find the given css file
|
277
|
+
src_css_path = @paths.resource_dir_abs.
|
278
|
+
join("css").join(Pathname.new(@user_style))
|
279
|
+
raise RuntimeError, "Could not find the specified " +
|
280
|
+
"css file at: #{src_css_path}" unless src_css_path.exist?
|
206
281
|
end
|
207
282
|
|
208
|
-
|
209
|
-
setup_stylesheet_attributes "#{assets_dir}/css"
|
283
|
+
copy_resource_dir dst_dir
|
210
284
|
end
|
211
285
|
end
|
212
286
|
|
@@ -214,10 +288,10 @@ module Giblish
|
|
214
288
|
def initialize(paths, options)
|
215
289
|
super paths, options
|
216
290
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
291
|
+
# identify ourselves as a pdf converter
|
292
|
+
add_backend_options({backend: "pdf", fileext: "pdf"})
|
293
|
+
# setup the attributes specific for this converter
|
294
|
+
add_backend_attributes(setup_pdf_attribs)
|
221
295
|
end
|
222
296
|
|
223
297
|
private
|
data/lib/giblish/gititf.rb
CHANGED
@@ -25,7 +25,7 @@ module Giblish
|
|
25
25
|
# parent
|
26
26
|
# message
|
27
27
|
def file_log(filename)
|
28
|
-
o, e, s = exec_cmd("log", %w[--follow --date=iso --], filename)
|
28
|
+
o, e, s = exec_cmd("log", %w[--follow --date=iso --], "'#{filename}'")
|
29
29
|
raise "Failed to get git log for #{filename}!!\n#{e}" if s.exitstatus != 0
|
30
30
|
|
31
31
|
process_log_output(o)
|
data/lib/giblish/utils.rb
CHANGED
@@ -86,6 +86,7 @@ module Giblish
|
|
86
86
|
attr_reader :src_root_abs
|
87
87
|
attr_reader :dst_root_abs
|
88
88
|
attr_reader :resource_dir_abs
|
89
|
+
attr_reader :web_root_abs
|
89
90
|
|
90
91
|
# Public:
|
91
92
|
#
|
@@ -95,7 +96,7 @@ module Giblish
|
|
95
96
|
# tree
|
96
97
|
# resource_dir - a string or pathname with the directory containing
|
97
98
|
# resources
|
98
|
-
def initialize(src_root, dst_root, resource_dir = nil, web_root =
|
99
|
+
def initialize(src_root, dst_root, resource_dir = nil, web_root = nil)
|
99
100
|
# Make sure that the source root exists in the file system
|
100
101
|
@src_root_abs = Pathname.new(src_root).realpath
|
101
102
|
self.dst_root_abs = dst_root
|
@@ -104,7 +105,11 @@ module Giblish
|
|
104
105
|
resource_dir && (@resource_dir_abs = Pathname.new(resource_dir).realpath)
|
105
106
|
|
106
107
|
# Set web root if given by user
|
107
|
-
@web_root_abs =
|
108
|
+
@web_root_abs = nil
|
109
|
+
if web_root
|
110
|
+
web_root = "/" + web_root unless web_root[0] == '/'
|
111
|
+
@web_root_abs = web_root ? Pathname.new(web_root) : nil
|
112
|
+
end
|
108
113
|
end
|
109
114
|
|
110
115
|
def dst_root_abs=(dst_root)
|
@@ -115,26 +120,72 @@ module Giblish
|
|
115
120
|
end
|
116
121
|
|
117
122
|
# Public: Get the relative path from the source root dir to the
|
118
|
-
#
|
123
|
+
# directory where the supplied path points.
|
119
124
|
#
|
120
|
-
# in_path - an absolute or relative path
|
125
|
+
# in_path - an absolute or relative path to a file or dir
|
121
126
|
def reldir_from_src_root(in_path)
|
122
|
-
p =
|
127
|
+
p = self.class.closest_dir in_path
|
128
|
+
p.relative_path_from(@src_root_abs)
|
129
|
+
end
|
123
130
|
|
124
|
-
|
125
|
-
|
131
|
+
# Public: Get the relative path from the
|
132
|
+
# directory where the supplied path points to
|
133
|
+
# the src root dir
|
134
|
+
#
|
135
|
+
# path - an absolute or relative path to a file or dir
|
136
|
+
def reldir_to_src_root(path)
|
137
|
+
src = self.class.closest_dir path
|
138
|
+
@src_root_abs.relative_path_from(src)
|
139
|
+
end
|
126
140
|
|
127
|
-
|
128
|
-
|
141
|
+
# Public: Get the relative path from the dst root dir to the
|
142
|
+
# directory where the supplied path points.
|
143
|
+
#
|
144
|
+
# path - an absolute or relative path to a file or dir
|
145
|
+
def reldir_from_dst_root(path)
|
146
|
+
dst = self.class.closest_dir path
|
147
|
+
dst.relative_path_from(@dst_root_abs)
|
129
148
|
end
|
130
149
|
|
131
|
-
|
132
|
-
|
133
|
-
|
150
|
+
# Public: Get the relative path from the
|
151
|
+
# directory where the supplied path points to
|
152
|
+
# the dst root dir
|
153
|
+
#
|
154
|
+
# path - an absolute or relative path to a file or dir
|
155
|
+
def reldir_to_dst_root(path)
|
156
|
+
dst = self.class.closest_dir path
|
157
|
+
@dst_root_abs.relative_path_from(dst)
|
158
|
+
end
|
159
|
+
|
160
|
+
# return the destination dir corresponding to the given src path
|
161
|
+
# the src path must exist in the file system
|
162
|
+
def dst_abs_from_src_abs(src_path)
|
163
|
+
src_abs = (self.class.to_pathname src_path).realpath
|
164
|
+
src_rel = reldir_from_src_root src_abs
|
165
|
+
@dst_root_abs.join(src_rel)
|
166
|
+
end
|
134
167
|
|
168
|
+
# return the relative path from a generated document to
|
169
|
+
# the supplied folder given the corresponding absolute source
|
170
|
+
# file path
|
171
|
+
def relpath_to_dir_after_generate(src_filepath,dir_path)
|
172
|
+
dst_abs = dst_abs_from_src_abs(src_filepath)
|
173
|
+
dir = self.class.to_pathname(dir_path)
|
174
|
+
dir.relative_path_from(dst_abs)
|
175
|
+
end
|
176
|
+
|
177
|
+
def reldir_from_web_root(path)
|
178
|
+
p = self.class.closest_dir path
|
179
|
+
return p if @web_root_abs.nil?
|
135
180
|
p.relative_path_from(@web_root_abs)
|
136
181
|
end
|
137
182
|
|
183
|
+
def reldir_to_web_root(path)
|
184
|
+
p = self.class.closest_dir path
|
185
|
+
return p if @web_root_abs.nil?
|
186
|
+
@web_root_abs.relative_path_from(p)
|
187
|
+
end
|
188
|
+
|
138
189
|
def adoc_output_file(infile_path, extension)
|
139
190
|
# Get absolute source dir path
|
140
191
|
src_dir_abs = self.class.closest_dir infile_path
|
@@ -173,6 +224,12 @@ module Giblish
|
|
173
224
|
dst_abs.relative_path_from(src_abs)
|
174
225
|
end
|
175
226
|
|
227
|
+
# return a pathname, regardless if the given path is a Pathname or
|
228
|
+
# a string
|
229
|
+
def self.to_pathname(path)
|
230
|
+
path.is_a?(Pathname) ? path : Pathname.new(path)
|
231
|
+
end
|
232
|
+
|
176
233
|
# Public: Get the basename for a file by replacing the file
|
177
234
|
# extention of the source file with the supplied one.
|
178
235
|
#
|
@@ -196,7 +253,7 @@ module Giblish
|
|
196
253
|
# - the directory itself when called with an existing directory
|
197
254
|
# - the parent dir when called with a non-existing file/directory
|
198
255
|
def self.closest_dir(in_path)
|
199
|
-
sr =
|
256
|
+
sr = self.to_pathname(in_path)
|
200
257
|
if sr.exist?
|
201
258
|
sr.directory? ? sr.realpath : sr.dirname.realpath
|
202
259
|
else
|
@@ -302,4 +359,40 @@ module Giblish
|
|
302
359
|
module_function :which
|
303
360
|
|
304
361
|
|
362
|
+
# returns raw html that displays a search box to let the user
|
363
|
+
# acces the text search functionality.
|
364
|
+
#
|
365
|
+
# css - the name of the css file to use for the search box layout
|
366
|
+
# cgi_path - the path to a cgi script that implements the server side
|
367
|
+
# functionality of searching the text
|
368
|
+
# path_manager - an instance of the path manager class to keep track of all
|
369
|
+
# destinations.
|
370
|
+
def generate_search_box_html(css, cgi_path, paths)
|
371
|
+
|
372
|
+
# button with magnifying glass icon (not working when deployed)
|
373
|
+
# <button id="search" type="submit"><i class="fa fa-search"></i></button>
|
374
|
+
<<~SEARCH_INFO
|
375
|
+
++++
|
376
|
+
<form class="example" action="#{cgi_path}" style="margin:20px 0px 20px 0px;max-width:380px">
|
377
|
+
Search all documents:
|
378
|
+
<input id="searchphrase" type="text" placeholder="Search.." name="searchphrase"/>
|
379
|
+
<button id="search" type="submit">Search</button>
|
380
|
+
<br>
|
381
|
+
|
382
|
+
<input id="ignorecase" type="checkbox" value="true" name="ignorecase" checked/>
|
383
|
+
<label for="ignorecase">Ignore Case</label>
|
384
|
+
|
385
|
+
<input id="useregexp" type="checkbox" value="true" name="regexp"/>
|
386
|
+
<label for="useregexp">Use Regexp</label>
|
387
|
+
|
388
|
+
<input type="hidden" name="topdir" value="#{paths.dst_root_abs}"</input>
|
389
|
+
<input type="hidden" name="reltop" value="#{paths.reldir_from_web_root(paths.dst_root_abs)}"</input>
|
390
|
+
<input type="hidden" name="css" value="#{css}"</input>
|
391
|
+
</form>
|
392
|
+
++++
|
393
|
+
|
394
|
+
SEARCH_INFO
|
395
|
+
end
|
396
|
+
module_function :generate_search_box_html
|
397
|
+
|
305
398
|
end
|
data/lib/giblish/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: giblish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anders Rillbert
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,14 +106,14 @@ dependencies:
|
|
106
106
|
requirements:
|
107
107
|
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 1.5.0.
|
109
|
+
version: 1.5.0.beta.6
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 1.5.0.
|
116
|
+
version: 1.5.0.beta.6
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: git
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,6 +181,20 @@ files:
|
|
181
181
|
- data/testdocs/wellformed/docidtest/docid_2.adoc
|
182
182
|
- data/testdocs/wellformed/simple.adoc
|
183
183
|
- data/testdocs/wellformed/source_highlighting/highlight_source.adoc
|
184
|
+
- docgen/resources/css/giblish.css
|
185
|
+
- docgen/resources/fonts/Ubuntu-B.ttf
|
186
|
+
- docgen/resources/fonts/Ubuntu-BI.ttf
|
187
|
+
- docgen/resources/fonts/Ubuntu-R.ttf
|
188
|
+
- docgen/resources/fonts/Ubuntu-RI.ttf
|
189
|
+
- docgen/resources/fonts/mplus1p-regular-fallback.ttf
|
190
|
+
- docgen/resources/images/giblish_logo.png
|
191
|
+
- docgen/resources/images/giblish_logo.svg
|
192
|
+
- docgen/resources/themes/giblish.yml
|
193
|
+
- docgen/scripts/Jenkinsfile
|
194
|
+
- docgen/scripts/githook_examples/post-update.example
|
195
|
+
- docs/setup_server.adoc
|
196
|
+
- docs/setup_server_assets/Render Documents.png
|
197
|
+
- docs/setup_server_assets/View Documents.png
|
184
198
|
- exe/giblish
|
185
199
|
- giblish.gemspec
|
186
200
|
- lib/giblish-search.rb
|
@@ -198,15 +212,6 @@ files:
|
|
198
212
|
- lib/giblish/pathtree.rb
|
199
213
|
- lib/giblish/utils.rb
|
200
214
|
- lib/giblish/version.rb
|
201
|
-
- resources/css/giblish.css
|
202
|
-
- resources/fonts/Ubuntu-B.ttf
|
203
|
-
- resources/fonts/Ubuntu-BI.ttf
|
204
|
-
- resources/fonts/Ubuntu-R.ttf
|
205
|
-
- resources/fonts/Ubuntu-RI.ttf
|
206
|
-
- resources/fonts/mplus1p-regular-fallback.ttf
|
207
|
-
- resources/images/giblish_logo.png
|
208
|
-
- resources/images/giblish_logo.svg
|
209
|
-
- resources/themes/giblish.yml
|
210
215
|
homepage: https://github.com/rillbert/giblish
|
211
216
|
licenses:
|
212
217
|
- MIT
|