origen_doc_helpers 0.8.0 → 0.8.5
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/config/application.rb +1 -1
- data/config/version.rb +1 -2
- data/lib/origen_doc_helpers/flow_page_generator.rb +15 -3
- data/lib/origen_doc_helpers/guide_index.rb +1 -1
- data/lib/origen_doc_helpers/helpers.rb +15 -3
- data/lib/origen_doc_helpers/html_flow_formatter.rb +6 -2
- data/lib/origen_doc_helpers/list_flow_formatter.rb +6 -2
- data/lib/origen_doc_helpers/model_page_generator.rb +21 -4
- data/lib/origen_doc_helpers/pdf.rb +10 -2
- data/templates/model_index.md.erb +1 -1
- data/templates/model_page.md.erb +1 -1
- data/templates/web/helpers.md.erb +1 -1
- data/templates/web/helpers/model.md.erb +5 -2
- data/templates/web/helpers/register.md.erb +1 -1
- metadata +4 -7
- data/bin/fix_my_workspace +0 -100
- data/templates/shared/_register.html.erb~ +0 -368
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40aaede1ff8ad4d6148ab8306512e8f80380f9f3682cea6077316f5a24d43092
|
4
|
+
data.tar.gz: 64f8b7f11de61649190d9d256b85bd5dd77f7f6f5f90df6ee620f1959098ec47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8984fa0e3c19a0a638b24d085f9ce304737418e7a35657c0d10a2ba94a4d614486f4b9de36403e5a5808272e6462438fb9b076610f5d1316aab4d2a607146ce7
|
7
|
+
data.tar.gz: 8924ae6bb9e10082e7c62153cfabb1615c6c367aa60e8cd74679311f74823daa9895196dd16b206279bb5dab233b09457ec3aca2f19f158562125b2d0f55fb72
|
data/config/application.rb
CHANGED
@@ -8,7 +8,7 @@ class OrigenDocHelpersApplication < Origen::Application
|
|
8
8
|
# To enable deployment of your documentation to a web server (via the 'origen web'
|
9
9
|
# command) fill in these attributes.
|
10
10
|
config.web_directory = "git@github.com:Origen-SDK/Origen-SDK.github.io.git/doc_helpers"
|
11
|
-
config.web_domain = "
|
11
|
+
config.web_domain = "https://origen-sdk.org/doc_helpers"
|
12
12
|
config.disqus_shortname = "origen-sdk"
|
13
13
|
|
14
14
|
config.semantically_version = true
|
data/config/version.rb
CHANGED
@@ -44,7 +44,11 @@ module OrigenDocHelpers
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def index_page_template
|
47
|
-
|
47
|
+
if File.exist?("#{Origen.root}/app/")
|
48
|
+
@index_page_template ||= "#{Origen.root!}/app/templates/flow_index.md.erb"
|
49
|
+
else
|
50
|
+
@index_page_template ||= "#{Origen.root!}/templates/flow_index.md.erb"
|
51
|
+
end
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -100,11 +104,19 @@ module OrigenDocHelpers
|
|
100
104
|
end
|
101
105
|
|
102
106
|
def flow_page_template
|
103
|
-
|
107
|
+
if File.exist?("#{Origen.root}/app/")
|
108
|
+
@flow_page_template ||= "#{Origen.root!}/app/templates/flow_page.md.erb"
|
109
|
+
else
|
110
|
+
@flow_page_template ||= "#{Origen.root!}/templates/flow_page.md.erb"
|
111
|
+
end
|
104
112
|
end
|
105
113
|
|
106
114
|
def flow_template
|
107
|
-
|
115
|
+
if File.exist?("#{Origen.root}/app/")
|
116
|
+
@flow_template ||= "#{Origen.root!}/app/templates/shared/test/_flow.md.erb"
|
117
|
+
else
|
118
|
+
@flow_template ||= "#{Origen.root!}/templates/shared/test/_flow.md.erb"
|
119
|
+
end
|
108
120
|
end
|
109
121
|
end
|
110
122
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module OrigenDocHelpers
|
2
2
|
# Provides an API to programatically construct an index hash as used
|
3
3
|
# by the Searchable Documents helper -
|
4
|
-
#
|
4
|
+
# https://origen-sdk.org/doc_helpers/helpers/searchable/intro/#The_Document_Index
|
5
5
|
class GuideIndex
|
6
6
|
def initialize
|
7
7
|
@index = {}
|
@@ -257,7 +257,11 @@ END
|
|
257
257
|
@_doc_root_dirs ||= {}
|
258
258
|
return @_doc_root_dirs[f] if @_doc_root_dirs[f]
|
259
259
|
unless File.exist?(f)
|
260
|
-
|
260
|
+
if File.exist?("#{Origen.root}/app/")
|
261
|
+
f = Pathname.new("#{Origen.root}/app/templates/web/#{f}")
|
262
|
+
else
|
263
|
+
f = Pathname.new("#{Origen.root}/templates/web/#{f}")
|
264
|
+
end
|
261
265
|
unless f.exist?
|
262
266
|
fail "#{options[:root]} does not exist!"
|
263
267
|
end
|
@@ -272,7 +276,11 @@ END
|
|
272
276
|
if options[:tab]
|
273
277
|
options[:tab]
|
274
278
|
else
|
275
|
-
rel =
|
279
|
+
rel = begin
|
280
|
+
options[:top_level_file].relative_path_from(_doc_root_dir(options)).sub_ext('').sub_ext('').to_s
|
281
|
+
rescue
|
282
|
+
'..'
|
283
|
+
end
|
276
284
|
# If the file lives outside of the current app (e.g. it comes from a plugin), then the above approach
|
277
285
|
# doesn't work, so let's just take the last dirname and the filename
|
278
286
|
if rel =~ /\.\./
|
@@ -285,7 +293,11 @@ END
|
|
285
293
|
end
|
286
294
|
|
287
295
|
def _root_path(options)
|
288
|
-
|
296
|
+
if File.exist?("#{Origen.root}/app/templates/web")
|
297
|
+
root = Pathname.new("#{Origen.root}/app/templates/web")
|
298
|
+
else
|
299
|
+
root = Pathname.new("#{Origen.root}/templates/web")
|
300
|
+
end
|
289
301
|
_doc_root_dir(options).relative_path_from(root)
|
290
302
|
end
|
291
303
|
end
|
@@ -1,7 +1,11 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'origen_testers/atp'
|
3
|
+
rescue LoadError
|
4
|
+
require 'atp'
|
5
|
+
end
|
2
6
|
require 'kramdown'
|
3
7
|
module OrigenDocHelpers
|
4
|
-
class HtmlFlowFormatter < ATP::Formatter
|
8
|
+
class HtmlFlowFormatter < (defined?(OrigenTesters::ATP) ? OrigenTesters::ATP::Formatter : ATP::Formatter)
|
5
9
|
include Origen::Generator::Compiler::DocHelpers::TestFlowHelpers
|
6
10
|
|
7
11
|
attr_reader :html
|
@@ -1,6 +1,10 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'origen_testers/atp'
|
3
|
+
rescue LoadError
|
4
|
+
require 'atp'
|
5
|
+
end
|
2
6
|
module OrigenDocHelpers
|
3
|
-
class ListFlowFormatter < ATP::Formatter
|
7
|
+
class ListFlowFormatter < (defined?(OrigenTesters::ATP) ? OrigenTesters::ATP::Formatter : ATP::Formatter)
|
4
8
|
attr_reader :html
|
5
9
|
|
6
10
|
def format(node, options = {})
|
@@ -4,6 +4,7 @@ module OrigenDocHelpers
|
|
4
4
|
attr_accessor :layout_options
|
5
5
|
attr_accessor :layout
|
6
6
|
attr_reader :pages
|
7
|
+
attr_accessor :target_as_id
|
7
8
|
|
8
9
|
def run(options)
|
9
10
|
@pages = {}
|
@@ -43,7 +44,11 @@ module OrigenDocHelpers
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def index_page_template
|
46
|
-
|
47
|
+
if File.exist?("#{Origen.root}/app/")
|
48
|
+
@index_page_template ||= "#{Origen.root!}/app/templates/model_index.md.erb"
|
49
|
+
else
|
50
|
+
@index_page_template ||= "#{Origen.root!}/templates/model_index.md.erb"
|
51
|
+
end
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
@@ -144,11 +149,19 @@ module OrigenDocHelpers
|
|
144
149
|
end
|
145
150
|
|
146
151
|
def id
|
147
|
-
|
152
|
+
if :target_as_id
|
153
|
+
@id ||= "#{Origen.target.name.downcase}" # _#{model.class.to_s.symbolize.to_s.gsub('::', '_')}"
|
154
|
+
else
|
155
|
+
@id ||= model.class.to_s.symbolize.to_s.gsub('::', '_')
|
156
|
+
end
|
148
157
|
end
|
149
158
|
|
150
159
|
def heading
|
151
|
-
|
160
|
+
if :target_as_id
|
161
|
+
@id.upcase
|
162
|
+
else
|
163
|
+
model.class.to_s
|
164
|
+
end
|
152
165
|
end
|
153
166
|
|
154
167
|
def output_path
|
@@ -156,7 +169,11 @@ module OrigenDocHelpers
|
|
156
169
|
end
|
157
170
|
|
158
171
|
def model_page_template
|
159
|
-
|
172
|
+
if File.exist?("#{Origen.root}/app/")
|
173
|
+
@model_page_template ||= "#{Origen.root!}/app/templates/model_page.md.erb"
|
174
|
+
else
|
175
|
+
@model_page_template ||= "#{Origen.root!}/templates/model_page.md.erb"
|
176
|
+
end
|
160
177
|
end
|
161
178
|
end
|
162
179
|
end
|
@@ -25,7 +25,11 @@ module OrigenDocHelpers
|
|
25
25
|
@index = options[:index]
|
26
26
|
@root = Pathname.new(options[:root])
|
27
27
|
if @root.absolute?
|
28
|
-
|
28
|
+
if File.exist?("#{Origen.root}/app/")
|
29
|
+
@root = @root.relative_path_from(Pathname.new("#{Origen.root}/app/templates/web"))
|
30
|
+
else
|
31
|
+
@root = @root.relative_path_from(Pathname.new("#{Origen.root}/templates/web"))
|
32
|
+
end
|
29
33
|
end
|
30
34
|
require 'nokogiri'
|
31
35
|
end
|
@@ -116,7 +120,11 @@ module OrigenDocHelpers
|
|
116
120
|
end
|
117
121
|
|
118
122
|
def topic_wrapper_string
|
119
|
-
|
123
|
+
if File.exist?("#{Origen.root}/app/")
|
124
|
+
@topic_wrapper_string ||= File.read("#{Origen.root!}/app/templates/pdf/topic_wrapper.html")
|
125
|
+
else
|
126
|
+
@topic_wrapper_string ||= File.read("#{Origen.root!}/templates/pdf/topic_wrapper.html")
|
127
|
+
end
|
120
128
|
end
|
121
129
|
end
|
122
130
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
<div class="row" style="margin-top: 10px; margin-bottom: 15px;">
|
5
5
|
<div class="col-md-9">
|
6
|
-
<img src="
|
6
|
+
<img src="https://origen-sdk.org/img/origen-device.png" style="float: left; height:50px; width: 50px; margin-top: 14px;">
|
7
7
|
<h1 style="float: left; margin-left: 10px;">Models</h1>
|
8
8
|
</div>
|
9
9
|
</div>
|
data/templates/model_page.md.erb
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
<div class="row" style="margin-top: 10px; margin-bottom: 15px;">
|
22
22
|
<div class="col-md-9">
|
23
|
-
<img src="
|
23
|
+
<img src="https://origen-sdk.org/img/origen-device.png" style="float: left; height:50px; width: 50px; margin-top: 14px;">
|
24
24
|
<h1 style="float: left; margin-left: 10px;"><%= opts[:heading] %></h1>
|
25
25
|
</div>
|
26
26
|
% if opts[:search_box]
|
@@ -16,7 +16,7 @@ These helpers will generate complete web pages for you.
|
|
16
16
|
|
17
17
|
The following are components that you can embed within your own web pages.
|
18
18
|
|
19
|
-
| [Searchable Documents](<%= path "/helpers/searchable/intro" %>) | Provides a layout for a guides section of your website, complete with search box (the [Origen Guides](
|
19
|
+
| [Searchable Documents](<%= path "/helpers/searchable/intro" %>) | Provides a layout for a guides section of your website, complete with search box (the [Origen Guides](https://origen-sdk.org/guides) uses this)
|
20
20
|
| [Register Descriptions](<%= path "/helpers/register" %>) | Create a tabular register view, similar to that used in device reference manuals
|
21
21
|
| [Yammer Comments](<%= path "/helpers/yammer" %>) | Embed a comments section at the bottom of your page using Yammer
|
22
22
|
| [Disqus Comments](<%= path "/helpers/disqus" %>) | Embed a comments section at the bottom of your page using Disqus
|
@@ -5,9 +5,9 @@
|
|
5
5
|
This helper will build a collection of web pages that document a model's attributes,
|
6
6
|
currently this includes its sub-blocks and registers.
|
7
7
|
|
8
|
-
[Here is an example](
|
8
|
+
[Here is an example](https://origen-sdk.org/link_demo/models/linkdemo_toplevel/).
|
9
9
|
|
10
|
-
Multiple models can be supplied and an [index page like this](
|
10
|
+
Multiple models can be supplied and an [index page like this](https://origen-sdk.org/link_demo/models)
|
11
11
|
is generated to help locate the documentation for a given model.
|
12
12
|
|
13
13
|
The collection of pages associated with a particular model is also fully searchable via
|
@@ -79,6 +79,9 @@ end
|
|
79
79
|
|
80
80
|
* <code>:model</code> - **Required**, supply an instance of the model
|
81
81
|
* <code>:group</code> - Optional, a heading to group similar models under on the index page, e.g. "Production", "In Development"
|
82
|
+
* <code>:target_as_id</code> - Optional, causes the target name to be used for model page headings instead of the top-level model class name,
|
83
|
+
e.g. "Eagle" instead of "MyApp::ModelA". This is particularly useful if multiple targets instantiate the same top-level model with different
|
84
|
+
options or attributes that lead to differentiation.
|
82
85
|
|
83
86
|
## Website Integration
|
84
87
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Register Helpers
|
4
4
|
|
5
|
-
Use the [Origen register API](
|
5
|
+
Use the [Origen register API](https://origen-sdk.org/origen/guides/models/registers)
|
6
6
|
to define registers in the normal way,
|
7
7
|
all of the examples are here are based on this register definition:
|
8
8
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_doc_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -31,7 +31,6 @@ executables: []
|
|
31
31
|
extensions: []
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
|
-
- bin/fix_my_workspace
|
35
34
|
- config/application.rb
|
36
35
|
- config/boot.rb
|
37
36
|
- config/commands.rb
|
@@ -57,7 +56,6 @@ files:
|
|
57
56
|
- templates/model_page.md.erb
|
58
57
|
- templates/pdf/topic_wrapper.html
|
59
58
|
- templates/shared/_register.html.erb
|
60
|
-
- templates/shared/_register.html.erb~
|
61
59
|
- templates/shared/_searchable.html.erb
|
62
60
|
- templates/shared/_spec.html.erb
|
63
61
|
- templates/shared/test/_flow.md.erb
|
@@ -78,7 +76,7 @@ files:
|
|
78
76
|
- templates/web/layouts/_helpers.html.erb
|
79
77
|
- templates/web/partials/_navbar.html.erb
|
80
78
|
- templates/web/release_notes.md.erb
|
81
|
-
homepage:
|
79
|
+
homepage: https://origen-sdk.org/doc_helpers
|
82
80
|
licenses:
|
83
81
|
- MIT
|
84
82
|
metadata: {}
|
@@ -97,8 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
95
|
- !ruby/object:Gem::Version
|
98
96
|
version: 1.8.11
|
99
97
|
requirements: []
|
100
|
-
|
101
|
-
rubygems_version: 2.7.7
|
98
|
+
rubygems_version: 3.1.4
|
102
99
|
signing_key:
|
103
100
|
specification_version: 4
|
104
101
|
summary: Snippets and helpers for creating Origen web documents
|
data/bin/fix_my_workspace
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
$VERBOSE = nil # Don't care about world writable dir warnings and the like
|
3
|
-
|
4
|
-
if $_fix_my_workspace_version_check
|
5
|
-
$_fix_my_workspace_version = '0.7.0'
|
6
|
-
else
|
7
|
-
if File.exist?(File.expand_path('../../lib/origen.rb', __FILE__))
|
8
|
-
# If this script is being run from within an origen-core workspace, use that Origen-core,
|
9
|
-
# not the system-installed origen-core version.
|
10
|
-
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
11
|
-
require 'origen'
|
12
|
-
else
|
13
|
-
# Use system-installed Origen (the gem in system Ruby)
|
14
|
-
require 'origen'
|
15
|
-
end
|
16
|
-
|
17
|
-
if !Origen.site_config.gem_manage_bundler
|
18
|
-
puts 'Sorry but you have opted to manage Bundler yourself via your Origen site config, and this means'
|
19
|
-
puts 'that I cannot make certain assumptions about how your workspace is configured.'
|
20
|
-
puts 'You will need to either resolve this problem yourself, or else change the value of'
|
21
|
-
puts 'gem_mange_bundler to true.'
|
22
|
-
puts 'See here for more details on how to do that: http://origen-sdk.org/origen/guides/starting/company/'
|
23
|
-
|
24
|
-
else
|
25
|
-
ENV['BUNDLE_GEMFILE'] = File.join(Origen.root, 'Gemfile')
|
26
|
-
ENV['BUNDLE_PATH'] = File.expand_path(Origen.site_config.gem_install_dir)
|
27
|
-
ENV['BUNDLE_BIN'] = File.join(Origen.root, 'lbin')
|
28
|
-
|
29
|
-
# Force copy system gems to local gems
|
30
|
-
if Origen.site_config.gem_use_from_system
|
31
|
-
local_gem_dir = "#{ENV['BUNDLE_PATH']}/ruby/#{Pathname.new(Gem.dir).basename}"
|
32
|
-
gem_dir = Pathname.new(Gem.dir)
|
33
|
-
|
34
|
-
Origen.site_config.gem_use_from_system.each do |gem, version|
|
35
|
-
begin
|
36
|
-
# This will raise an error if the system doesn't have this gem installed, that
|
37
|
-
# will be rescued below
|
38
|
-
spec = Gem::Specification.find_by_name(gem, version)
|
39
|
-
|
40
|
-
local_dir = File.join(local_gem_dir, Pathname.new(spec.gem_dir).relative_path_from(gem_dir))
|
41
|
-
FileUtils.mkdir_p local_dir
|
42
|
-
FileUtils.cp_r("#{spec.gem_dir}/.", local_dir)
|
43
|
-
|
44
|
-
local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.cache_file).relative_path_from(gem_dir)))
|
45
|
-
FileUtils.mkdir_p local_file.dirname
|
46
|
-
FileUtils.cp(spec.cache_file, local_file)
|
47
|
-
|
48
|
-
if spec.extension_dir && File.exist?(spec.extension_dir)
|
49
|
-
local_dir = File.join(local_gem_dir, Pathname.new(spec.extension_dir).relative_path_from(gem_dir))
|
50
|
-
FileUtils.mkdir_p local_dir
|
51
|
-
FileUtils.cp_r("#{spec.extension_dir}/.", local_dir)
|
52
|
-
end
|
53
|
-
|
54
|
-
local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.spec_file).relative_path_from(gem_dir)))
|
55
|
-
FileUtils.mkdir_p local_file.dirname
|
56
|
-
FileUtils.cp(spec.spec_file, local_file)
|
57
|
-
|
58
|
-
rescue Gem::LoadError
|
59
|
-
# This just means that one of the gems that should be copied from the system
|
60
|
-
# was not actually installed in the system, so nothing we can do about that here
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# Delete lbin
|
66
|
-
FileUtils.rm_rf(ENV['BUNDLE_BIN']) if File.exist?(ENV['BUNDLE_BIN'])
|
67
|
-
|
68
|
-
# Run bundler with correct switches
|
69
|
-
cmd = "bundle install --gemfile #{ENV['BUNDLE_GEMFILE']} --binstubs #{ENV['BUNDLE_BIN']} --path #{ENV['BUNDLE_PATH']}"
|
70
|
-
`chmod o-w #{Origen.root}` # Stops some annoying world writable warnings during install
|
71
|
-
`chmod o-w #{Origen.root}/bin` if File.exist?("#{Origen.root}/bin")
|
72
|
-
`chmod o-w #{Origen.root}/.bin` if File.exist?("#{Origen.root}/.bin")
|
73
|
-
|
74
|
-
# Try again, this time updating the bundle
|
75
|
-
if system(cmd)
|
76
|
-
fixed = true
|
77
|
-
elsif system 'bundle update'
|
78
|
-
fixed = true
|
79
|
-
end
|
80
|
-
|
81
|
-
if File.exist?(ENV['BUNDLE_BIN'])
|
82
|
-
`chmod o-w #{ENV['BUNDLE_BIN']}`
|
83
|
-
|
84
|
-
# Make .bat versions of all executables, Bundler should really be doing this when running
|
85
|
-
# on windows
|
86
|
-
if Origen.os.windows?
|
87
|
-
Dir.glob("#{ENV['BUNDLE_BIN']}/*").each do |bin|
|
88
|
-
unless bin =~ /.bat$/
|
89
|
-
bat = "#{bin}.bat"
|
90
|
-
unless File.exist?(bat)
|
91
|
-
File.open(bat, 'w') { |f| f.write('@"ruby.exe" "%~dpn0" %*') }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
system 'origen -v' if fixed
|
99
|
-
end
|
100
|
-
end
|
@@ -1,368 +0,0 @@
|
|
1
|
-
% reg = options[:reg]
|
2
|
-
% order_is_lsb0 = true
|
3
|
-
% order_is_lsb0 = false if reg.bit_order == :msb0 || reg.bit_order == 'msb0'
|
4
|
-
% include_data = false
|
5
|
-
|
6
|
-
<div class="register">
|
7
|
-
<a class="anchor" name="<%= "#{reg.name}" %>"></a>
|
8
|
-
|
9
|
-
<a href='#<%= reg.name %>'>
|
10
|
-
% if options[:origen_path] && !options[:origen_path].empty?
|
11
|
-
% reg_path = options[:origen_path] + "." + reg.name.to_s
|
12
|
-
% reg_path = "#{reg.name} - #{reg_path}"
|
13
|
-
% else
|
14
|
-
% reg_path = reg.name
|
15
|
-
% end
|
16
|
-
% if reg.full_name
|
17
|
-
<h4>0x<%= reg.address.to_s(16).upcase %> - <%= reg.full_name %> (<%= reg_path %>)</h4>
|
18
|
-
% else
|
19
|
-
<h4>0x<%= reg.address.to_s(16).upcase %> - <%= reg_path %></h4>
|
20
|
-
% end
|
21
|
-
</a>
|
22
|
-
|
23
|
-
% if options[:current_value]
|
24
|
-
% if reg.size <= 8
|
25
|
-
<h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%02X",reg.value) %></font></h4>
|
26
|
-
% elsif reg.size <= 16
|
27
|
-
<h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%04X",reg.value) %></font></h4>
|
28
|
-
% elsif reg.size <= 24
|
29
|
-
<h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%06X",reg.value) %></font></h4>
|
30
|
-
% elsif reg.size <= 32
|
31
|
-
<h4><font style="background-color: #66FF66">Current Value: <%= sprintf("0x%08X",reg.value) %></font></h4>
|
32
|
-
% end
|
33
|
-
% end
|
34
|
-
|
35
|
-
% if options[:descriptions]
|
36
|
-
<div markdown="1" style="margin: 0 0 20px 0">
|
37
|
-
|
38
|
-
% reg.description(:include_name => false).each do |line|
|
39
|
-
<%= line.gsub("\\'", "'") %>
|
40
|
-
% end
|
41
|
-
|
42
|
-
</div>
|
43
|
-
% end
|
44
|
-
|
45
|
-
% if !order_is_lsb0
|
46
|
-
<table class="reg table table-condensed ljust" style="margin-bottom: 0; table-layout: fixed;">
|
47
|
-
<thead>
|
48
|
-
<tr class="bit-positions">
|
49
|
-
<b><tr class = "heading"><%= reg_path%> <span class="msb0_specific" style="color:gray;">(<%= reg_path %>.with_msb0)</span></tr></b>
|
50
|
-
</tr>
|
51
|
-
</thead>
|
52
|
-
</table>
|
53
|
-
% end
|
54
|
-
|
55
|
-
% num_bytes = (reg.size / 8.0).ceil
|
56
|
-
% num_bytes.times do |byte_index|
|
57
|
-
% # Need to add support for little endian regs here?
|
58
|
-
% byte_number = num_bytes - byte_index
|
59
|
-
% max_bit = (byte_number * 8) - 1
|
60
|
-
% min_bit = max_bit - 8 + 1
|
61
|
-
% partial_byte = max_bit > (reg.size - 1)
|
62
|
-
|
63
|
-
<table class="reg table table-condensed <%= 'rjust' %><%= partial_byte ? ' partial' : '' %>" style="margin-bottom: 0; table-layout: fixed;">
|
64
|
-
<thead>
|
65
|
-
<tr class="bit-positions">
|
66
|
-
% if order_is_lsb0
|
67
|
-
<th class="spacer"></th>
|
68
|
-
% else
|
69
|
-
<td class="heading">LSB0<span class="msb0_specific" style="color:gray;"> (MSB0)</span></td>
|
70
|
-
% end
|
71
|
-
|
72
|
-
% 8.times do |i|
|
73
|
-
% bit_num = (byte_number * 8) - i - 1
|
74
|
-
% if bit_num > reg.size - 1
|
75
|
-
<th class="spacer"></th>
|
76
|
-
% else
|
77
|
-
% if order_is_lsb0
|
78
|
-
<th class="bit-position"><%= bit_num %></th>
|
79
|
-
% else
|
80
|
-
<th class="bit-position"><%= bit_num %><span class="msb0_specific" style="color:gray;"> (<%= reg.size - bit_num -1%>)</span></th>
|
81
|
-
% end
|
82
|
-
% end
|
83
|
-
% end
|
84
|
-
</tr>
|
85
|
-
</thead>
|
86
|
-
<tbody>
|
87
|
-
|
88
|
-
%#############################################
|
89
|
-
%# Read Row
|
90
|
-
%#############################################
|
91
|
-
<tr class="read">
|
92
|
-
% if order_is_lsb0
|
93
|
-
<td class="heading">R</td>
|
94
|
-
% else
|
95
|
-
<td class="heading"><span class="msb0_specific" style="color:gray;">[LSB0] </span>R</td>
|
96
|
-
% end
|
97
|
-
|
98
|
-
% alignment_done = false
|
99
|
-
% reg.named_bits :include_spacers => true do |name, bit|
|
100
|
-
% if _bit_in_range?(bit, max_bit, min_bit)
|
101
|
-
% if max_bit > (reg.size - 1) && !alignment_done
|
102
|
-
% (max_bit - (reg.size - 1)).times do
|
103
|
-
<td class="spacer"></td>
|
104
|
-
% end
|
105
|
-
% alignment_done = true
|
106
|
-
% end
|
107
|
-
% if bit.size > 1
|
108
|
-
% if name
|
109
|
-
% if bit.readable?
|
110
|
-
% bit_name = "#{name}[#{bit.size - 1}:0]"
|
111
|
-
<td class="<%= _bit_rw(bit) %>" colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">
|
112
|
-
% if options[:descriptions] && !bit.description.empty?
|
113
|
-
<span title="<%= name %>"><a href="#<%= "#{reg.name}_#{name}_#{bit.position}" %>"><%= bit_name %></a></span>
|
114
|
-
% else
|
115
|
-
<span title="<%= name %>"><%= bit_name %></span>
|
116
|
-
% end
|
117
|
-
</td>
|
118
|
-
% else
|
119
|
-
% if bit.access == :worz
|
120
|
-
<td class="<%= _bit_rw(bit) %>" colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">
|
121
|
-
<span>0</span>
|
122
|
-
</td>
|
123
|
-
% else
|
124
|
-
<td class="<%= _bit_rw(bit) %>" colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"></td>
|
125
|
-
% end
|
126
|
-
% end
|
127
|
-
% else
|
128
|
-
% bit.shift_out_left do |bit|
|
129
|
-
% if _index_in_range?(bit.position, max_bit, min_bit)
|
130
|
-
<td>0</td>
|
131
|
-
% end
|
132
|
-
% end
|
133
|
-
% end
|
134
|
-
% else
|
135
|
-
% if name
|
136
|
-
% if bit.readable?
|
137
|
-
% if name.size > 10
|
138
|
-
% bit_name = "#{name[0..2]}...#{name[-3..-1]}"
|
139
|
-
%# bit_name = "bit#{bit.position}*"
|
140
|
-
% else
|
141
|
-
% bit_name = name
|
142
|
-
% end
|
143
|
-
% if options[:descriptions] && !bit.description.empty?
|
144
|
-
<td class="<%= _bit_rw(bit) %>"><span title="<%= name %>"><a href="#<%= "#{reg.name}_#{name}_#{bit.position}" %>"><%= bit_name %></a></span></td>
|
145
|
-
% else
|
146
|
-
<td class="<%= _bit_rw(bit) %>"><span title="<%= name %>"><%= bit_name %></span></td>
|
147
|
-
% end
|
148
|
-
% else
|
149
|
-
<td class="<%= _bit_rw(bit) %>"></td>
|
150
|
-
% end
|
151
|
-
% else
|
152
|
-
<td>0</td>
|
153
|
-
% end
|
154
|
-
% end
|
155
|
-
% end
|
156
|
-
% end
|
157
|
-
</tr>
|
158
|
-
|
159
|
-
%#############################################
|
160
|
-
%# Write Row
|
161
|
-
%#############################################
|
162
|
-
<tr class="write">
|
163
|
-
<td class="heading">W</td>
|
164
|
-
% alignment_done = false
|
165
|
-
% reg.named_bits :include_spacers => true do |name, bit|
|
166
|
-
% if _bit_in_range?(bit, max_bit, min_bit)
|
167
|
-
% if max_bit > (reg.size - 1) && !alignment_done
|
168
|
-
% (max_bit - (reg.size - 1)).times do
|
169
|
-
<td class="spacer"></td>
|
170
|
-
% end
|
171
|
-
% alignment_done = true
|
172
|
-
% end
|
173
|
-
% if bit.size > 1
|
174
|
-
% if name
|
175
|
-
% if !bit.readable?
|
176
|
-
% bit_name = "#{name}[#{bit.size - 1}:0]"
|
177
|
-
<td class="<%= _bit_rw(bit) %>" colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">
|
178
|
-
% if options[:descriptions] && !bit.description.empty?
|
179
|
-
<span title="<%= name %>"><a href="#<%= "#{reg.name}_#{name}_#{bit.position}" %>"><%= bit_name %></a></span>
|
180
|
-
% else
|
181
|
-
<span title="<%= name %>"><%= bit_name %></span>
|
182
|
-
% end
|
183
|
-
</td>
|
184
|
-
% else
|
185
|
-
<td class="<%= _bit_rw(bit) %>" colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"></td>
|
186
|
-
% end
|
187
|
-
% else
|
188
|
-
% bit.shift_out_left do |bit|
|
189
|
-
% if _index_in_range?(bit.position, max_bit, min_bit)
|
190
|
-
<td class="not-writable"></td>
|
191
|
-
% end
|
192
|
-
% end
|
193
|
-
% end
|
194
|
-
% else
|
195
|
-
% if name
|
196
|
-
% if !bit.readable?
|
197
|
-
% if name.size > 10
|
198
|
-
% bit_name = "#{name[0..2]}...#{name[-3..-1]}"
|
199
|
-
%# bit_name = "bit#{bit.position}*"
|
200
|
-
% else
|
201
|
-
% bit_name = name
|
202
|
-
% end
|
203
|
-
% if options[:descriptions] && !bit.description.empty?
|
204
|
-
<td class="<%= _bit_rw(bit) %>"><span title="<%= name %>"><a href="#<%= "#{reg.name}_#{name}_#{bit.position}" %>"><%= bit_name %></a></span></td>
|
205
|
-
% else
|
206
|
-
<td class="<%= _bit_rw(bit) %>"><span title="<%= name %>"><%= bit_name %></span></td>
|
207
|
-
% end
|
208
|
-
% else
|
209
|
-
<td class="<%= _bit_rw(bit) %>"></td>
|
210
|
-
% end
|
211
|
-
% else
|
212
|
-
<td class="not-writable"></td>
|
213
|
-
% end
|
214
|
-
% end
|
215
|
-
% end
|
216
|
-
% end
|
217
|
-
</tr>
|
218
|
-
|
219
|
-
% if options[:current_value]
|
220
|
-
<tr class="current_value">
|
221
|
-
<td class="heading">Current Value (Hex)</td>
|
222
|
-
% alignment_done = !order_is_lsb0
|
223
|
-
% reg.named_bits :include_spacers => true do |name, bit|
|
224
|
-
% if _bit_in_range?(bit, max_bit, min_bit)
|
225
|
-
% if max_bit > (reg.size - 1) && !alignment_done
|
226
|
-
% (max_bit - (reg.size - 1)).times do
|
227
|
-
<td class="spacer"></td>
|
228
|
-
% end
|
229
|
-
% alignment_done = true
|
230
|
-
% end
|
231
|
-
% if bit.size > 1
|
232
|
-
% if name
|
233
|
-
% if bit.nvm_dep != 0 || bit.data == :memory
|
234
|
-
<td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">M</td>
|
235
|
-
% elsif bit.data == :undefined
|
236
|
-
<td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">X</td>
|
237
|
-
% else
|
238
|
-
<td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"><%= bit.data[_max_bit_in_range(bit, max_bit, min_bit).._min_bit_in_range(bit, max_bit, min_bit)].to_s(16).upcase %></td>
|
239
|
-
% end
|
240
|
-
% else
|
241
|
-
% bit.shift_out_left do |bit|
|
242
|
-
% if _index_in_range?(bit.position, max_bit, min_bit)
|
243
|
-
<td></td>
|
244
|
-
% end
|
245
|
-
% end
|
246
|
-
% end
|
247
|
-
% else
|
248
|
-
% if bit.nvm_dep != 0 || bit.reset_val == :memory
|
249
|
-
<td>M</td>
|
250
|
-
% elsif bit.data == :undefined
|
251
|
-
<td>X</td>
|
252
|
-
% else
|
253
|
-
<td><%= bit.data.to_s(16).upcase %></td>
|
254
|
-
% end
|
255
|
-
% end
|
256
|
-
% end
|
257
|
-
% end
|
258
|
-
</tr>
|
259
|
-
% else
|
260
|
-
%#############################################
|
261
|
-
%# Reset Row
|
262
|
-
%#############################################
|
263
|
-
<tr class="reset">
|
264
|
-
<td class="heading">Reset</td>
|
265
|
-
% alignment_done = false
|
266
|
-
% reg.named_bits :include_spacers => true do |name, bit|
|
267
|
-
% if _bit_in_range?(bit, max_bit, min_bit)
|
268
|
-
% if max_bit > (reg.size - 1) && !alignment_done
|
269
|
-
% (max_bit - (reg.size - 1)).times do
|
270
|
-
<td class="spacer"></td>
|
271
|
-
% end
|
272
|
-
% alignment_done = true
|
273
|
-
% end
|
274
|
-
% if bit.size > 1
|
275
|
-
% if name
|
276
|
-
% if bit.nvm_dep != 0 || bit.reset_val == :memory
|
277
|
-
<td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">M</td>
|
278
|
-
% elsif bit.reset_val == :undefined
|
279
|
-
<td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>">X</td>
|
280
|
-
% else
|
281
|
-
<td colspan="<%= _num_bits_in_range(bit, max_bit, min_bit) %>"><%= bit.reset_val[_max_bit_in_range(bit, max_bit, min_bit).._min_bit_in_range(bit, max_bit, min_bit)].to_s(16).upcase %></td>
|
282
|
-
% end
|
283
|
-
% else
|
284
|
-
% bit.shift_out_left do |bit|
|
285
|
-
% if _index_in_range?(bit.position, max_bit, min_bit)
|
286
|
-
<td></td>
|
287
|
-
% end
|
288
|
-
% end
|
289
|
-
% end
|
290
|
-
% else
|
291
|
-
% if bit.nvm_dep != 0 || bit.reset_val == :memory
|
292
|
-
<td>M</td>
|
293
|
-
% elsif bit.reset_val == :undefined
|
294
|
-
<td>X</td>
|
295
|
-
% else
|
296
|
-
<td><%= bit.reset_val.to_s(16).upcase %></td>
|
297
|
-
% end
|
298
|
-
% end
|
299
|
-
% end
|
300
|
-
% end
|
301
|
-
</tr>
|
302
|
-
% end
|
303
|
-
</tbody>
|
304
|
-
</table>
|
305
|
-
|
306
|
-
% end # Byte index loop
|
307
|
-
|
308
|
-
% if options[:descriptions] && reg.named_bits.any? { |name, bits| !bits.description.empty? }
|
309
|
-
<table class="bit-descriptions table table-condensed table-bordered" style="margin: 20px 0 0 0">
|
310
|
-
<thead>
|
311
|
-
<tr>
|
312
|
-
<th>Bit</th>
|
313
|
-
<th>Description</th>
|
314
|
-
</tr>
|
315
|
-
</thead>
|
316
|
-
<tbody>
|
317
|
-
% reg.named_bits do |name, bits|
|
318
|
-
<tr>
|
319
|
-
<td>
|
320
|
-
<p>
|
321
|
-
<a class="anchor" name="<%= "#{reg.name}_#{name}_#{bits.position}" %>"></a>
|
322
|
-
% if bits.size == 1
|
323
|
-
<%= bits.position %><%= order_is_lsb0 ? '' : "<span class="msb0_specific" style="color:gray;"> (#{reg.size - bits.position - 1})</span>" %>
|
324
|
-
% else
|
325
|
-
<%= bits.position + bits.size - 1 %>-<%= bits.position %><%= order_is_lsb0 ? '' : "<span class="msb0_specific" style="color:gray;"> (#{reg.size - bits.position - bits.size}-#{reg.size - bits.position - 1})</span>" %>
|
326
|
-
% end
|
327
|
-
</p>
|
328
|
-
<p>
|
329
|
-
% if bits.size == 1
|
330
|
-
<%= name %>
|
331
|
-
% else
|
332
|
-
<%= name %>[<%= bits.size - 1 %>:0]<%= order_is_lsb0 ? '' : "<span class="msb0_specific" style="color:gray;"> ([0:#{bits.size - 1}])</span>" %>
|
333
|
-
% end
|
334
|
-
</p>
|
335
|
-
</td>
|
336
|
-
<td markdown="1">
|
337
|
-
% bit_val_str = ''
|
338
|
-
% start_bit = bits.position
|
339
|
-
% end_bit = bits.position + bits.size - 1
|
340
|
-
% (start_bit..end_bit).each do |b|
|
341
|
-
% bit_val_str << reg.bits[b].data.to_s
|
342
|
-
% end
|
343
|
-
% bit_val_str.reverse!
|
344
|
-
% bits.description.each do |line|
|
345
|
-
% if options[:current_value]
|
346
|
-
% if line =~ /^\d{#{bit_val_str.length}}/
|
347
|
-
% if line =~ /^#{bit_val_str}/
|
348
|
-
<span style="background-color: #66FF66"> <%= line.gsub("\\'", "'") %>
|
349
|
-
</span><br/>
|
350
|
-
% else
|
351
|
-
<%= line.gsub("\\'", "'") %><br/>
|
352
|
-
% end
|
353
|
-
% else
|
354
|
-
<%= line.gsub("\\'", "'") %>
|
355
|
-
% end
|
356
|
-
% else
|
357
|
-
<%= line.gsub("\\'", "'") %>
|
358
|
-
% end
|
359
|
-
% end
|
360
|
-
|
361
|
-
</td>
|
362
|
-
</tr>
|
363
|
-
% end
|
364
|
-
</tbody>
|
365
|
-
</table>
|
366
|
-
% end
|
367
|
-
|
368
|
-
</div>
|