asciidoctor / asciidoctor-extensions-lab

A lab for testing and demonstrating Asciidoctor extensions. Please do not use this code in production. If you want to use one of these extensions in your application, create a new project, import the code, and distribute it as a RubyGem. You can then request to make it a top-level project under the Asciidoctor organization.
Other
104 stars 101 forks source link

Document how to create a new admonition type #9

Closed paulvickers closed 10 months ago

paulvickers commented 10 years ago

I think it's an extension I need, but I'm not sure how to go about making one. Here's what I need:

I am converting a text book to various e-formats and the book has several in-text devices. Up till now I have been using the built-in admonitions and just created a new stylesheet to use different icons to match what I need. However, it seems to me that rather than subverting the existing admonitions it would be better to create new custom blocks for this project. For example, I need a block that looks and behaves exactly like an admonition except that it should be called thinkspot rather than tip, caution, warning, or note.

Can someone give me a step-by-step on what to do?

Thanks!

mojavelinux commented 9 years ago

When you only need a change that can be controlled by the stylesheet, I think the best approach is to simply append a role in the AsciiDoc content and then append the necessary CSS to match. In this case, we should view the admonition types as broad categories or levels that can be "specialized" using a role. thinkspot (or just think) might fit either with tip or note. You'd type it as:

[NOTE.think]
====
A thinkspot admonition.
====

In HTML, that will output:

<div class="admonitionblock note think">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>A thinkspot admonition.</p>
</div>
</td>
</tr>
</table>
</div>

If you want the value of the title attribute to be “Thinkspot” instead of “Note”, you can set the caption too.

[NOTE.think,caption=Thinkspot]

You can then customize the icon using CSS, which can be appended using docinfo or a custom stylesheet.

.admonitionblock.think td.icon .icon-note:before {
  content:"\f0eb";
  color:#000;
}
nathany commented 8 years ago

How would I add additional admonitions, like [QUESTION] and customize the Font Awesome icon? I'd also like it to work in PDFs generated with asciidoctor-pdf.

mojavelinux commented 8 years ago

If you add a new admonition type, then you'd technically be introducing a new type of block (named QUESTION, for instance), which would need to be handled by a custom block extension. You could then map the result back to an admonition node so that the built-in handler takes care of generating the output for it.

The icon is controlled by the "name" attribute (e.g., "icon-#{node.attr 'name'}"). It doesn't validate the name value, so it can be any value you want. You'd still need to add CSS to map that class to a Font Awesome icon.

The fact that admonition types are controlled by the block name is kind of strange. In UniDoc, I'd actually like to see the admonition type be a special attribute, something like:

[!QUESTION]
====
...
====

That way, we aren't introducing new block types for each type of admonition. But that's a separate discussion.

mojavelinux commented 8 years ago

I thought of a way to mark this up for UniDoc (possibly supported in Asciidoctor before then). We overload the block title and allow a special prefix to indicate this is an admonition.

.QUESTION: optional title
====
...
====

That way, we aren't introducing a new block type for each admonition type. And it's much closer to the paragraph version (e.g., QUESTION: content...). You could technically implement this today using a Treeprocessor.

nathany commented 8 years ago

Thanks. Curious, what is this UniDoc thing you speak of? :-)

mojavelinux commented 8 years ago

UniDoc is an (eventual) goal of making a specification for AsciiDoc to make it easier to create tools and other implementations and to refine the syntax where necessary. For more info, see https://github.com/asciidoctor/asciidoctor/wiki/AsciiDoc-Specification-(aka-UniDoc)-Planning.

nathany commented 8 years ago

Requiring a custom block type does seem like a bit much for adding a new admonition type. That I agree with.

I would basically just like to get rid of this warning:

asciidoctor: WARNING: ch01.adoc: line 93: invalid style for example block: QUESTION

