utopia-project 0.43.0 → 0.44.1

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: 4e03635789e50ada548501b8220d49ae33e6ee4ec89aa993cddb358d7a8efc30
4
- data.tar.gz: a97fb27c10530e9d5cd66d4caae0c173eb5f40b72dd48d2a92d35fd52e1b12a7
3
+ metadata.gz: aeb8c91bedd9b713aac858b1d21a2475e46339d263619e37c5ee5e55a96f9823
4
+ data.tar.gz: 42dd69b94451317ffebd0c44e7316accba3e2e7563c911c6e47ec3ff8b61f83d
5
5
  SHA512:
6
- metadata.gz: 38468ed82c56f4048427dd94d7f687d5a45c978d7f398e3033483cfdcb9689c78e23a5b6c4cbefc8d1ae65fb9d62ae06fa05d0c85cdf21721fe5bde350ab5f68
7
- data.tar.gz: 6035c40a3578098292f084f63614c3bac24ac396774466b8c649ac7770b745d74b0e75676bb4d1d03555a888f65efe2008e2d8790da9e0e67ca0463b35dd5341
6
+ metadata.gz: c661665e07add1839f6f49abe463e74fdc433e2184bbf802d8fbd4dcfe09c339d637625ce5ba0f63333860ee97d22414026c3bb70ab16ccdffdae8c3a3a4dcb3
7
+ data.tar.gz: 429aedacf04be623ca7869fde98f40cc702743da7b53fa2f51bb81c1b387b39dea7d8b475a916a76c0a9fc5cce1c51d8db0a80e2a151f62ab06c304ad7e73a45
checksums.yaml.gz.sig CHANGED
Binary file
@@ -16,7 +16,7 @@ Source code documentation is included adjacent to the code it describes, using s
16
16
  However, in short:
17
17
 
18
18
  - Documentation is expected to be in markdown format.
19
- - You may embed links to definitions using `{MyClass}` or `{my_method}`.
19
+ - You may embed links to definitions using ruby:`MyClass` or ruby:`my_method`.
20
20
  - You can use tags:
21
21
  - `@parameters name [Type] Description.`
22
22
  - `@yields {|argument| ...} If a block is given.`
@@ -173,7 +173,7 @@ $ bundle add $project
173
173
 
174
174
  `$project` has several core concepts:
175
175
 
176
- - A {ruby MyProject::MyClass} which represents the main entry point for using the project.
176
+ - A ruby:`MyProject::MyClass` which represents the main entry point for using the project.
177
177
 
178
178
  ## Usage
179
179
 
@@ -284,7 +284,7 @@ Following `utopia-project` guidelines, each guide should:
284
284
  2. **Provide user context**: Explain why users would need this feature
285
285
  3. **Include practical examples**: Working code samples that demonstrate real scenarios
286
286
  4. **Follow consistent structure**: Problem → Use Cases → Implementation → Best Practices
287
- 5. **Cross-reference appropriately**: Use `{ruby ClassName}` for internal references
287
+ 5. **Cross-reference appropriately**: Use ruby:`ClassName` for internal references
288
288
  6. **Include error handling**: Show how to handle common failure scenarios
289
289
  7. **Provide troubleshooting**: Common issues and solutions
290
290
  8. **Maintain currency**: Keep examples updated with latest best practices
@@ -4,4 +4,4 @@ Provides structured access to a project directory which contains source code and
4
4
 
5
5
  ## Usage
6
6
 
