review 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +90 -66
  3. data/.travis.yml +1 -1
  4. data/Gemfile +0 -1
  5. data/NEWS.ja.md +82 -0
  6. data/NEWS.md +83 -0
  7. data/README.md +5 -3
  8. data/Rakefile +8 -8
  9. data/bin/review +1 -5
  10. data/bin/review-catalog-converter +22 -27
  11. data/bin/review-check +36 -43
  12. data/bin/review-checkdep +10 -15
  13. data/bin/review-compile +37 -55
  14. data/bin/review-epubmaker +4 -5
  15. data/bin/review-index +21 -29
  16. data/bin/review-init +26 -37
  17. data/bin/review-pdfmaker +0 -2
  18. data/bin/review-preproc +25 -45
  19. data/bin/review-validate +19 -18
  20. data/bin/review-vol +15 -27
  21. data/doc/config.yml.sample +5 -2
  22. data/doc/format.ja.md +20 -1
  23. data/doc/format.md +21 -5
  24. data/doc/images/review-generate.png +0 -0
  25. data/lib/epubmaker.rb +1 -3
  26. data/lib/epubmaker/content.rb +24 -27
  27. data/lib/epubmaker/epubcommon.rb +135 -148
  28. data/lib/epubmaker/epubv2.rb +39 -46
  29. data/lib/epubmaker/epubv3.rb +93 -103
  30. data/lib/epubmaker/producer.rb +138 -151
  31. data/lib/epubmaker/zip_exporter.rb +21 -26
  32. data/lib/review/book.rb +3 -6
  33. data/lib/review/book/base.rb +78 -103
  34. data/lib/review/book/chapter.rb +36 -40
  35. data/lib/review/book/compilable.rb +28 -31
  36. data/lib/review/book/image_finder.rb +6 -13
  37. data/lib/review/book/index.rb +100 -121
  38. data/lib/review/book/page_metric.rb +2 -7
  39. data/lib/review/book/part.rb +18 -20
  40. data/lib/review/book/volume.rb +9 -13
  41. data/lib/review/builder.rb +81 -116
  42. data/lib/review/catalog.rb +15 -19
  43. data/lib/review/compiler.rb +64 -83
  44. data/lib/review/configure.rb +87 -97
  45. data/lib/review/converter.rb +2 -7
  46. data/lib/review/epubbuilder.rb +1 -3
  47. data/lib/review/epubmaker.rb +213 -205
  48. data/lib/review/exception.rb +2 -4
  49. data/lib/review/extentions.rb +0 -1
  50. data/lib/review/extentions/hash.rb +2 -2
  51. data/lib/review/extentions/string.rb +5 -30
  52. data/lib/review/htmlbuilder.rb +320 -375
  53. data/lib/review/htmltoc.rb +4 -7
  54. data/lib/review/htmlutils.rb +29 -32
  55. data/lib/review/i18n.rb +33 -44
  56. data/lib/review/i18n.yml +3 -3
  57. data/lib/review/idgxmlbuilder.rb +309 -345
  58. data/lib/review/latexbuilder.rb +175 -212
  59. data/lib/review/latexindex.rb +2 -8
  60. data/lib/review/latexutils.rb +33 -43
  61. data/lib/review/lineinput.rb +1 -1
  62. data/lib/review/logger.rb +21 -0
  63. data/lib/review/makerhelper.rb +1 -4
  64. data/lib/review/markdownbuilder.rb +44 -53
  65. data/lib/review/md2inaobuilder.rb +6 -12
  66. data/lib/review/pdfmaker.rb +143 -173
  67. data/lib/review/preprocessor.rb +64 -101
  68. data/lib/review/rstbuilder.rb +126 -158
  69. data/lib/review/sec_counter.rb +18 -34
  70. data/lib/review/template.rb +4 -5
  71. data/lib/review/textbuilder.rb +2 -3
  72. data/lib/review/textutils.rb +7 -13
  73. data/lib/review/tocparser.rb +31 -56
  74. data/lib/review/tocprinter.rb +26 -52
  75. data/lib/review/topbuilder.rb +219 -247
  76. data/lib/review/unfold.rb +15 -24
  77. data/lib/review/version.rb +1 -1
  78. data/lib/review/webmaker.rb +75 -99
  79. data/lib/review/webtocprinter.rb +15 -20
  80. data/lib/review/yamlloader.rb +13 -15
  81. data/review.gemspec +20 -22
  82. data/templates/latex/layout.tex.erb +2 -2
  83. data/templates/opf/epubv2.opf.erb +7 -7
  84. data/templates/opf/epubv3.opf.erb +7 -7
  85. data/templates/web/html/layout-html5.html.erb +2 -2
  86. data/test/assets/black.eps +280 -0
  87. data/test/assets/fit.png +0 -0
  88. data/test/assets/large.gif +0 -0
  89. data/test/assets/large.jpg +0 -0
  90. data/test/assets/large.png +0 -0
  91. data/test/assets/large.svg +65 -0
  92. data/test/assets/test_template.tex +1 -1
  93. data/test/book_test_helper.rb +2 -2
  94. data/test/run_test.rb +4 -4
  95. data/test/sample-book/src/Rakefile +21 -22
  96. data/test/syntax-book/Gemfile +4 -0
  97. data/test/syntax-book/Rakefile +72 -0
  98. data/test/syntax-book/appA.re +22 -0
  99. data/test/syntax-book/bib.re +6 -0
  100. data/test/syntax-book/catalog.yml +15 -0
  101. data/test/syntax-book/ch01.re +136 -0
  102. data/test/syntax-book/ch02.re +351 -0
  103. data/test/syntax-book/ch03.re +82 -0
  104. data/test/syntax-book/config.yml +35 -0
  105. data/test/syntax-book/images/ball.png +0 -0
  106. data/test/syntax-book/images/cover.jpg +0 -0
  107. data/test/syntax-book/images/fractal.png +0 -0
  108. data/test/syntax-book/images/img3-1.png +0 -0
  109. data/test/syntax-book/images/inlineicon.jpg +0 -0
  110. data/test/syntax-book/images/logic.png +0 -0
  111. data/test/syntax-book/images/logic2.png +0 -0
  112. data/test/syntax-book/images/puzzle.jpg +0 -0
  113. data/test/syntax-book/images/table.jpg +0 -0
  114. data/test/syntax-book/part2.re +6 -0
  115. data/test/syntax-book/pre01.re +26 -0
  116. data/test/syntax-book/review-ext.rb +14 -0
  117. data/test/syntax-book/sty/jumoline.sty +310 -0
  118. data/test/syntax-book/sty/reviewmacro.sty +39 -0
  119. data/test/syntax-book/style.css +494 -0
  120. data/test/syntax-book/syntax.dic +2 -0
  121. data/test/test_book.rb +106 -111
  122. data/test/test_book_chapter.rb +21 -22
  123. data/test/test_book_part.rb +3 -5
  124. data/test/test_builder.rb +11 -22
  125. data/test/test_catalog.rb +17 -18
  126. data/test/test_catalog_converter_cmd.rb +5 -5
  127. data/test/test_compiler.rb +18 -16
  128. data/test/test_configure.rb +35 -38
  129. data/test/test_converter.rb +3 -4
  130. data/test/test_epub3maker.rb +136 -117
  131. data/test/test_epubmaker.rb +107 -114
  132. data/test/test_epubmaker_cmd.rb +2 -4
  133. data/test/test_extentions_hash.rb +32 -33
  134. data/test/test_helper.rb +9 -11
  135. data/test/test_htmlbuilder.rb +454 -420
  136. data/test/test_htmltoc.rb +8 -12
  137. data/test/test_htmlutils.rb +0 -2
  138. data/test/test_i18n.rb +159 -150
  139. data/test/test_idgxmlbuilder.rb +190 -197
  140. data/test/test_image_finder.rb +21 -22
  141. data/test/test_index.rb +24 -29
  142. data/test/test_latexbuilder.rb +274 -264
  143. data/test/test_lineinput.rb +7 -10
  144. data/test/test_location.rb +7 -7
  145. data/test/test_makerhelper.rb +13 -25
  146. data/test/test_markdownbuilder.rb +23 -26
  147. data/test/test_md2inaobuilder.rb +8 -11
  148. data/test/test_pdfmaker.rb +114 -123
  149. data/test/test_pdfmaker_cmd.rb +1 -3
  150. data/test/test_review_ext.rb +3 -5
  151. data/test/test_rstbuilder.rb +92 -97
  152. data/test/test_template.rb +3 -7
  153. data/test/test_textutils.rb +27 -27
  154. data/test/test_tocparser.rb +2 -2
  155. data/test/test_topbuilder.rb +98 -103
  156. data/test/test_webtocprinter.rb +5 -6
  157. data/test/test_yamlloader.rb +42 -42
  158. data/test/test_zip_exporter.rb +12 -18
  159. metadata +86 -9
  160. data/lib/review/ewbbuilder.rb +0 -382
