pygments.rb 1.0.0 → 1.1.0
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/circle.yml +13 -0
- data/lib/pygments.rb +27 -2
- data/lib/pygments/popen.rb +16 -13
- data/lib/pygments/version.rb +1 -1
- data/pygments.rb.gemspec +1 -2
- data/test/test_pygments.rb +11 -0
- metadata +7 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95f44f119ac71a42def88c2cc6684c051d6a7bc1
|
4
|
+
data.tar.gz: d44710b3e2e2d6b694379a8edb394caf45d7e1ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8aa00980332c0b813fb5c1bbffdcbeca857dcf306c8504a1dbd3c77e77a5b442723d3e112a5e04906706def6115dac67153ed3d0f2a5e80aaf978f0868484de8
|
7
|
+
data.tar.gz: fb638bccbcc5b1ddd9ea6c9ce46df79c4019f44bf342571f800f21313ef6b93f1a46c1f17c9ce120dc945ac9910b88d79b259af767dd725f2f79463f49c2d2bb
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
changelog
|
2
2
|
===========
|
3
3
|
|
4
|
+
|
5
|
+
Version 1.1.0 (2016/12/24)
|
6
|
+
-----------------------------
|
7
|
+
|
8
|
+
* Support JRuby [#170](https://github.com/tmm1/pygments.rb/pull/170)
|
9
|
+
* Make pygments.rb thread safe [#171](https://github.com/tmm1/pygments.rb/pull/171)
|
10
|
+
|
4
11
|
Version 1.0.0 (2016/12/11)
|
5
12
|
-----------------------------
|
6
13
|
|
data/circle.yml
CHANGED
@@ -1,7 +1,20 @@
|
|
1
1
|
machine:
|
2
2
|
ruby:
|
3
3
|
version: 2.3.1
|
4
|
+
java:
|
5
|
+
version: oraclejdk8
|
6
|
+
environment:
|
7
|
+
JRUBY_OPTS: '--dev --debug'
|
8
|
+
JRUBY: jruby-9.1.6.0
|
9
|
+
|
10
|
+
dependencies:
|
11
|
+
pre:
|
12
|
+
- echo rvm_autoupdate_flag=0 >> ~/.rvmrc
|
13
|
+
- rvm install $JRUBY
|
14
|
+
post:
|
15
|
+
- rvm-exec $JRUBY bundle install
|
4
16
|
|
5
17
|
test:
|
6
18
|
override:
|
19
|
+
- rvm-exec $JRUBY bundle exec rake test
|
7
20
|
- bundle exec rake test
|
data/lib/pygments.rb
CHANGED
@@ -1,8 +1,33 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'pygments/popen')
|
2
|
-
|
2
|
+
require 'forwardable'
|
3
3
|
|
4
4
|
module Pygments
|
5
|
-
extend Pygments::Popen
|
6
5
|
|
7
6
|
autoload :Lexer, 'pygments/lexer'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
def engine
|
12
|
+
Thread.current.thread_variable_get(:pygments_engine) ||
|
13
|
+
Thread.current.thread_variable_set(:pygments_engine, Pygments::Popen.new)
|
14
|
+
end
|
15
|
+
|
16
|
+
def_delegators :engine,
|
17
|
+
# public
|
18
|
+
:formatters,
|
19
|
+
:lexers,
|
20
|
+
:lexers!,
|
21
|
+
:filters,
|
22
|
+
:styles,
|
23
|
+
:css,
|
24
|
+
:lexer_name_for,
|
25
|
+
:highlight,
|
26
|
+
# not public but documented
|
27
|
+
:start,
|
28
|
+
# only for testing
|
29
|
+
:size_check,
|
30
|
+
:get_fixed_bits_from_header,
|
31
|
+
:add_ids
|
32
|
+
end
|
8
33
|
end
|
data/lib/pygments/popen.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require '
|
3
|
-
require '
|
2
|
+
require 'open3'
|
3
|
+
require 'multi_json'
|
4
4
|
require 'timeout'
|
5
5
|
require 'logger'
|
6
6
|
require 'time'
|
@@ -12,9 +12,12 @@ end
|
|
12
12
|
# Pygments provides access to the Pygments library via a pipe and a long-running
|
13
13
|
# Python process.
|
14
14
|
module Pygments
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
class Popen
|
16
|
+
|
17
|
+
def popen4(cmd)
|
18
|
+
stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
|
19
|
+
[wait_thr[:pid], stdin, stdout, stderr]
|
20
|
+
end
|
18
21
|
|
19
22
|
# Get things started by opening a pipe to mentos (the freshmaker), a
|
20
23
|
# Python process that talks to the Pygments library. We'll talk back and
|
@@ -262,7 +265,7 @@ module Pygments
|
|
262
265
|
|
263
266
|
kwargs.freeze
|
264
267
|
kwargs = kwargs.merge("fd" => @out.to_i, "id" => id, "bytes" => bytesize)
|
265
|
-
out_header =
|
268
|
+
out_header = MultiJson.dump(:method => method, :args => args, :kwargs => kwargs)
|
266
269
|
|
267
270
|
# Get the size of the header itself and write that.
|
268
271
|
bits = get_fixed_bits_from_header(out_header)
|
@@ -322,12 +325,12 @@ module Pygments
|
|
322
325
|
def handle_header_and_return(header, id)
|
323
326
|
if header
|
324
327
|
header = header_to_json(header)
|
325
|
-
bytes = header[
|
328
|
+
bytes = header[:bytes]
|
326
329
|
|
327
330
|
# Read more bytes (the actual response body)
|
328
331
|
res = @out.read(bytes.to_i)
|
329
332
|
|
330
|
-
if header[
|
333
|
+
if header[:method] == "highlight"
|
331
334
|
# Make sure we have a result back; else consider this an error.
|
332
335
|
if res.nil?
|
333
336
|
@log.warn "No highlight result back from mentos."
|
@@ -423,7 +426,7 @@ module Pygments
|
|
423
426
|
# want them, text otherwise.
|
424
427
|
def return_result(res, method)
|
425
428
|
unless method == :lexer_name_for || method == :highlight || method == :css
|
426
|
-
res =
|
429
|
+
res = MultiJson.load(res, :symbolize_keys => true)
|
427
430
|
end
|
428
431
|
res = res.rstrip if res.class == String
|
429
432
|
res
|
@@ -432,14 +435,14 @@ module Pygments
|
|
432
435
|
# Convert a text header into JSON for easy access.
|
433
436
|
def header_to_json(header)
|
434
437
|
@log.info "[In header: #{header} "
|
435
|
-
header =
|
438
|
+
header = MultiJson.load(header, :symbolize_keys => true)
|
436
439
|
|
437
|
-
if header[
|
440
|
+
if header[:error]
|
438
441
|
# Raise this as a Ruby exception of the MentosError class.
|
439
442
|
# Stop so we don't leave the pipe in an inconsistent state.
|
440
443
|
@log.error "Failed to convert header to JSON."
|
441
|
-
stop header[
|
442
|
-
raise MentosError, header[
|
444
|
+
stop header[:error]
|
445
|
+
raise MentosError, header[:error]
|
443
446
|
else
|
444
447
|
header
|
445
448
|
end
|
data/lib/pygments/version.rb
CHANGED
data/pygments.rb.gemspec
CHANGED
@@ -14,8 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.email = ['aman@tmm1.net']
|
15
15
|
s.license = 'MIT'
|
16
16
|
|
17
|
-
s.add_dependency '
|
18
|
-
s.add_dependency 'posix-spawn', '~> 0.3.6'
|
17
|
+
s.add_dependency 'multi_json', '>= 1.0.0'
|
19
18
|
s.add_development_dependency 'rake-compiler', '~> 0.7.6'
|
20
19
|
s.add_development_dependency 'test-unit', '~> 3.0.0'
|
21
20
|
|
data/test/test_pygments.rb
CHANGED
@@ -111,6 +111,17 @@ class PygmentsHighlightTest < Test::Unit::TestCase
|
|
111
111
|
code = P.highlight("importr python; wat?", :lexer => 'py')
|
112
112
|
assert_match ">importr</span>", code
|
113
113
|
end
|
114
|
+
|
115
|
+
def test_highlight_on_multi_threads
|
116
|
+
10.times.map do
|
117
|
+
Thread.new do
|
118
|
+
test_full_html_highlight
|
119
|
+
end
|
120
|
+
end.each do |thread|
|
121
|
+
thread.join
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
114
125
|
end
|
115
126
|
|
116
127
|
# Philosophically, I'm not the biggest fan of testing private
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pygments.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aman Gupta
|
@@ -9,36 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-12-
|
12
|
+
date: 2016-12-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: multi_json
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 1.0.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '1.2'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: posix-spawn
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 0.3.6
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
25
|
+
- - ">="
|
40
26
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
27
|
+
version: 1.0.0
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
29
|
name: rake-compiler
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|