If I do something like the README (which probably isn't the processing I want it to do) and require my file on the command line, that warning is still there.

-r ./lib/question-block.rb
RUBY_ENGINE == 'opal' ? (require 'question-block/extension') : (require_relative 'question-block/extension')

Extensions.register do
  block QuestionBlock
end
class QuestionBlock < Extensions::BlockProcessor
  use_dsl
  named :question
  on_context :open

  def process parent, reader, attrs
    create_paragraph parent, reader.lines, attrs
  end
end
mojavelinux commented 8 years ago

Can you show me an example snippet of the AsciiDoc source. That way I can help debug.

nathany commented 8 years ago

Sure. Am I missing something here?

[QUESTION]
====
1. How can you save your work when using The Go Playground?
====

Also, my full command looks like this, in case it's just not loading for some reason:

asciidoctor -r asciidoctor-pdf -r ./lib/sectnumoffset-treeprocessor.rb -r ./lib/question-block.rb -b pdf -a source-highlighter=coderay -a pdf-fontsdir=resources/fonts -a pdf-style=resources/themes/manning-theme.yml manuscript/*.adoc -D pdf/
mojavelinux commented 8 years ago

That confirms my suspicion. The context is :example not :open. Make that change and it should work.

nathany commented 8 years ago

Made the change, I still get the warning when generating a pdf.

Maybe I shouldn't worry about it. As I understand it, my publisher is going to handle customizing the icons when they convert to DocBook. So I don't need it to look exactly right, which just means I get a warning when generating.

mojavelinux commented 8 years ago

On a completely unrelated note, why not use the Q&A syntax for this?

[qanda]
How can you save your work when using The Go Playground?:: {empty}
mojavelinux commented 8 years ago

...btw, I'm testing the extension...

mojavelinux commented 8 years ago

Aha! The style is case sensitive. The following will work.

require 'asciidoctor/extensions'

class QuestionBlock < Asciidoctor::Extensions::BlockProcessor
  use_dsl
  named :QUESTION
  on_context :example 

  def process parent, reader, attrs
    create_paragraph parent, reader.lines, attrs
  end
end

Asciidoctor::Extensions.register do
  block QuestionBlock 
end

Btw, you probably want to create an admonition block instead of a paragraph in the process method. I'll try to fill in the details, then we can check this into the extension lab.

mojavelinux commented 8 years ago

Voila!

require 'asciidoctor/extensions'

class QuestionBlock < Asciidoctor::Extensions::BlockProcessor
  use_dsl
  named :QUESTION
  on_context :example

  def process parent, reader, attrs
    attrs['name'] = 'question'
    attrs['caption'] = 'Question'
    admon = create_block parent, :admonition, nil, attrs, content_model: :compound
    parse_content admon, reader
    admon
  end
end

class QuestionBlockCss < Asciidoctor::Extensions::DocinfoProcessor
  use_dsl

  def process doc
    '<style>
.admonitionblock td.icon .icon-question:before{content:"\f128";color:#000}
</style>'
  end
end

Asciidoctor::Extensions.register do
  block QuestionBlock
  docinfo_processor QuestionBlockCss
end
mojavelinux commented 8 years ago

I'll put this into the extensions lab so we can hack on it there.

mojavelinux commented 8 years ago

It's there now.

nathany commented 8 years ago

Thanks. It works. I haven't done any custom icons in the PDF (for TIP, etc.) but this works as well as those ones.

As for [qanda], I'm using it for the answers at the end of the chapter, but never thought to use them for questions by themselves, which are scattered across several pages.

nathany commented 8 years ago

The combination of -r ./lib/custom-admonition-block.rb and -a icons=font result in a stack trace with asciidoctor-pdf

/usr/local/lib/ruby/gems/2.2.0/gems/asciidoctor-pdf-1.5.0.alpha.10/lib/asciidoctor-pdf/converter.rb:439:in
 `block (4 levels) in convert_admonition': undefined method `[]' for nil:NilClass (NoMethodError)
mojavelinux commented 8 years ago

When using Asciidoctor PDF, you need to define an admonition type for question in the custom theme. See https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc#admonition. Otherwise, the icon resolves to nil.

mojavelinux commented 8 years ago

The HTML5 backend just relies on the stylesheet to sort out the icon, but Asciidoctor PDF actually has to look it up.

nathany commented 8 years ago

Gotcha. I'll look into it, thanks

mojavelinux commented 8 years ago

That's also how you can customize all the icons in Asciidoctor PDF.

Technically, you don't even need a custom admonition type if you just hijack the icon :)

nathany commented 8 years ago

Hah. Guess I could've just hijacked the warning icon or something. Doh.

I must be doing something wrong, as I don't quite understand the layout of the YAML. I either get that nil error or a /theme_loader.rb:90:inprocess_entry': undefined method map' for 0:Fixnum error

admonition:
  border_color: $base_border_color
  border_width: $base_border_width
  admonition_icon_note_stroke_color: 000000
  admonition_icon_question_name: fa-question
  admonition_icon_question_stroke_color: 000000
  admonition_icon_question_size: 24
  admonition_icon_experiment_name: fa-flask
  admonition_icon_experiment_stroke_color: 000000
  admonition_icon_experiment_size: 24
nathany commented 8 years ago

no change with

admonition:
  admonition_icon_tip_name: fa-question

error asciidoctor-pdf/theme_loader.rb:90:in 'process_entry': undefined methodmap' for "fa-question":String (NoMethodError)` for either:

admonition_icon_tip_name: fa-question

or

admonition:
  icon_tip_name: fa-question
mojavelinux commented 8 years ago

First, it has to be defined with the other admonition settings or else the theme is incomplete.

admonition:
  border_color: $base_border_color
  border_width: $base_border_width
  padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm]
  icon:
    question:
      name: fa-question
      stroke_color: 000000
      size: 14

But that brings us to a separate problem. The converter attempts to merge the theme data with the built-in defaults, but the built-in default is nil. So a change is needed to Asciidoctor PDF at line https://github.com/asciidoctor/asciidoctor-pdf/blob/master/lib/asciidoctor-pdf/converter.rb#L1786.

mojavelinux commented 8 years ago

With that change to Asciidoctor PDF, it works. I'll commit it. You'll need to use HEAD.

nathany commented 8 years ago

Hm. I don't suppose putting this in my Gemfile and running bundle update is enough to get it working?

gem 'asciidoctor-pdf', github: 'asciidoctor/asciidoctor-pdf'

obviously not, it's still using alpha.10. hmmmm

/usr/local/lib/ruby/gems/2.2.0/gems/asciidoctor-pdf-1.5.0.alpha.10/lib/asciidoctor-pdf/converter.rb:1786:in `admonition_icon_data': undefined method `merge' for nil:NilClass (NoMethodError)
converter.rb:1786:in `admonition_icon_data': undefined method `merge' for nil:NilClass (NoMethodError)

UPDATE: -r asciidoctor-pdf changed to a specific path -r ~/src/github.com/asciidoctor/asciidoctor-pdf/lib/asciidoctor-pdf works

nathany commented 8 years ago

Sweet. The PDF looks pretty great.

sample

There are some spots where it messes up, like when I have a quote or TIP inside the admonition. Those work fine when hijacking a different admonition, so it must be something in the CustomAdmonitionBlock code. Notice the byline is repeated below.

malacandra
[EXPERIMENT]
.Experiment: malacandra.go
====
[quote, C.S. Lewis, Out of the Silent Planet]
"Malacandra is much nearer than that: we shall make it in about twenty-eight days."

Malacandra is another name for Mars in a SciFi trilogy by C.S. Lewis. Write a program to determine how fast their ship would need to travel in order to reach Malacandra in 28 days. Assume a distance of 56,000,000 km.
====

Whether or not I should be doing that sorta thing is a whole other question.

mojavelinux commented 8 years ago

The implementation is a bit naive at the moment. Now that we have the basics down, we can fill in the gaps so it handles all the cases. Le 6 déc. 2015 5:20 PM, "Nathan Youngman" notifications@github.com a écrit :

Sweet. The PDF looks pretty great.

[image: sample] https://cloud.githubusercontent.com/assets/4566/11616600/581c4644-9c3c-11e5-8949-80e8ac067395.png

There are some spots where it messes up, like when I have a quote or TIP inside the admonition. Those work fine when hijacking a different admonition, so it must be something in the CustomAdmonitionBlock code. Notice the byline is repeated below.

[image: malacandra] https://cloud.githubusercontent.com/assets/4566/11616640/84afed0e-9c3d-11e5-86a8-fe7c360ef54e.png

[EXPERIMENT].Experiment: malacandra.go====[quote, C.S. Lewis, Out of the Silent Planet]"Malacandra is much nearer than that: we shall make it in about twenty-eight days."Malacandra is another name for Mars in a SciFi trilogy by C.S. Lewis. Write a program to determine how fast their ship would need to travel in order to reach Malacandra in 28 days. Assume a distance of 56,000,000 km.====

Whether or not I should be doing that sorta thing is a whole other question.

— Reply to this email directly or view it on GitHub https://github.com/asciidoctor/asciidoctor-extensions-lab/issues/9#issuecomment-162379600 .

mojavelinux commented 8 years ago

In short, we need to pass around attributes more carefully.

mojavelinux commented 8 years ago

Fixed. Turns out I couldn't remember how to create a block extension right myself :)

mojavelinux commented 8 years ago

@nathany When you use a GitHub reference in your Gemfile, you have to run everything using bundle exec. Otherwise, Ruby doesn't see the clone.

nathany commented 8 years ago

Hah. I forgot about bundle exec. It's been a while. Everything looks to be working. Thanks for helping me out on your Sunday.

mojavelinux commented 8 years ago

Excellent! Thanks for testing and providing feedback.

paulvickers commented 8 years ago

Thank you both for this. I have successfully added the four new blocks I need into a separate .rb file. Works a treat. The reason I wanted new blocks is to save having to remember which admonition I had mapped to thinkspot, etc. Now all I need to do is

[THINKSPOT]
====
1. How can you save your work when using The Go Playground?
====
paulvickers commented 8 years ago

One more question. One of my new blocks uses a custom icon which I had got to work before by hijacking the icon in the master css file thus:

.admonitionblock td.icon .icon-warning:before {content: url('data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDA3LTA2LTIwVDIwOjAxOjU5PC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgNy4wPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjMwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjMwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzIwMDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44NDU3PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CnBD6b0AABtnSURBVGgFtVoJfFXVmT93efuW915e9o3sCyFAQHYIAirIYsWg4gaC4BSkNnUsWKtRK0ILzGjVjhRLmbEqoG0VFXdREQFFB4WwCIFA9v2tedu9d/7fzXtpwG20M+eX+869Z/325Zww9n9XuP/FUhePiX9z1dXVwqD5drxn48nBg/daHjWVi8f1t/5f/tbWqpvFAfumpalPfa6//vri3/zmN+mxQZyiKPF5hRMnTlw/ffr0g5MnT64fO3Zsw4gRFR+naNhGjB0fX7S6mg1GWm0W453/ZM0BETm2BgGlXLxeVVWVsGfPnmhubu7sxMTEDXa7/X6M2Q5O8BzHSWlpaVcB+PXos+r1+nfR91E4HHYFg33DOjMyas6f/PJmnS1lw/RZN/6htnaVB/3EpfieeP3nispyUK7kjjvuuPqpp54y0nIx7gysPEhsnPPmzfv4nnvu2fvGG28k0YAYN8SlS5fuuv/++9/bunVrcZxDqPlnnnkmY93atctvWHB1y6WjipWr58350x//+MdkmnvxPtQ2uBBwxDp66D3OdrxeWOIAWiyWibfddtuexx9/fCSNAPUv4HRlZaWG2rOysm6+5ZZbep544omp9L1s2TK1Ha88iDDy1VdfTaF2FNqT1hjYu6bm7mnTLhnaOLfqEuVnP/vZJkKS+uPIqBRFQ7zQZGKXFHtkYn0M4IFF44PLyspUEfJ6vYc7Ozt7m5ubJ1EfREiKUxWf3KeffhpFzRcUFMyw2WxfVlRUfErjoAtx0ZCXL1/+2ZVXXtkKhDQAjvaiNYjqWryLmzb99p3W82d3ykEv87t7bli/cSPpjHL06NEL4KKPfqTSKo3JdlM5vivwxCnECJlBwKGrv8Spf/nlly9dsmTJ29hYFZk4tzAqrpjpl1122RerV6/eEJtK7bSvundlJdPE14r1xysu3u5k7Fezxg5Xlt5yU6TmrruW04AdO3ao68dFhygra6zOMcnNhzYnJzr+XlU15dUJEya9NmrUqE3oG7pz504JSqnQogA2Po/hW6Uqz/M7IpFI1O/3/wLjGcZTO7Fe5VpmZqYyZMiQJpPJdJr6IVY8+uKIyIcOsQgZA3TFRZqGqcXl2qOuYU9gKZwiMVmWWTQaJU7FC0eipA7C7MV53q7aIVPGZGUXVzCT2XKwr6+vJRQKjS4vLx/q8XheaWtr+y9s1oOHETJgKwEjE6dQPA8++OAjWq129HvvvaefOnVqMNau9j/wwAPt2dnZd0uSRBaH9fT0yJs3b1aJkFFdbWh887ieub/sQReJNasGQjvpheqdLMzsuVk6qX6sRgu1EjQhmyXBTZ3gPMGvxJVyzpji9I35ZSPtrpwCT3Z23oMlJYVbcnJygnV1ddrjx4+PdbvdN5aWlsrQg/+qr68PAYEgLUQFSKjVfffd9z70Yd8rr7yiAkPtJGLgDvXLixcv/pJeiAh4JFZWZmZHjy6Ud+78SXkaZ/PpLHvPBMxbma/lGGaoa2B4f91TvyytsmRk0pBixnS69rS0DHWtBQsW9G/OEossqZ0n/jz7+vlXp+aVMKPF8u+rf/nLn9OGgwuorwVAs7u7u2/EI+F557XXXtuFMU2DxtGiRCEClB4SlQsKyTQ2l1hupY3VH1pfNbxsWZLDxPk6z7CAv4v5JOMJT9S43S9ad4dN9rMdR90w6SeXTijOXjlu+iyTpNHzoqh94ne/W78SC5MzJUKCI50nslIyEsrNCQ4mc1wjvNM22hlA6MGBCDjCgQscLFQYZvNNq9WqdblcBRCNyRCV6cnJyU9i7Lu0aGwe6VAUD4mNds6cOdMEQRgDkeo+ceLEfiBxkMYBiRtmT5uyfMql01iv18s6WgqZt7OFdZ9+r8jU57vP09O+zH2W1TtszFFQOam4rLxC1lpsvNcfOFaYk/UELYE9gAOniqcI2XKZrUa7z+NmnMFyLigIzTQIzikcH0TfMUr68Po8fe/du9eyb9++WRqNxhDTBRIjlQvFxcU548ePz4dyN/h8vluBRCEMQX1KSso1U6ZMeltnTdjx/o5nLispLWUhmWO+oHQkLbfg/V5HYhlvtE2S/D3CEK02RW8ypyS4Upk5wcn6IhHeH+irS0tN/eltK1YcAxK0l4oEwSM6k5NFJdoreLrbmDkpo3dEQUGEOi4uqjigEZNFKLuImMiLz+00DvrDg2MiRC+Mz9SioqK/wErJ+fn5N8Fg1BgMBibYBb+3yZt56tSpGSdPn37k2Pm2caPamlmE17YhLPnXX//6169v27Yt/Zwr6TJvb+81osAP0+t0ZgiODCS6wPA3oLN/WLVqVR324EBoBbDgtb+IsETRQqtZMloSmCgKUVBwAMv4oEE1mV0ZiASxCF/77B4HO/lFGO9kiQgJ/dRpU/9QWFiYD+e3EMHhWbQNLp4777wzb2RFxU3FeblJAb+XtbS2+t/Zu/csDYLXJ33bCt178VRDQ54UjKQFg/6QQRAa/vXee+shIaT4PCSAzKRqbWlevIwan+c4d+uCnyjY5IO1a9e6qCPuaOKDUKs6oH47C4tdWrZ2WLr4zvAc62vlZYU1pLwI+lasXLmyDaHKjNg8K2rVYaEe/6ctWz4+WlcX6erqCvX29koN585JL730koLw5vfot8TmaGL116pvgGlgjMgSM5uD4fYGd2dzpmB1pNoKChLR2xEzmfGBhAQ9oIJl9hDPyd/mFaaUGE0WJoU8LMxHrsjJTpwucWJ+U1PTQRgC89NPP/0YdCIT4cvn11133TGst2b+/PkjQMn4mgzhipKVmclgNFYiXtNt2rSpBp0+BKC61tZWBeIqw1qqlKdwKC7eAwtc+FLLF6XZ1l9Wka7ceO01gfUbNlwT69eS+OCdfE2MSq5JRUnm87fOv1JZdvPC6M0Lr1NumD9XuXbaJcqCOVcos+fOU1544YWGs2fPegKBAEmAAsoroLoP1o8+IzAQ0U8OfqLAOysKuUpFoZhKeeutt5TLZ88lkzpQgEE8PCE4vrNgQK0sOYbs7ovI7f7284Yzp0/PxbokDiT7pC/kCyIsf0SpjXVsnHTpjIzU/DJJ70gKZOUXbk0rLPv96aa2tuJhI9jDDz0oX3XVVVmgsAUKTvIsgeoyvLwJoYuMR4AOCh2dHehCAXOAEAEplZaWsYL0lLuzGbt32sRxs9FWTLyDPtL+cize+gc70Ti4qPI796e3twY63cMUd1O5u9dd8PKb7/qPXnPNQeZy8dVlZSavbKiST3624fIZE8eS0wxJrM9hd9zz4AO1v9q3d++RW2+/Y8ZPV96RkZeXR/EYFQUcEeDlVUrC7yjt7W08gOYQ0pMowbDEgwrgw3G8oBGV88eP2VzH363KztPMy05gcxKt5pKznUY/Y4Fz4LJEEgKEOCCnitsFiBCmf//zn8OXz5nfroiGGTol4uxtbhhrfHvHUP0ndROb6uqWcZ0tP6+oLC/MLiqTmNbAm0zGdQ8++MB6WgjmcMXtt9++EOZWIEDRpGICRBiSJ5aQkMAh++MCgT4GfWFwoAwOcjAMNIHxvMCdOl0vd332EpeZpdMlWsLOVBs3Oi+Zm6PT2bMaWcGZPbuf6wASjBC6GBl1Y9ocj3zX3WsWhwKe9ZKv19V2po6FwVSt3sqSM1JlS2KyDE6ICCa3z7ziittifmQUZPtF5BVZJOtYQyCgqAApBh+iUl6n07GGhgbW0dHBkIsMcIPGYp6KSDQqsc2bn2KfvvC4MrKsRAq2viXzXEBgnFHo7jOzukBOXcBVePcbz297FcsPhCbqZvgh1mMtrIay4bePbE3OyFxicKZ87MwbzsrGXcpGXTqdZRaV85zGIJos1pcK8vN/FUOCrVixYgzEKQtTSZeIE7SMWhDWM4TsDNFwvInBww8AHm8khKm0dbSz7jNHmS23kh0NJog9mkptOCzw0ag36jB0R0Yluksz5N5tNWvunYXharitToz9qDIMAMhL0jt/7+rVuyDT17lSM37BtLpdXn9wf2dX71sA7O7KESOWLFq06DTwViFOTU/PdTqd6lKDkYhvQPSJ0YhByVmC3a4iJscQgtlSxSwiyezj999jZiUkJ6Zmcm5ZPNDtKHm3RRnOYagYjoQFXbQulM01OoM9Hat3vP66A3vIg/3KgMYBETVv4BYsEJDFncPATY899tgWxgxWf/Np/5q1aylXIMCI8sTBq+Vw35VEeRT1SOebkKH+YCjI9u/7iBUUFbOiwkLGD9KRQDDIPnzvXXZm7xtRQ9oQsb3L1z00O/3XBeOvPLh7u/SkMZyy0Cmd4yOe/xYMeomZ+OjIzz87PBF7vgy/okoC3gfyEQKGZIMAJOsgEmJQZAo96KFCviTCcQWW62eMXp3Q+Mkqwd1pCobCitk8yOurQ1WE6YcWZfAhbP8fV7NzBZNZH4LTXCBDItfR1s4O7/uAdRz5IGrOKOHqu31Mr9U8fc99970DWOR7/u2pu1q+2J9qEfqmCjJTNDoXS0tN05/u6pywYN68QGZ+/lcbN25swJb8heYjBgQsAnEHeU+ZQA9ETQQwCCbttmvHm39XmhS9M9XRqe3oEaXCsTM4lyuRlBt7c6riquKE+Ry4UX/2LHtx86PM6t3LtOET7Nhrz7G6g4fY4bd2sZPvbWEaRS9Z80eI9e4gj03/MnvWrDVDhgzpW7SoSv/79Y/38mkFbfZg01VWrsUgGvIVZ8Fw5o5Ej7h7eoqciYkpiML3EyIDohXDYaCKc4cG4SGnxP9ktPne0uS+ZUa+h4UiYtSRmCAe/vwQy4FfMBoNxOZ+OSOlx3Om4Rx7/j8eZeHDTzFbUiryHURE+lamINs1DZnIoubRLGJ0Ci3uYLdGq/3TlLFj18N59pLsI6RRo/DP2qa/U+Y69zdniN1kTmRRncGkEXlPJMnlbMFBXhqIpgWs0W9FBECpZUd1NbcAqWpFYd68/MTgSqvex7zdvqgzv1oUM4eyN99+h1ltCXS0w8PMqjLrCwS4Y0ePsjee3cIC+zYrSXnpSjjk4WRO4KLhCDM7LErxlOncF+faQ4cOffK3MSOHPrFq1S8+BkASpcbxmKoS4nzo0PLIm5eM//M857jZY6rm2928lrU0N/uGDy3dhv2SkPeTOqgOLAbyN1ZEYQBXqblxSnDLsGTPzUw+L0UDjE8Y9i/ceS5B7nV7n9VqhCYkSUtyETlykaDUcPxLpX7PdmYMH2GmjEl81JzLMznEpNaPmBztZHKQk3Mu/QXfo3O2NrS0Xr9h3bo92EcAJ1gciX5oyJKqYZL40xUrNo4eVbnq3LnzDAci1yNKVxO8uPH5To5UVVWRBwUivXaz0ZQNkWcRZB0ac4rS0dnKdfBy47CRIzasuv32w3nlI94fmZf+mzRteKTQW8fsmaCneRxrCivMHTX4k8SQxqFP04Z855mgR6L/2cvMnTpR1DvS48esxAnKaQaVWjogJDGLJmVlrd+7b3+ezWIOI31+HYgwMkokVjThOxEZtCILRWFh1SiPNCtZkTVGpteZTuRnZZ2hcae//Hz3z5cvOd3a3r40Eh452sM4IRyVPGar4Uup13eku6dtkVNnnC74mSxBGAQurHDhgDUqRdNoPmIpnnSDouTa2vvJ3JHI0PmYKm61v/xl81+3bbuFWSwC6RH1AREVCXr/hyumr6+XmGjN1M2f1LKlMs1/oxD6ShYs41i3bSjv1zuffHTDuhVENUwlyqkUferZXYnaUJ9YUJDmj0cBi2+64aFyW+ReqeUDKRxt5XVamxSwThabjXnPaWauWPz7WQWhwdtDZHj4NA6YkN6pSA3qJ7gvaCNAv6vEBu8ONbmjn7iDWqYVmRLkzLxHFiS71fIRTaakB9SMxBDily+c07l48YJWQgLiqXK9tbGxz+9uAzujiHUNLBpxCzpfHTN2HJ938tGVa3OmzhrDqmZmYDk194HIyECC4jcFZ8LTcYK/FAd/ZtpPNe/0Mqh8l2ipWOO6yFa9aFHqJx2But5g3YmMxAlFEVM20xgSDowuLniX1sKxEfZVj2XUw2twRhURZHexA4kqfaLNWKZV2mB6OyGhel7hNIyLNilJSqPRbCmsmeAaepMR2Sp/xaSvOoLhQ0fPnP/w5W1PE6HSMtIznrJZbB+DKFsHwX7B67cigknqxQziEr0iCPfPumTYX099ePaFXmvZr8IaW9jpsG++csGCVtAH12Fq0KguDISIi1IV9G9P/4EEmzBZuDYvyThXG5BZQIKfFCGJdIarSBzPIgpiW07jCbv0vN+l53Iqkp1p1wzNHNs5fdTw5//2yqtJBpOxt7K87D6srUYdqAd0Q90UP98qWv3WSh3W4evrC2uZlLH9wFf7P2/yMJ3R8vItCxfuoN7q6gV04xQTQXW8mp7u6Xei3PjRFYvH2HvWWrxfmEOBw3AlOp4p8RMnDuehek6SceTjPyF1n31Zaj74mNy053HGGo8npmrllWPLSxa4fYGORz76Qj3rpRyeTK6606Cfb0UEY2RYBeqXcUCwAwlS3y1Xz21JddpfMRh0m5FI9dFFDVmVQevRZSWZbFBsaPJV40sfnZIReiJd35wW7juJgF3DIwPB8DjeZAfVNAZ5lUHQGHHwY0rgonKjfPaDjfJn22sl1nJczmMdM1yH33yuaNZ1o2g/EE4NUgft+71WS9UTpKwaHFwbzWZzkPf5TIgi3eS4iDIoA+sRErRRcmnlmHnZym+zze7JOtaCPCQAohsEEqd/INE/jVACdojVcEKPPMobEtTQPtFiYuG+FgV+S0lzpfJ+ycBOhLK+0uRV3rH10Y1v5OMo21ZZieuIQyRmX2dR//Lf/0vc2rVrl4DLTbmjo4wzGA4Iu3fvDjFL2sQVE51b8hyhIil0EnEg7oc4UgpZpRpSD5UfcfRVSuGnzS2wCByM3SQjjuNYt49nFqOeJVuBvOxV9CKL9nG5mrO60ceKJ82srlm26ChBScTElYUQX+/7IKcLG/WYEgNpIsM32fcLS25F4bIC+flCe8cIJdIaQU4khKIi7w4oLILRCQaFmfWKSn2aSNwgFD19POv1cyzdLuO7X+wozT7TwbMEI8eSrDzzh2U5GAwqXeJYwW3P+1tve8/at956rRNLnMPzvbEWxnytqEREqy4nJ2cqjkYnizzv232689Pq9PBto9OC17DIKZxaCYgGBL6ll2NmHXQB9qDHzzOXpZ/qKmcAswi7Se2IJQGwDEvG4VEY3ed4+zjW2E0IKiqH4IAUXgmwY8EKzplXcdakE097vN5PcCrz3Lea36+B398wwEGc09Lh9Bq9XoszWeG8ztiwyOQ5WeD3N8oGEZxGpNvlZcwKLrgssqoHeo3MWnp5JE8c02sUhvMGlS16UQHQQEbi4HD7ORYFR0xaBeNwWh8CMg6JCbyWkyNMDltNnCEtbW9OatJf2jrbpzscifN/ECKQR0qcVN7jxN1vNBofwFHPf358slGb627b5jRaCrpb+ySdTa+JRmVcy5JooIZYRTHLArEKmiBmUY4ZgAjZCerT4R0RA/MGOebE+XvclFK/AZwJY7wWIodvRYbJMMJoBCKhrp/V1LwOmN7esmVLyg9CJI4E6MitWbPmcXzH9aR0zeKfpFo1fsYj7YUtZQE6O+KxeczUEvYENCkzFXrvZy/9KkAAF5xoI+tFLTSKZkOa1JAkCgw8QXhCXPh5dQisdWoiFydsYxx5TPtBheyuTOkozRo7f7ElKWOIRaN3gGQwp0h+qJC8UyEk+t/6TS2Z238UiBIGCABYB7GiQvaNxvBw4BIQ0OpMaiuQV5p7mPyVR2CdLc25t86dSyf4qrenqPXHFPW/dJ599jXVRTf6gkMnVZTMdXd023paTykmswFwhKDEAjNBnHTYJQq7QqJCKJFj7n/v3zqO12CEQSgczVqh5AKzcb0wxbwsCmbZra/QWHLKzjkTLG2eSLSqpKSkE1eCDfE1fggy8Tm077BZV1zxc5jWySOHl2c7Zb/Qtv9JxekSOI2oZ809EcpjWKZDVpWY/EO7l2N2Iykx6c5ghCAciLzAB3BCAyQUdr7Rw6xg7pCiSyWPrGH1Pk7QJOV2Di0uvrPykkt2wfnejrx9GPT04ThQ/1tEVH9CPmTSpEmX5+TkbMW1GVH4CYfLObLMZbm66f2tzOv+HMfILk7GIUNTr2ZANzxBhFngSCZCaphS9b1f6EiLIYIUgyleBssE0yQyfeIoOalwnOzmDeLJlm7G6YyfFucX3r9ixfLX4/qJnH047jFh5H9AiYUkqiAjP1iLkKUC94Q1CFdOFF8xe9zSSZfs1HedSf9q39aINVGrsejhrWGuevwaWCRetUwuSxRGIAylJqDxFzPBBAjPOxUB14aGhBxFn1yqSGaH6OX0rKXH69YI4vaK8rK1N9xwQwOGcojzRCChhieEwg9ChCbEy4svvpiB29teJFV006uWJUuW3e3pbFmfxrpYhr4tqoQ6OVx/wGD7wJVI/2ayA6cpdkUQrUzQ6ZmoNSiC3sBEg57xJjtuv/RCRGNifk6L2CvcBW/+YYrd9qf7HniAuBChRA0PBbR09sZBvHhKj380InHgsaCIxEq9FisqKbmzuHToI3mpjqDR355gM2pZgjOFafQ6UD4KiotM1JuYRmdElEfcAlcEiJigY76+EOv2+lhvIOgJRqKnoesHzDrx5WuvXfgBTvBxRzJwRd5vmeMAxOofjQgQGDDdRB2sV4C7wleKiws/jAqGZzraW5fZdJrRCTabgxd5qxSVRDrzFTUaOvvF1ZsSDPThyjYS8XACfyYqScfhQ46a9NrDxmi0/u7aWiRtaiG9JOuqciHW9rXqBznEwbNjwKv/a0LtE8ZNuBKXn3xp6dB10JlT69c/fcgb7szo6nNn9HS77XDzGkQtfBAX/ywSjODsN5yWkdza6+tpeHLTk9rLp03JCocjDrfHk/nZ4SPkn+h/XXopmkCQ+p1I0P4/miM0GWXgwgV36s9C8UMPPfTQYrQTt4hL31sqK4dXFxQU32lPSEgWRBHRGdKQvj4dLoXc+B+APxw4cOD52CIEq2povmnRH80RWoyoBQWkxbXp6ekRZJGfxzYhCqprU2qq/m8QdezcqeAOke4WcZTC6SZMnPjvwysqloCTOxG3bUpKSjqCdj/+kyLx/PnzM2Ha78H40tmzZz88a9as0GCrGdtnoPqnEIkhQYuF4WE34S5EzaupAYiQaby4cDglpFRVQfi/qLSkZBFuvO6pqan53UUDG/H931jjAOpbcW1XgPoIROxbufLPitZF+3/vJykteQ7bzJkz34Y1OrFu3bob8U3/nCm0tLRI4KAKE8wqLSbhvMyBS9TIkiVLSOz+/wuoR/+tM2DJvmlH9KsSMG3atOS7au7a/fDDD99M49CuJbEZPIe+Ywd+8eYL+uON8fp/AI0GPXChVBvnAAAAAElFTkSuQmCC'); } /* Brian QandA */

Unfortunately, when I try this in the new block definition file:

class BrianFAQBlockCss < Asciidoctor::Extensions::DocinfoProcessor
  use_dsl

  def process doc
    '<style>
.admonitionblock td.icon .icon-brianfaq:before {content: url('data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDA3LTA2LTIwVDIwOjAxOjU5PC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgNy4wPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjMwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjMwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzIwMDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44NDU3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'); }
</style>'
  end

It throws errors when I try to run it through asciidoctor. Can I not use base64 images this way?

Also, how do I get the new blocks to work as paragraphs too? E.g.

THINKSPOT: This is a think spot

Rather than always having to use block mode:

[THINKSPOT]
====
This is a think spot
====
paulvickers commented 8 years ago

Any suggestions on the base64 question?

kwoot commented 3 years ago

As an add-on question to the lovely discussion above. How hard is it to make a custom admonition block optional? So, if attribute "Teacher" is set, then all "Teacher" admonition blocks are included, otherwise they're not. In usecase lingo: An an author of school books I would like to have one source files that an be processed to a students- and to a teachers-edition (with extra included blocks to guide/hint the teaching process). I know I can create conditional text and that would work, but I' m just spoiled by all the fancy stuff Asciidoctor can do for me. :-)

mojavelinux commented 3 years ago

@kwoot I encourage you to direct your question to https://asciidoctor.zulipchat.com, where we can discuss usage scenarios as a community (without risk of going off topic).

mojavelinux commented 10 months ago

There is a custom admonition block extension in this lab. That's as far as we are going to take it here.