@@ -17,30 +17,28 @@ module ReVIEW
17
17
 
18
18
  loop do
19
19
  # Check exit condition
20
- if file_queue.empty?
21
- return yaml
22
- end
20
+ return yaml if file_queue.empty?
23
21
 
24
22
  current_file = file_queue.shift
25
23
  current_yaml = YAML.load_file(current_file)
26
24
  yaml = current_yaml.deep_merge(yaml)
27
25
 
28
- if yaml.key?('inherit')
29
- buf = []
30
- yaml['inherit'].reverse_each do |item|
31
- inherit_file = File.expand_path(item, File.dirname(yamlfile))
26
+ next unless yaml.key?('inherit')
32
27
 
33
- # Check loop
34
- if loaded_files[inherit_file]
35
- raise "Found circular YAML inheritance '#{inherit_file}' in #{yamlfile}."
36
- end
28
+ buf = []
29
+ yaml['inherit'].reverse_each do |item|
30
+ inherit_file = File.expand_path(item, File.dirname(yamlfile))
37
31
 
38
- loaded_files[inherit_file] = true
39
- buf << inherit_file
32
+ # Check loop
33
+ if loaded_files[inherit_file]
34
+ raise "Found circular YAML inheritance '#{inherit_file}' in #{yamlfile}."
40
35
  end
41
- yaml.delete('inherit')
42
- file_queue = buf + file_queue
36
+
37
+ loaded_files[inherit_file] = true
38
+ buf << inherit_file
43
39
  end
40
+ yaml.delete('inherit')
41
+ file_queue = buf + file_queue
44
42
  end
45
43
  end
46
44
  end
@@ -1,33 +1,31 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- $:.push File.expand_path("../lib", __FILE__)
4
- require "review/version"
1
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
+ require 'review/version'
5
3
 
6
4
  Gem::Specification.new do |gem|
7
- gem.name = "review"
5
+ gem.name = 'review'
8
6
  gem.version = ReVIEW::VERSION
9
7
  gem.platform = Gem::Platform::RUBY
10
- gem.license = "LGPL"
11
- gem.authors = ["kmuto", "takahashim"]
12
- gem.email = "kmuto@debian.org"
13
- gem.homepage = "http://github.com/kmuto/review"
14
- gem.summary = "Re:VIEW: a easy-to-use digital publishing system"
15
- gem.description = "Re:VIEW is a digital publishing system for books and ebooks. It supports InDesign, EPUB and LaTeX."
16
- gem.required_rubygems_version = Gem::Requirement.new(">= 0") if gem.respond_to? :required_rubygems_version=
17
- gem.date = "2016-04-29"
8
+ gem.license = 'LGPL'
9
+ gem.authors = %w[kmuto takahashim]
10
+ gem.email = 'kmuto@debian.org'
11
+ gem.homepage = 'http://github.com/kmuto/review'
12
+ gem.summary = 'Re:VIEW: a easy-to-use digital publishing system'
13
+ gem.description = 'Re:VIEW is a digital publishing system for books and ebooks. It supports InDesign, EPUB and LaTeX.'
14
+ gem.required_rubygems_version = Gem::Requirement.new('>= 0') if gem.respond_to? :required_rubygems_version=
15
+ gem.date = '2017-06-29'
18
16
 
19
17
  gem.files = `git ls-files`.split("\n")
20
18
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
22
20
  gem.extra_rdoc_files = [
23
21
  ]
24
- gem.require_paths = ["lib"]
22
+ gem.require_paths = ['lib']
25
23
 
26
- gem.add_dependency("rubyzip")
27
- gem.add_dependency("rouge")
28
- gem.add_development_dependency("rake")
29
- gem.add_development_dependency("test-unit")
30
- gem.add_development_dependency("pygments.rb")
31
- gem.add_development_dependency("rubocop")
24
+ gem.add_dependency('image_size')
25
+ gem.add_dependency('rouge')
26
+ gem.add_dependency('rubyzip')
27
+ gem.add_development_dependency('pygments.rb')
28
+ gem.add_development_dependency('rake')
29
+ gem.add_development_dependency('rubocop')
30
+ gem.add_development_dependency('test-unit')
32
31
  end
33
-
@@ -11,7 +11,7 @@
11
11
  \usepackage{caption}
12
12
  \usepackage{suffix}
13
13
  \usepackage[T1]{fontenc}\usepackage{textcomp}%T1/TS1
14
- % \usepackage{lmodern}
14
+ \usepackage{lmodern}
15
15
  \usepackage[dvipdfmx]{graphicx}
16
16
  \usepackage[dvipdfmx,table]{xcolor}%requires colortbl, array
17
17
  \usepackage{framed}
@@ -312,7 +312,7 @@
312
312
  <%= @input_files["PREDEF"] %>
313
313
 
314
314
  <%- if @config["toc"] -%>
315
- \setcounter{tocdepth}{<%= @config["toclevel"] %>}
315
+ \setcounter{tocdepth}{<%= @config["toclevel"] - 1 %>}
316
316
  \tableofcontents
317
317
  <%- end -%>
318
318
 
@@ -7,15 +7,15 @@
7
7
  <%= @opf_manifest %>
8
8
  <%= @opf_toc %>
9
9
  <guide>
10
- <reference type="cover" title="<%= @producer.res.v("covertitle") %>" href="<%= @producer.params["cover"] %>"/>
11
- <% if @producer.params["titlepage"].present? %>
12
- <reference type="title-page" title="<%= @producer.res.v("titlepagetitle") %>" href="titlepage.<%= @producer.params["htmlext"] %>"/>
10
+ <reference type="cover" title="<%= @producer.res.v('covertitle') %>" href="<%= @producer.config['cover'] %>"/>
11
+ <% if @producer.config['titlepage'].present? %>
12
+ <reference type="title-page" title="<%= @producer.res.v('titlepagetitle') %>" href="titlepage.<%= @producer.config['htmlext'] %>"/>
13
13
  <% end %>
14
- <% if @producer.params["mytoc"].present? %>
15
- <reference type="toc" title="<%= @producer.res.v("toctitle") %>" href="<%= @producer.params["bookname"] %>-toc.<%= @producer.params["htmlext"] %>"/>
14
+ <% if @producer.config['mytoc'].present? %>
15
+ <reference type="toc" title="<%= @producer.res.v('toctitle') %>" href="<%= @producer.config['bookname'] %>-toc.<%= @producer.config['htmlext'] %>"/>
16
16
  <% end %>
17
- <% if @producer.params["colophon"].present? %>
18
- <reference type="colophon" title="<%= @producer.res.v("colophontitle") %>" href="colophon.<%= @producer.params["htmlext"] %>"/>
17
+ <% if @producer.config['colophon'].present? %>
18
+ <reference type="colophon" title="<%= @producer.res.v('colophontitle') %>" href="colophon.<%= @producer.config['htmlext'] %>"/>
19
19
  <% end %>
20
20
  </guide>
21
21
  </package>
@@ -1,18 +1,18 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="<%= @producer.params["language"] %>"<%= @package_attrs %>>
2
+ <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="<%= @producer.config['language'] %>"<%= @package_attrs %>>
3
3
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
4
4
  <%= @opf_metainfo %>
5
5
  </metadata>
6
6
  <%= @opf_manifest %>
7
7
  <%= @opf_toc %>
8
8
  <guide>
9
- <reference type="cover" title="<%= @producer.res.v("covertitle") %>" href="<%= @producer.params["cover"] %>"/>
10
- <% if @producer.params["titlepage"].present? %>
11
- <reference type="title-page" title="<%= @producer.res.v("titlepagetitle") %>" href="titlepage.<%= @producer.params["htmlext"] %>"/>
9
+ <reference type="cover" title="<%= @producer.res.v('covertitle') %>" href="<%= @producer.config['cover'] %>"/>
10
+ <% if @producer.config["titlepage"].present? %>
11
+ <reference type="title-page" title="<%= @producer.res.v('titlepagetitle') %>" href="titlepage.<%= @producer.config['htmlext'] %>"/>
12
12
  <% end %>
13
- <reference type="toc" title="<%= @producer.res.v("toctitle") %>" href="<%= @producer.params["bookname"] %>-toc.<%= @producer.params["htmlext"] %>"/>
14
- <% if @producer.params["colophon"].present? %>
15
- <reference type="colophon" title="<%= @producer.res.v("colophontitle") %>" href="colophon.<%= @producer.params["htmlext"] %>"/>
13
+ <reference type="toc" title="<%= @producer.res.v('toctitle') %>" href="<%= @producer.config['bookname'] %>-toc.<%= @producer.config['htmlext'] %>"/>
14
+ <% if @producer.config['colophon'].present? %>
15
+ <reference type="colophon" title="<%= @producer.res.v('colophontitle') %>" href="colophon.<%= @producer.config['htmlext'] %>"/>
16
16
  <% end %>
17
17
  </guide>
18
18
  </package>
@@ -11,12 +11,12 @@
11
11
  <% if @next.present? %><link rel="next" title="<%= h(@next_title)%>" href="<%= h(@next.id.to_s+"."+@book.config['htmlext']) %>"><% end %>
12
12
  <% if @prev.present? %><link rel="prev" title="<%= h(@prev_title)%>" href="<%= h(@prev.id.to_s+"."+@book.config['htmlext']) %>"><% end %>
13
13
  <meta name="generator" content="Re:VIEW" />
14
- <title><%=h @title %> | <%=h @book.config["booktitle"]%></title>
14
+ <title><%=h @title %> | <%=h @book.config.name_of("booktitle")%></title>
15
15
  </head>
16
16
  <body<%= @body_ext %>>
17
17
  <div class="book">
18
18
  <nav class="side-content">
19
- <h1><%=h @book.config["booktitle"] %></h1>
19
+ <h1><%=h @book.config.name_of("booktitle") %></h1>
20
20
  <%= @toc %>
21
21
  <p class="review-signature">powered by <a href="http://reviewml.org/">Re:VIEW</a></p>
22
22
  </nav>
