Tagz and entities

Is this how tagz.<< is supposed to work? It seems that << and #concat behave differently w.r.t. entity quoting.

require 'tagz'
include Tagz.globally

arrow = "&uarr;"
html = html_ {

···

___
   tagz << arrow
   ___
   tagz.concat arrow
   ___
   ___ arrow
}

puts html

__END__

Output:

<html>
&amp;uarr;
&uarr;

&uarr;
</html>

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

correct. escape in the normal case (<<) but concat works directly without quoting.

cheers.

a @ http://codeforpeople.com/

···

On Apr 2, 2009, at 4:48 PM, Joel VanderWerf wrote:

Is this how tagz.<< is supposed to work? It seems that << and #concat behave differently w.r.t. entity quoting.

--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama

ara.t.howard wrote:

Is this how tagz.<< is supposed to work? It seems that << and #concat behave differently w.r.t. entity quoting.

correct. escape in the normal case (<<) but concat works directly without quoting.

Thanks. That seems a bit arbitrary since these methods are the same for strings. It's something you just have to remember, but then forget when you come back to the code after a while.

Would it be possible for the object returned by #tagz to have a method, say #literally or #unescaped, which returns an object which delegates back to the original. On the original Tagz::Document, #<< and #concat have the same quoting behavior. On the delegator, they do not quote.

Just a thought...

···

On Apr 2, 2009, at 4:48 PM, Joel VanderWerf wrote:

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Thanks. That seems a bit arbitrary since these methods are the same for strings. It's something you just have to remember, but then forget when you come back to the code after a while.

yeah i can see that. i was thinking more of erb's concat - which appends literal objects.

Would it be possible for the object returned by #tagz to have a method, say #literally or #unescaped, which returns an object which delegates back to the original. On the original Tagz::Document, #<< and #concat have the same quoting behavior. On the delegator, they do not quote.

that is kinds of how it works already.

       def << string
         case string
           when Document
             super string.to_s
           else
             super XChar.escape(string.to_s)
         end
         self
       end

and anything returned by tagz *is* a document. you can even do

tagz << tagz('<blink> not escaped </blink>')

maybe i'll just reserver #write of unescaped writing - there needs to be one shortcut i think.

a @ http://codeforpeople.com/

···

On Apr 3, 2009, at 11:54 AM, Joel VanderWerf wrote:
--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama