asciidoctor-github-include 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4eef1cd3edd907cc787076ac217d434f4be7726c
4
- data.tar.gz: 960c70636ad1932d5c5bdde93f523a623023233d
3
+ metadata.gz: a4d2ffec52b3127a3d790aa4d774b63c52da5a0e
4
+ data.tar.gz: 7014707480dd04c00ee818bee2811eb11ba6c0aa
5
5
  SHA512:
6
- metadata.gz: 541f4e9e7d342918413dc96f6b856b1c41414b22055a9d69618460c1ca283b93b2a62f8d073aefa427e8f14d5784d2763defdb078e552fed2c760391f5dd2879
7
- data.tar.gz: a99513b1be53ed0a7462e24ed0da1cc152141087e73a50b55b99b59bc53647b0331e97072fd543fdf390b9161785f83f0291ed428f3cfe6ef4786b973b72b7f7
6
+ metadata.gz: 1812c41bea943e09d963de7f4e6d802d1edc9845b4d6e2167e939db31fa443c27f23a17afae5cef7feaa6af15bc929548d3e301c68a2f59e3f1cabbe496be0ce
7
+ data.tar.gz: '0964b2877ce6fc1f5505846dfb4edc6440dcbdbb6fffb36afe9d4a0e12ce1cba7b37ded7313c33d3e586807c4e64d4b16767c0df0b921137737f991ae6f10cf2'
@@ -9,6 +9,15 @@ class GithubPrivateUriIncludeProcessor < Extensions::IncludeProcessor
9
9
  end
10
10
 
11
11
  def process doc, reader, target, attributes
12
+
13
+ tags = [attributes["tag"]] if attributes.key? "tag" unless attributes["tag"] == ""
14
+ tags = attributes["tags"].split(DataDelimiterRx) if attributes.key? "tags" unless attributes["tags"] == ""
15
+ lines = attributes["lines"] unless attributes["lines"] == ""
16
+ if lines && tags
17
+ warn %(asciidoctor: WARNING: Tag selection #{tags} in #{target} was ignored because line selection was specified.)
18
+ end
19
+
20
+ # Fetch the file to be included
12
21
  begin
13
22
  doc.attr('github-access-token').nil? ?
14
23
  content = (open target).readlines :
@@ -16,13 +25,78 @@ class GithubPrivateUriIncludeProcessor < Extensions::IncludeProcessor
16
25
  rescue
17
26
  warn %(asciidoctor: WARNING: Failed to retrieve GitHub URI #{target}. Did you set :github-access-token:?)
18
27
  content = "WARNING: Failed to retrieve GitHub URI link:#{target}[]"
28
+ return reader.push_include content, target, target, 1, attributes
19
29
  end
30
+
31
+ # process the lines and tags attributes
32
+ content = process_line_selection(content, lines, target) if lines
33
+ content = process_tags(content, tags, target) if tags unless lines
34
+
35
+ # push the lines onto the reader and return it
20
36
  reader.push_include content, target, target, 1, attributes
21
37
  reader
22
38
  end
39
+
40
+ # We need to process tags. This is a very naïve implementation to start with, and
41
+ # only supports the case where there is exactly one opening and closing instance
42
+ # of the tag in the file.
43
+ #
44
+ # text - the text to be processed, as an array of lines
45
+ # tags - an array of tags to get
46
+ # target - the URI of the object being fetched (only used to check the extension)
47
+ def process_tags text, tags, target
48
+ snipped_content = []
49
+
50
+ # Asciidoctor provides a map of (file extension) => (opening and closing tags for
51
+ # the file's circumfix comments). Use it to check for this case and get the right
52
+ # suffix if needed.
53
+ target_extension = target.slice (target.rindex '.'), target.length
54
+ if (circ_cmt = CIRCUMFIX_COMMENTS[target_extension])
55
+ circumfix_suffix = circ_cmt[:suffix]
56
+ end
57
+
58
+ tags.each do |tag|
59
+ if circumfix_suffix
60
+ tag_open = text.index{|line| line.chomp.end_with? %(tag::#{tag}[] #{circumfix_suffix})}
61
+ tag_close = text.index{|line| line.chomp.end_with? %(end::#{tag}[] #{circumfix_suffix})}
62
+ else
63
+ tag_open = text.index{|line| line.chomp.end_with? %(tag::#{tag}[])}
64
+ tag_close = text.index{|line| line.chomp.end_with? %(end::#{tag}[])}
65
+ end
66
+ if (!tag_open && !tag_close)
67
+ warn %(asciidoctor: WARNING: Tag #{tag} not found in included GitHub URI #{target}.)
68
+ elsif (!tag_open && tag_close)
69
+ warn %(asciidoctor: WARNING: Tag #{tag} not found in included GitHub URI #{target}, but end::[] tag was found.)
70
+ elsif (tag_open && !tag_close)
71
+ warn %(asciidoctor: WARNING: Closing tag for tag #{tag} not found in included GitHub URI #{target}.)
72
+ end
73
+
74
+ snipped_content += text[tag_open+1..tag_close-1] unless (!tag_open || !tag_close)
75
+ end
76
+ snipped_content
77
+ end
78
+
79
+ def process_line_selection text, lines, target
80
+ snipped_content = []
81
+ selected_lines = []
82
+
83
+ lines.split(DataDelimiterRx).each do |linedef|
84
+ if linedef.include?('..')
85
+ from, to = linedef.split('..', 2).map {|it| it.to_i }
86
+ to = text.length if to == -1 # -1 as a closing length means end of file
87
+ selected_lines.concat ::Range.new(from, to).to_a
88
+ else
89
+ selected_lines << linedef.to_i
90
+ end
91
+ end
92
+ selected_lines.sort.uniq.each do |i|
93
+ snipped_content << text[i-1]
94
+ end
95
+ snipped_content
96
+ end
97
+
23
98
  end
24
99
 
25
100
  Extensions.register do
26
101
  include_processor GithubPrivateUriIncludeProcessor
27
102
  end
28
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-github-include
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Oster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-23 00:00:00.000000000 Z
11
+ date: 2017-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor