Thank you so much for your help. I fixed the problem of writemime calling 
display and am using the latest IJulia master. I can get (some) markdown to 
display correctly when the button is clicked (though line breaks don't work 
as expected). However, I have two problems:

   1. I can't get LaTeX to display in Markdown using writemime. The display 
   function works perfectly, but writemime does not. Are LaTeX equations 
   currently unsupported, or did I mess something up?
   2. The text doesn't clear when I click the button off. I've tried 
   replacing output by printing "" and clearing output with IJulia.
   clear_output(false), but no luck.

Here's what I'm doing:

import Base: writemime, show, write

function write(io::IO, x::Revealable)
    write(io, x.content)
end

function writemime(io::IO, ::MIME"text/markdown", x::Revealable)
    if x.show
        write(io, x)
    else
        #write(io,"")   <-- I tried this too without success
        IJulia.clear_output(false)
    end
end

function show(io::IO, x::Revealable)
    Base.print_quoted_literal(io, x.content)
end

Here's the whole thing if you want to run it:
using Reactive
using Interact
using IJulia

type Revealable
    content::ASCIIString
    label::ASCIIString
    show::Bool
end

function revealable(x::Revealable)
    @manipulate for n in togglebutton(; label=string("Show/Hide", x.label == 
"" ? "" : string(" ", uppercase(x.label[1]),x.label[2:end])), value=x.show, 
signal=Input(x.show))
        x.show = n
        x
    end
end

import Base: writemime, show, write

function write(io::IO, x::Revealable)
    write(io, x.content)
end

function writemime(io::IO, ::MIME"text/markdown", x::Revealable)
    if x.show
        write(io, x)
    else
        #write(io,"")   <-- I tried this too without success
        IJulia.clear_output(false)
    end
end

function show(io::IO, x::Revealable)
    Base.print_quoted_literal(io, x.content)
end

### To run it:
r = Revealable("""#This is an *awesome* equation: \$e^u \\frac{du}{dx} e^x 
dx\$.""","example",false)
revealable(r)



On Friday, July 17, 2015 at 7:06:37 AM UTC-7, Steven G. Johnson wrote:
>
>  
>
>> function writemime(stream, ::MIME"text/latex", x::Revealable) #was 
>> ::MIME"text/markdown" in my actual code
>>    if x.show
>>         display(x.content)
>>     else
>>         display("")
>>     end
>> end
>>
>>
> This is wrong.  writemime should not call display.  It should just write 
> the LaTeX form of x to the (text) stream using print or write.  (You have 
> it backwards: display calls writemime.) 
>
> With regards to your other equation; for mixing equations and formatted 
> text, the latest IJulia master [Pkg.checkout("IJulia")] can display 
> text/markdown directly, including equations, e.g.:
>
>      display("text/markdown", "This is an *awesome* equation: \$e^u 
> \\frac{du}{dx} e^x dx\$.")
>
> So, in an @manipulate loop, you just need to return an object that knows 
> how to display itself as text/markdown (i.e. that has a writemime method to 
> output text/markdown text to an I/O stream).
>

Reply via email to