7
- To get an instance for the current project, use {Base#instance}.
7
+ To get an instance for the current project, use ruby:`Base#instance`.
@@ -136,12 +136,12 @@ module Utopia
136
136
  end
137
137
 
138
138
  # Format the given text in the context of the given definition and language.
139
- # See {document} for details.
139
+ # See ruby:`document` for details.
140
140
  # @returns [XRB::MarkupString]
141
141
  #
142
142
  # @example Format text with code links
143
143
  # base = Utopia::Project::Base.new
144
- # base.format("See {Utopia::Project::Base#guides}.") # => XRB::MarkupString
144
+ # base.format("See ruby:`Utopia::Project::Base#guides`.") # => XRB::MarkupString
145
145
  def format(text, definition = nil, language: definition&.language, **options)
146
146
  if document = self.document(text, definition, language: language)
147
147
  return XRB::Markup.raw(
@@ -152,7 +152,7 @@ module Utopia
152
152
 
153
153
  # Convert the given markdown text into HTML.
154
154
  #
155
- # Updates source code references (`{language identifier}`) into links.
155
+ # Updates language-prefixed inline code (e.g. `ruby:` followed by inline code) into links.
156
156
  #
157
157
  # @returns [Document]
158
158
  #
@@ -29,7 +29,7 @@ module Utopia
29
29
  # Parse and resolve the document root.
30
30
  # @returns [Markly::Node] The root document node.
31
31
  def root
32
- @root ||= resolve(Markly.parse(@text, extensions: [:table]))
32
+ @root ||= resolve(Markly.parse(@text, flags: Markly::INLINE_CODE_INFO, extensions: [:table]))
33
33
  end
34
34
 
35
35
  # Extract the leading heading as the document title.
@@ -99,7 +99,12 @@ module Utopia
99
99
  # @parameter node [Markly::Node] The node to render.
100
100
  # @returns [XRB::MarkupString] The rendered HTML markup.
101
101
  def to_html(node = self.root, **options)
102
- renderer = Renderer.new(ids: true, flags: Markly::UNSAFE, **options)
102
+ renderer = Renderer.new(
103
+ inline_code_resolver: (@index ? method(:reference_node) : nil),
104
+ ids: true,
105
+ flags: Markly::UNSAFE,
106
+ **options
107
+ )
103
108
  XRB::Markup.raw(renderer.render(node))
104
109
  end
105
110
 
@@ -160,37 +165,62 @@ module Utopia
160
165
  # @parameter language [String | Nil] The source language name.
161
166
  # @returns [Markly::Node] The code node.
162
167
  def code_node(content, language = nil)
163
- if language
164
- node = inline_html_node(
165
- "<code class=\"language-#{language}\">#{XRB::Strings.to_html(content)}</code>"
166
- )
167
- else
168
- node = Markly::Node.new(:code)
169
- node.string_content = content
170
- return node
171
- end
168
+ node = Markly::Node.new(:code)
169
+ node.string_content = content
170
+ node.code_info = language if language
172
171
 
173
172
  return node
174
173
  end
175
174
 
176
175
  private
177
176
 
178
- # Replace source code references in the given text with HTML anchors.
179
- #
180
- def reference_node(content)
181
- if reference = @index.languages.parse_reference(content, default_language: @default_language)
182
- definition = @index.lookup(reference, relative_to: @definition)
183
- end
177
+ # Resolve a source code reference to HTML.
178
+ # @parameter content [String] The source code reference.
179
+ # @parameter language [String | Nil] The explicit source language.
180
+ # @returns [Markly::Node] The inline HTML node.
181
+ def reference_node(content, language: nil)
182
+ reference, definition = resolve_reference(content, language: language)
184
183
 
185
184
  if definition
186
- link_node(reference.identifier, @base.link_for(definition),
187
- code_node(definition.qualified_form, reference.language.name)
188
- )
185
+ content = definition.qualified_form
186
+ language = reference.language.name
189
187
  elsif reference
190
- code_node(reference.identifier, reference.language.name)
188
+ content = reference.identifier
189
+ language = reference.language.name
190
+ end
191
+
192
+ attributes = {}
193
+ attributes[:class] = "language-#{language}" if language
194
+
195
+ markup = XRB::Builder.fragment do |builder|
196
+ builder.inline("code", attributes) do
197
+ if definition
198
+ builder.inline("a", href: @base.link_for(definition), title: reference.identifier) do
199
+ builder.text(content)
200
+ end
201
+ else
202
+ builder.text(content)
203
+ end
204
+ end
205
+ end
206
+
207
+ return inline_html_node(markup.to_s)
208
+ end
209
+
210
+ # Resolve source code reference metadata and its indexed definition.
211
+ # @parameter content [String] The source code reference.
212
+ # @parameter language [String | Nil] The explicit source language.
213
+ # @returns [Array] The parsed reference and resolved definition.
214
+ def resolve_reference(content, language: nil)
215
+ reference = if language
216
+ @index.languages.reference_for(language, content)
191
217
  else
192
- code_node(content)
218
+ @index.languages.parse_reference(content, default_language: @default_language)
193
219
  end
220
+
221
+ definition = @index.lookup(reference, relative_to: @definition) if reference
222
+
223
+ return reference, definition
194
224
  end
195
225
 
196
226
  def resolve(root)
@@ -10,6 +10,14 @@ module Utopia
10
10
  module Project
11
11
  # Renders project Markdown with support for Mermaid code blocks.
12
12
  class Renderer < Markly::Renderer::HTML
13
+ # Initialize the project renderer.
14
+ # @parameter inline_code_resolver [Proc | Nil] Resolves language-prefixed inline code into an inline HTML node.
15
+ def initialize(inline_code_resolver: nil, **options)
16
+ @inline_code_resolver = inline_code_resolver
17
+
18
+ super(**options)
19
+ end
20
+
13
21
  # Render a heading and expose its title to Pagefind for sub-results.
14
22
  # @parameter node [Markly::Node] The heading node.
15
23
  def header(node)
@@ -45,6 +53,16 @@ module Utopia
45
53
  super
46
54
  end
47
55
  end
56
+
57
+ # Render inline code, resolving language-prefixed references when possible.
58
+ # @parameter node [Markly::Node] The inline code node.
59
+ def code(node)
60
+ if @inline_code_resolver && (language = node.code_language)
61
+ out(@inline_code_resolver.call(node.string_content, language: language))
62
+ else
63
+ super
64
+ end
65
+ end
48
66
  end
49
67
  end
50
68
  end
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Utopia
7
7
  module Project
8
- VERSION = "0.43.0"
8
+ VERSION = "0.44.1"
9
9
  end
10
10
  end
data/readme.md CHANGED
@@ -33,6 +33,14 @@ Please see the [project documentation](https://socketry.github.io/utopia-project
33
33
 
34
34
  Please see the [project releases](https://socketry.github.io/utopia-project/releases/index) for all releases.
35
35
 
36
+ ### v0.44.1
37
+
38
+ - Render resolved inline code references with links inside their code elements so hover and keyboard focus affect the complete reference.
39
+
40
+ ### v0.44.0
41
+
42
+ - Add support for language-prefixed inline code references such as ruby:`Object.new`.
43
+
36
44
  ### v0.41.0
37
45
 
38
46
  - Don't render empty signature block when there are only examples.
@@ -68,14 +76,6 @@ Please see the [project releases](https://socketry.github.io/utopia-project/rele
68
76
 
69
77
  - Fixed handling of segmented code guides when rendered into a `readme.md` file.
70
78
 
71
- ### v0.33.0
72
-
73
- - Fix presentation of release notes on releases page.
74
-
75
- ### v0.31.0
76
-
77
- - Support brief release notes in `releases.md` document.
78
-
79
79
  ## See Also
80
80
 
81
81
  - [Utopia](https://github.com/socketry/utopia) — The website framework which powers this web application.
data/releases.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changes
2
2
 
3
+ ## v0.44.1
4
+
5
+ - Render resolved inline code references with links inside their code elements so hover and keyboard focus affect the complete reference.
6
+
7
+ ## v0.44.0
8
+
9
+ - Add support for language-prefixed inline code references such as ruby:`Object.new`.
10
+
3
11
  ## v0.41.0
4
12
 
5
13
  - Don't render empty signature block when there are only examples.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utopia-project
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.43.0
4
+ version: 0.44.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -75,14 +75,14 @@ dependencies:
75
75
  requirements:
76
76
  - - "~>"
77
77
  - !ruby/object:Gem::Version
78
- version: '0.15'
78
+ version: '0.17'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - "~>"
84
84
  - !ruby/object:Gem::Version
85
- version: '0.15'
85
+ version: '0.17'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: thread-local
88
88
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file