iro 0.0.2 → 0.0.3

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
  SHA256:
3
- metadata.gz: 61a916bb046f417b26e049fa4879e287790d6637d1dffb21bd81989c0cdfb68a
4
- data.tar.gz: 641735e9bd22efd17d1fe84aa0d7659b4acc4353516c913f6b82a10b26ded9ec
3
+ metadata.gz: 70fd273da825be5057ee448d52262c1f55bfdcc39781368b07a156ceb5177a5b
4
+ data.tar.gz: c2089d3d515a192be77bc5d74d926b2101a399e1eefe712206a5c724f53688b3
5
5
  SHA512:
6
- metadata.gz: 9777886111561ff6bc8a91e19d5642f586b0df46763742b12be0f8994738fb6bfce15e19d395786671ad539ea4ae7a26b4df8c466e6bae72a3e4bccee044a165
7
- data.tar.gz: b35cc4050161cee0bd1948c847cab42bab3d015d45a88aead0c14fc5dce920d65a8157e4999d4aaf2fdbb3d1c75c38578e5db2c66a49c8867869d243694f844d
6
+ metadata.gz: 69d36181c3efd70f7e26235e18364e72eacd4399d64efb6b42bcb357da36965f1c5a010a8744580d0d70117690a6ee9c78e4380223c70349331d1b2e3e070614
7
+ data.tar.gz: 98459e81eb6e9b10173e1cafba4001245205c4fdd62e29fae8106db75a04bc5ee2faf8c5371ee2d4b2fdbeebdeea87e582345711f1926fa1f34117effec8f82e
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 2.3.6
3
+ - 2.4.3
4
+ - 2.5.0
5
+ - ruby-head
6
+
7
+ before_install:
8
+ - gem update --system
data/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright {yyyy} {name of copyright owner}
189
+ Copyright 2017-2018 Masataka Pocke Kuwabara
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
data/iro.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Masataka Pocke Kuwabara"]
9
9
  spec.email = ["kuwabara@pocke.me"]
10
10
 
11
- spec.summary = %q{}
12
- spec.description = %q{}
11
+ spec.summary = %q{A library for syntax highlighter}
12
+ spec.description = %q{A library for syntax highlighter}
13
13
  spec.homepage = "https://github.com/pocke/iro"
14
14
  spec.license = 'Apache-2.0'
15
15
 
data/lib/iro.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require 'ripper'
2
+ require 'cgi/escape'
2
3
 
3
4
  require "iro/version"
4
5
  require 'iro/ripper_wrapper'
5
6
  require 'iro/ruby/parser'
7
+ require 'iro/formatter/html_formatter'
6
8
 
7
9
  module Iro
8
10
  # Your code goes here...
@@ -0,0 +1,77 @@
1
+ module Iro
2
+ module Formatter
3
+ class HTMLFormatter
4
+ module ConvertedHighlight
5
+ refine Array do
6
+ def group() self[0] end
7
+ def line() self[1]-1 end
8
+ def column() self[2]-1 end
9
+ def length() self[3] end
10
+ end
11
+ end
12
+ using ConvertedHighlight
13
+
14
+ def self.format(source, highlight, prefix: '')
15
+ formatter = self.new(
16
+ source: source,
17
+ highlight: highlight,
18
+ prefix: prefix,
19
+ )
20
+ formatter.format
21
+ end
22
+
23
+ def self.sample_stylesheet
24
+ File.join(__dir__, 'sample.css')
25
+ end
26
+
27
+ def initialize(source:, highlight:, prefix:)
28
+ @source = source.each_line.map(&:chomp)
29
+ @highlight = sort_highlight_by_position(highlight)
30
+ @prefix = prefix
31
+ end
32
+
33
+ def format
34
+ buf = []
35
+
36
+ @source.each.with_index do |line, lineno|
37
+ highlights = pop_highlight(lineno)
38
+ if highlights.empty?
39
+ buf << CGI.escapeHTML(line)
40
+ next
41
+ end
42
+
43
+ last_col = 0
44
+ highlighted_line = +''
45
+ highlights.each do |hi|
46
+ highlighted_line << CGI.escapeHTML(line[last_col...hi.column])
47
+ last_col = hi.column + hi.length
48
+ token = CGI.escapeHTML(line[(hi.column)...last_col])
49
+ highlighted_line << %Q!<span class="#{@prefix}#{hi.group}">#{token}</span>!
50
+ end
51
+ highlighted_line << line[last_col..-1]
52
+ buf << highlighted_line
53
+ end
54
+
55
+ buf.join("\n")
56
+ end
57
+
58
+ def sort_highlight_by_position(highlight)
59
+ highlight.flat_map do |group, positions|
60
+ positions.map do |pos|
61
+ [group, *pos]
62
+ end
63
+ end.sort_by do |pos|
64
+ [pos.line, pos.column]
65
+ end
66
+ end
67
+
68
+ def pop_highlight(lineno)
69
+ [].tap do |res|
70
+ while @highlight.first&.line == lineno
71
+ res << @highlight.shift
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,35 @@
1
+ .ruby-String {
2
+ color: #ff6d6d;
3
+ }
4
+
5
+ .ruby-Number {
6
+ color: #ff6d6d;
7
+ }
8
+
9
+ .ruby-Float {
10
+ color: #ff6d6d;
11
+ }
12
+
13
+ .ruby-Comment {
14
+ color: #dddddd;
15
+ }
16
+
17
+ .ruby-Type {
18
+ color: #ffdb6b;
19
+ }
20
+
21
+ .ruby-Delimiter {
22
+ color: #c649ff;
23
+ }
24
+
25
+ .ruby-rubyDefine {
26
+ color: #48ffa7;
27
+ }
28
+
29
+ .ruby-Keyword {
30
+ color: #3dbfff;
31
+ }
32
+
33
+ .ruby-rubyLocalVariable {
34
+ color: #3dbfff;
35
+ }
@@ -23,6 +23,7 @@ module Iro
23
23
  tstring_end: 'Delimiter',
24
24
  embexpr_beg: 'Delimiter',
25
25
  embexpr_end: 'Delimiter',
26
+ backtick: 'Delimiter',
26
27
  }.freeze
27
28
 
28
29
  attr_reader :tokens
data/lib/iro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Iro
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Pocke Kuwabara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-18 00:00:00.000000000 Z
11
+ date: 2018-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.11'
55
- description: ''
55
+ description: A library for syntax highlighter
56
56
  email:
57
57
  - kuwabara@pocke.me
58
58
  executables: []
@@ -60,6 +60,7 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - ".gitignore"
63
+ - ".travis.yml"
63
64
  - Gemfile
64
65
  - LICENSE
65
66
  - README.md
@@ -68,6 +69,8 @@ files:
68
69
  - bin/setup
69
70
  - iro.gemspec
70
71
  - lib/iro.rb
72
+ - lib/iro/formatter/html_formatter.rb
73
+ - lib/iro/formatter/sample.css
71
74
  - lib/iro/ripper_wrapper.rb
72
75
  - lib/iro/ruby/parser.rb
73
76
  - lib/iro/version.rb
@@ -94,5 +97,5 @@ rubyforge_project:
94
97
  rubygems_version: 2.7.6
95
98
  signing_key:
96
99
  specification_version: 4
97
- summary: ''
100
+ summary: A library for syntax highlighter
98
101
  test_files: []