@@ -0,0 +1,280 @@
1
+ %!PS-Adobe-3.0 EPSF-3.0
2
+ %%Creator: (ImageMagick)
3
+ %%Title: (test/assets/black.eps)
4
+ %%CreationDate: (2017-08-12T22:40:26+09:00)
5
+ %%BoundingBox: -0 -0 10 10
6
+ %%HiResBoundingBox: 0 0 10 10
7
+ %%DocumentData: Clean7Bit
8
+ %%LanguageLevel: 1
9
+ %%Pages: 1
10
+ %%EndComments
11
+
12
+ %%BeginDefaults
13
+ %%EndDefaults
14
+
15
+ %%BeginProlog
16
+ %
17
+ % Display a color image. The image is displayed in color on
18
+ % Postscript viewers or printers that support color, otherwise
19
+ % it is displayed as grayscale.
20
+ %
21
+ /DirectClassPacket
22
+ {
23
+ %
24
+ % Get a DirectClass packet.
25
+ %
26
+ % Parameters:
27
+ % red.
28
+ % green.
29
+ % blue.
30
+ % length: number of pixels minus one of this color (optional).
31
+ %
32
+ currentfile color_packet readhexstring pop pop
33
+ compression 0 eq
34
+ {
35
+ /number_pixels 3 def
36
+ }
37
+ {
38
+ currentfile byte readhexstring pop 0 get
39
+ /number_pixels exch 1 add 3 mul def
40
+ } ifelse
41
+ 0 3 number_pixels 1 sub
42
+ {
43
+ pixels exch color_packet putinterval
44
+ } for
45
+ pixels 0 number_pixels getinterval
46
+ } bind def
47
+
48
+ /DirectClassImage
49
+ {
50
+ %
51
+ % Display a DirectClass image.
52
+ %
53
+ systemdict /colorimage known
54
+ {
55
+ columns rows 8
56
+ [
57
+ columns 0 0
58
+ rows neg 0 rows
59
+ ]
60
+ { DirectClassPacket } false 3 colorimage
61
+ }
62
+ {
63
+ %
64
+ % No colorimage operator; convert to grayscale.
65
+ %
66
+ columns rows 8
67
+ [
68
+ columns 0 0
69
+ rows neg 0 rows
70
+ ]
71
+ { GrayDirectClassPacket } image
72
+ } ifelse
73
+ } bind def
74
+
75
+ /GrayDirectClassPacket
76
+ {
77
+ %
78
+ % Get a DirectClass packet; convert to grayscale.
79
+ %
80
+ % Parameters:
81
+ % red
82
+ % green
83
+ % blue
84
+ % length: number of pixels minus one of this color (optional).
85
+ %
86
+ currentfile color_packet readhexstring pop pop
87
+ color_packet 0 get 0.299 mul
88
+ color_packet 1 get 0.587 mul add
89
+ color_packet 2 get 0.114 mul add
90
+ cvi
91
+ /gray_packet exch def
92
+ compression 0 eq
93
+ {
94
+ /number_pixels 1 def
95
+ }
96
+ {
97
+ currentfile byte readhexstring pop 0 get
98
+ /number_pixels exch 1 add def
99
+ } ifelse
100
+ 0 1 number_pixels 1 sub
101
+ {
102
+ pixels exch gray_packet put
103
+ } for
104
+ pixels 0 number_pixels getinterval
105
+ } bind def
106
+
107
+ /GrayPseudoClassPacket
108
+ {
109
+ %
110
+ % Get a PseudoClass packet; convert to grayscale.
111
+ %
112
+ % Parameters:
113
+ % index: index into the colormap.
114
+ % length: number of pixels minus one of this color (optional).
115
+ %
116
+ currentfile byte readhexstring pop 0 get
117
+ /offset exch 3 mul def
118
+ /color_packet colormap offset 3 getinterval def
119
+ color_packet 0 get 0.299 mul
120
+ color_packet 1 get 0.587 mul add
121
+ color_packet 2 get 0.114 mul add
122
+ cvi
123
+ /gray_packet exch def
124
+ compression 0 eq
125
+ {
126
+ /number_pixels 1 def
127
+ }
128
+ {
129
+ currentfile byte readhexstring pop 0 get
130
+ /number_pixels exch 1 add def
131
+ } ifelse
132
+ 0 1 number_pixels 1 sub
133
+ {
134
+ pixels exch gray_packet put
135
+ } for
136
+ pixels 0 number_pixels getinterval
137
+ } bind def
138
+
139
+ /PseudoClassPacket
140
+ {
141
+ %
142
+ % Get a PseudoClass packet.
143
+ %
144
+ % Parameters:
145
+ % index: index into the colormap.
146
+ % length: number of pixels minus one of this color (optional).
147
+ %
148
+ currentfile byte readhexstring pop 0 get
149
+ /offset exch 3 mul def
150
+ /color_packet colormap offset 3 getinterval def
151
+ compression 0 eq
152
+ {
153
+ /number_pixels 3 def
154
+ }
155
+ {
156
+ currentfile byte readhexstring pop 0 get
157
+ /number_pixels exch 1 add 3 mul def
158
+ } ifelse
159
+ 0 3 number_pixels 1 sub
160
+ {
161
+ pixels exch color_packet putinterval
162
+ } for
163
+ pixels 0 number_pixels getinterval
164
+ } bind def
165
+
166
+ /PseudoClassImage
167
+ {
168
+ %
169
+ % Display a PseudoClass image.
170
+ %
171
+ % Parameters:
172
+ % class: 0-PseudoClass or 1-Grayscale.
173
+ %
174
+ currentfile buffer readline pop
175
+ token pop /class exch def pop
176
+ class 0 gt
177
+ {
178
+ currentfile buffer readline pop
179
+ token pop /depth exch def pop
180
+ /grays columns 8 add depth sub depth mul 8 idiv string def
181
+ columns rows depth
182
+ [
183
+ columns 0 0
184
+ rows neg 0 rows
185
+ ]
186
+ { currentfile grays readhexstring pop } image
187
+ }
188
+ {
189
+ %
190
+ % Parameters:
191
+ % colors: number of colors in the colormap.
192
+ % colormap: red, green, blue color packets.
193
+ %
194
+ currentfile buffer readline pop
195
+ token pop /colors exch def pop
196
+ /colors colors 3 mul def
197
+ /colormap colors string def
198
+ currentfile colormap readhexstring pop pop
199
+ systemdict /colorimage known
200
+ {
201
+ columns rows 8
202
+ [
203
+ columns 0 0
204
+ rows neg 0 rows
205
+ ]
206
+ { PseudoClassPacket } false 3 colorimage
207
+ }
208
+ {
209
+ %
210
+ % No colorimage operator; convert to grayscale.
211
+ %
212
+ columns rows 8
213
+ [
214
+ columns 0 0
215
+ rows neg 0 rows
216
+ ]
217
+ { GrayPseudoClassPacket } image
218
+ } ifelse
219
+ } ifelse
220
+ } bind def
221
+
222
+ /DisplayImage
223
+ {
224
+ %
225
+ % Display a DirectClass or PseudoClass image.
226
+ %
227
+ % Parameters:
228
+ % x & y translation.
229
+ % x & y scale.
230
+ % label pointsize.
231
+ % image label.
232
+ % image columns & rows.
233
+ % class: 0-DirectClass or 1-PseudoClass.
234
+ % compression: 0-none or 1-RunlengthEncoded.
235
+ % hex color packets.
236
+ %
237
+ gsave
238
+ /buffer 512 string def
239
+ /byte 1 string def
240
+ /color_packet 3 string def
241
+ /pixels 768 string def
242
+
243
+ currentfile buffer readline pop
244
+ token pop /x exch def
245
+ token pop /y exch def pop
246
+ x y translate
247
+ currentfile buffer readline pop
248
+ token pop /x exch def
249
+ token pop /y exch def pop
250
+ currentfile buffer readline pop
251
+ token pop /pointsize exch def pop
252
+ x y scale
253
+ currentfile buffer readline pop
254
+ token pop /columns exch def
255
+ token pop /rows exch def pop
256
+ currentfile buffer readline pop
257
+ token pop /class exch def pop
258
+ currentfile buffer readline pop
259
+ token pop /compression exch def pop
260
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
261
+ grestore
262
+ } bind def
263
+ %%EndProlog
264
+ %%Page: 1 1
265
+ %%PageBoundingBox: 0 0 10 10
266
+ userdict begin
267
+ DisplayImage
268
+ 0 0
269
+ 10 10
270
+ 12
271
+ 10 10
272
+ 1
273
+ 1
274
+ 1
275
+ 1
276
+ 0000000000000000000000000000000000000000
277
+ end
278
+ %%PageTrailer
279
+ %%Trailer
280
+ %%EOF