[Lift] Re: XML unescaping

2009-03-17 Thread Jeremy Mawson
Thanks David.


2009/3/17 David Pollak feeder.of.the.be...@gmail.com



 On Mon, Mar 16, 2009 at 8:51 PM, Jeremy Mawson 
 jeremy.mawson.w...@gmail.com wrote:

 Thanks Marc.  xml:group works nicely.

 For this exercise this is hypothetical, but it matches very closely a
 project I have enabled in the past using struts and JIBX...

 Say the data was sourced from an external party's service and there was a
 contractual agreement to not alter the data in any way? I.E. I'm stuck with
 the poorly formed HTML. Probably one could agree with the partner that the
 transformation to valid XHTML is appropriate, but I'll let the question
 stand anyway.

 Is poorly formed (but otherwise supported-by-browsers) HTML renderable via
 Lift at all?


 If it's supported by the browser, it will be rendered, but Firefox and
 Chrome will both complain about malformed XHTML.

 You could run the String through an HTML parser (there are a few floating
 around for Java that will parse poorly formed HTML) and then walk the nodes
 and build XML.  I would argue that this would satisfy any contractual
 requirements, although I no longer practice law, so I can't argue it on your
 behalf. :-)




 Cheers
 Jeremy



 2009/3/17 Marc Boschma marc+lift...@boschma.cxmarc%2blift...@boschma.cx
 


 On 17/03/2009, at 12:36 PM, Jeremy Mawson wrote:

 If I change the line to description -  *
 span{Unparsed(result.description)}/span*, it compiles but I have an
 unwanted span tag and worse ... if result.description is not well formed XML
 my page will fail to render! Firefox complains of an XML Parsing Error. The
 description field has an unmatched br tag (literally lt;brgt;) in the
 middle of it to force it onto two lines.


 Try description -
 xml:group{Unparsed(result.description)}/xml:group

 That wraps the string in a scala XML group node...

 With respect to the br tag, it should be br/ or br/br to be well
 formed. If you want to support non-well formed XML fro the database wouldn't
 you need to parse it and convert it to well formed first or upon retrieval ?

 Regards,

 Marc






 --
 Jeremy Mawson
 Senior Developer | Online Directories

 Sensis Pty Ltd
 222 Lonsdale St
 Melbourne 3000
 E: jeremy.maw...@sensis.com.au






 --
 Lift, the simply functional web framework http://liftweb.net
 Beginning Scala http://www.apress.com/book/view/1430219890
 Follow me: http://twitter.com/dpp
 Git some: http://github.com/dpp


 



-- 
Jeremy Mawson
Senior Developer | Online Directories

Sensis Pty Ltd
222 Lonsdale St
Melbourne 3000
E: jeremy.maw...@sensis.com.au

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-17 Thread TylerWeir

 scala val title = Catsby amp; Twisp

+1 for the Penny Arcade reference.

On Mar 16, 8:51 am, Derek Chen-Becker dchenbec...@gmail.com wrote:
 Well, it may be that the XML output portion of Scala is escaping your
 ampersands a second time. For instance, check out this session in the
 interpreter:

 scala val title = Catsby amp; Twisp
 title: java.lang.String = Catsby amp; Twisp

 scala val escaped = span{title}/span
 escaped: scala.xml.Elem = spanCatsby amp;amp; Twisp/span

 scala val unescaped = span{ scala.xml.Unparsed(title) }/span
 unescaped: scala.xml.Elem = spanCatsby amp; Twisp/span

 Note that if you embed a String within XML elements, Scala will
 automatically escape any ampersands unless you wrap the String in a
 scala.xml.Unparsed instance. The second test there will render in the
 browser like Catsby amp; Twisp, because the ampersand was escaped. I know
 you're asking about the Utility object, but I think that would be fixing the
 symptom rather than the cause.

 Derek

 On Mon, Mar 16, 2009 at 6:13 AM, Jeremy Mawson jeremy.mawson.w...@gmail.com

  wrote:
  Hi,

  I've been mucking around with lift and having a great time. I have cooked
  up a page that retrieves XML from a datasource and renders it. However some
  of the text elements I extract are HTML encoded. When rendered in the
  browser it looks like HTML code, rather than rendered HTML.

  I looked for a scala utility to unescape this, found
  scala.xml.Utility.unescape, but could not get it working.

  Here's how I've tried to use it.

        val title = Utility.unescape(result \ title text, new
  StringBuilder)

  Unfortunately this always gives me a value of null, even though
  result.\(title).text is something like - Tsvangiraiamp;#39;s wife killed
  inlt;bgt;carlt;/bgt;crash - ABC News

  What could I be doing wrong? I realise this is probably a plain old scala
  question, but I hope someone here can help me anyway.

  Thanks
  Jeremy


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-17 Thread Derek Chen-Becker
Glad someone caught it :)

On Tue, Mar 17, 2009 at 2:32 AM, TylerWeir tyler.w...@gmail.com wrote:


  scala val title = Catsby amp; Twisp

 +1 for the Penny Arcade reference.

 On Mar 16, 8:51 am, Derek Chen-Becker dchenbec...@gmail.com wrote:
  Well, it may be that the XML output portion of Scala is escaping your
  ampersands a second time. For instance, check out this session in the
  interpreter:
 
  scala val title = Catsby amp; Twisp
  title: java.lang.String = Catsby amp; Twisp
 
  scala val escaped = span{title}/span
  escaped: scala.xml.Elem = spanCatsby amp;amp; Twisp/span
 
  scala val unescaped = span{ scala.xml.Unparsed(title) }/span
  unescaped: scala.xml.Elem = spanCatsby amp; Twisp/span
 
  Note that if you embed a String within XML elements, Scala will
  automatically escape any ampersands unless you wrap the String in a
  scala.xml.Unparsed instance. The second test there will render in the
  browser like Catsby amp; Twisp, because the ampersand was escaped. I
 know
  you're asking about the Utility object, but I think that would be fixing
 the
  symptom rather than the cause.
 
  Derek
 
  On Mon, Mar 16, 2009 at 6:13 AM, Jeremy Mawson 
 jeremy.mawson.w...@gmail.com
 
   wrote:
   Hi,
 
   I've been mucking around with lift and having a great time. I have
 cooked
   up a page that retrieves XML from a datasource and renders it. However
 some
   of the text elements I extract are HTML encoded. When rendered in the
   browser it looks like HTML code, rather than rendered HTML.
 
   I looked for a scala utility to unescape this, found
   scala.xml.Utility.unescape, but could not get it working.
 
   Here's how I've tried to use it.
 
 val title = Utility.unescape(result \ title text, new
   StringBuilder)
 
   Unfortunately this always gives me a value of null, even though
   result.\(title).text is something like - Tsvangiraiamp;#39;s wife
 killed
   inlt;bgt;carlt;/bgt;crash - ABC News
 
   What could I be doing wrong? I realise this is probably a plain old
 scala
   question, but I hope someone here can help me anyway.
 
   Thanks
   Jeremy
 
 
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-16 Thread Derek Chen-Becker
Well, it may be that the XML output portion of Scala is escaping your
ampersands a second time. For instance, check out this session in the
interpreter:

scala val title = Catsby amp; Twisp
title: java.lang.String = Catsby amp; Twisp

scala val escaped = span{title}/span
escaped: scala.xml.Elem = spanCatsby amp;amp; Twisp/span

scala val unescaped = span{ scala.xml.Unparsed(title) }/span
unescaped: scala.xml.Elem = spanCatsby amp; Twisp/span


Note that if you embed a String within XML elements, Scala will
automatically escape any ampersands unless you wrap the String in a
scala.xml.Unparsed instance. The second test there will render in the
browser like Catsby amp; Twisp, because the ampersand was escaped. I know
you're asking about the Utility object, but I think that would be fixing the
symptom rather than the cause.

Derek

On Mon, Mar 16, 2009 at 6:13 AM, Jeremy Mawson jeremy.mawson.w...@gmail.com
 wrote:

 Hi,

 I've been mucking around with lift and having a great time. I have cooked
 up a page that retrieves XML from a datasource and renders it. However some
 of the text elements I extract are HTML encoded. When rendered in the
 browser it looks like HTML code, rather than rendered HTML.

 I looked for a scala utility to unescape this, found
 scala.xml.Utility.unescape, but could not get it working.

 Here's how I've tried to use it.

   val title = Utility.unescape(result \ title text, new
 StringBuilder)

 Unfortunately this always gives me a value of null, even though
 result.\(title).text is something like - Tsvangiraiamp;#39;s wife killed
 inlt;bgt;carlt;/bgt;crash - ABC News

 What could I be doing wrong? I realise this is probably a plain old scala
 question, but I hope someone here can help me anyway.

 Thanks
 Jeremy

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-16 Thread Jeremy Mawson
Thanks Derek. Familiarity with the APIs is one of the tricks when moving to
a new language I guess.

This worked for me, but I have a follow-on issue.

Just as a background I am rendering search results which are provided as
XML.  Here's my binding code:
  result = bind(entry, chooseTemplate(listings, listing, xhtml),
title - a href={result.url}{Unparsed(result.title)}/a,
description - Unparsed(result.description),
link - Text(result.url))
})

This fails to compile as the Unparsed in the description line is not a valid
parameter for the bind function. (I'm not sure why, it's just a fancy Node
like any other right?) The exact error is:

overloaded method value bind with alternatives
(String,net.liftweb.util.Box[(scala.xml.NodeSeq) =
scala.xml.NodeSeq],net.liftweb.util.Box[(scala.xml.PrefixedAttribute) =
scala.xml.MetaData],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)scala.xml.NodeSeq
and
(String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)scala.xml.NodeSeq
cannot be applied to
(java.lang.String,scala.xml.NodeSeq,net.liftweb.util.Helpers.TheBindParam,(String,
scala.xml.Unparsed),net.liftweb.util.Helpers.TheBindParam)

If I change that line to * description -
Text(Unparsed(result.description))* it compiles, but the Text constructor
will re-escape so I'm back to square one.

If I change the line to description -  *
span{Unparsed(result.description)}/span*, it compiles but I have an
unwanted span tag and worse ... if result.description is not well formed XML
my page will fail to render! Firefox complains of an XML Parsing Error. The
description field has an unmatched br tag (literally lt;brgt;) in the
middle of it to force it onto two lines.

So my first question is, how can I avoid the extra span tag?
Secondly, can I render (!X)HTML via Lift?

Thanks
Jeremy


2009/3/17 Derek Chen-Becker dchenbec...@gmail.com

 Well, it may be that the XML output portion of Scala is escaping your
 ampersands a second time. For instance, check out this session in the
 interpreter:

 scala val title = Catsby amp; Twisp
 title: java.lang.String = Catsby amp; Twisp

 scala val escaped = span{title}/span
 escaped: scala.xml.Elem = spanCatsby amp;amp; Twisp/span

 scala val unescaped = span{ scala.xml.Unparsed(title) }/span
 unescaped: scala.xml.Elem = spanCatsby amp; Twisp/span


 Note that if you embed a String within XML elements, Scala will
 automatically escape any ampersands unless you wrap the String in a
 scala.xml.Unparsed instance. The second test there will render in the
 browser like Catsby amp; Twisp, because the ampersand was escaped. I know
 you're asking about the Utility object, but I think that would be fixing the
 symptom rather than the cause.

 Derek


 On Mon, Mar 16, 2009 at 6:13 AM, Jeremy Mawson 
 jeremy.mawson.w...@gmail.com wrote:

 Hi,

 I've been mucking around with lift and having a great time. I have cooked
 up a page that retrieves XML from a datasource and renders it. However some
 of the text elements I extract are HTML encoded. When rendered in the
 browser it looks like HTML code, rather than rendered HTML.

 I looked for a scala utility to unescape this, found
 scala.xml.Utility.unescape, but could not get it working.

 Here's how I've tried to use it.

   val title = Utility.unescape(result \ title text, new
 StringBuilder)

 Unfortunately this always gives me a value of null, even though
 result.\(title).text is something like - Tsvangiraiamp;#39;s wife killed
 inlt;bgt;carlt;/bgt;crash - ABC News

 What could I be doing wrong? I realise this is probably a plain old scala
 question, but I hope someone here can help me anyway.

 Thanks
 Jeremy




 



-- 
Jeremy Mawson
Senior Developer | Online Directories

Sensis Pty Ltd
222 Lonsdale St
Melbourne 3000
E: jeremy.maw...@sensis.com.au

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-16 Thread Marc Boschma

On 17/03/2009, at 12:36 PM, Jeremy Mawson wrote:

 If I change the line to description -   
 span{Unparsed(result.description)}/span, it compiles but I have  
 an unwanted span tag and worse ... if result.description is not well  
 formed XML my page will fail to render! Firefox complains of an XML  
 Parsing Error. The description field has an unmatched br tag  
 (literally lt;brgt;) in the middle of it to force it onto two lines.


Try description - xml:group{Unparsed(result.description)}/ 
xml:group

That wraps the string in a scala XML group node...

With respect to the br tag, it should be br/ or br/br to be  
well formed. If you want to support non-well formed XML fro the  
database wouldn't you need to parse it and convert it to well formed  
first or upon retrieval ?

Regards,

Marc


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-16 Thread Jeremy Mawson
Thanks Marc.  xml:group works nicely.

For this exercise this is hypothetical, but it matches very closely a
project I have enabled in the past using struts and JIBX...

Say the data was sourced from an external party's service and there was a
contractual agreement to not alter the data in any way? I.E. I'm stuck with
the poorly formed HTML. Probably one could agree with the partner that the
transformation to valid XHTML is appropriate, but I'll let the question
stand anyway.

Is poorly formed (but otherwise supported-by-browsers) HTML renderable via
Lift at all?

Cheers
Jeremy



2009/3/17 Marc Boschma marc+lift...@boschma.cx marc%2blift...@boschma.cx


 On 17/03/2009, at 12:36 PM, Jeremy Mawson wrote:

 If I change the line to description -  *
 span{Unparsed(result.description)}/span*, it compiles but I have an
 unwanted span tag and worse ... if result.description is not well formed XML
 my page will fail to render! Firefox complains of an XML Parsing Error. The
 description field has an unmatched br tag (literally lt;brgt;) in the
 middle of it to force it onto two lines.


 Try description - xml:group{Unparsed(result.description)}/xml:group

 That wraps the string in a scala XML group node...

 With respect to the br tag, it should be br/ or br/br to be well
 formed. If you want to support non-well formed XML fro the database wouldn't
 you need to parse it and convert it to well formed first or upon retrieval ?

 Regards,

 Marc


 



-- 
Jeremy Mawson
Senior Developer | Online Directories

Sensis Pty Ltd
222 Lonsdale St
Melbourne 3000
E: jeremy.maw...@sensis.com.au

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-16 Thread David Pollak
On Mon, Mar 16, 2009 at 8:51 PM, Jeremy Mawson jeremy.mawson.w...@gmail.com
 wrote:

 Thanks Marc.  xml:group works nicely.

 For this exercise this is hypothetical, but it matches very closely a
 project I have enabled in the past using struts and JIBX...

 Say the data was sourced from an external party's service and there was a
 contractual agreement to not alter the data in any way? I.E. I'm stuck with
 the poorly formed HTML. Probably one could agree with the partner that the
 transformation to valid XHTML is appropriate, but I'll let the question
 stand anyway.

 Is poorly formed (but otherwise supported-by-browsers) HTML renderable via
 Lift at all?


If it's supported by the browser, it will be rendered, but Firefox and
Chrome will both complain about malformed XHTML.

You could run the String through an HTML parser (there are a few floating
around for Java that will parse poorly formed HTML) and then walk the nodes
and build XML.  I would argue that this would satisfy any contractual
requirements, although I no longer practice law, so I can't argue it on your
behalf. :-)




 Cheers
 Jeremy



 2009/3/17 Marc Boschma marc+lift...@boschma.cxmarc%2blift...@boschma.cx
 


 On 17/03/2009, at 12:36 PM, Jeremy Mawson wrote:

 If I change the line to description -  *
 span{Unparsed(result.description)}/span*, it compiles but I have an
 unwanted span tag and worse ... if result.description is not well formed XML
 my page will fail to render! Firefox complains of an XML Parsing Error. The
 description field has an unmatched br tag (literally lt;brgt;) in the
 middle of it to force it onto two lines.


 Try description - xml:group{Unparsed(result.description)}/xml:group

 That wraps the string in a scala XML group node...

 With respect to the br tag, it should be br/ or br/br to be well
 formed. If you want to support non-well formed XML fro the database wouldn't
 you need to parse it and convert it to well formed first or upon retrieval ?

 Regards,

 Marc






 --
 Jeremy Mawson
 Senior Developer | Online Directories

 Sensis Pty Ltd
 222 Lonsdale St
 Melbourne 3000
 E: jeremy.maw...@sensis.com.au


 



-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: XML unescaping

2009-03-16 Thread Marc Boschma
To quote David from a previous thread on the mailing list:

 I've enhanced LiftRules as follows:

  /**
  * A partial function that determines content type based on an  
 incoming
  * RequestState and Accept header
  */
  var determineContentType:
  PartialFunction[(Can[RequestState], Can[String]), String] = {
case (_, Full(accept)) if
 accept.toLowerCase.contains(application/xhtml+xml) =
  application/xhtml+xml

case _ = text/html
  }

 You can change the determineContentType Partial Function in Boot.scala
 to accomplish your goals.


So maybe you could add in Boot.scala

determineContentType = {
case (Full(req), _) if req.path match {
case text :: only :: _ = true
case _ = false} = text/html
} orElse determineContentType

which would set the return type of any page under and including /text/ 
only to text/html and if not under that would chain to the standard  
lift content type determine partial function...

Obviously you could define your own function to check the path rather  
than in-line it...

David: Would req.param(x) be the equivalent to S.param(x) ??

Regards,

Marc


On 17/03/2009, at 2:58 PM, David Pollak wrote:



 On Mon, Mar 16, 2009 at 8:51 PM, Jeremy Mawson jeremy.mawson.w...@gmail.com 
  wrote:
 Thanks Marc.  xml:group works nicely.

 For this exercise this is hypothetical, but it matches very closely  
 a project I have enabled in the past using struts and JIBX...

 Say the data was sourced from an external party's service and there  
 was a contractual agreement to not alter the data in any way? I.E.  
 I'm stuck with the poorly formed HTML. Probably one could agree with  
 the partner that the transformation to valid XHTML is appropriate,  
 but I'll let the question stand anyway.

 Is poorly formed (but otherwise supported-by-browsers) HTML  
 renderable via Lift at all?

 If it's supported by the browser, it will be rendered, but Firefox  
 and Chrome will both complain about malformed XHTML.

 You could run the String through an HTML parser (there are a few  
 floating around for Java that will parse poorly formed HTML) and  
 then walk the nodes and build XML.  I would argue that this would  
 satisfy any contractual requirements, although I no longer practice  
 law, so I can't argue it on your behalf. :-)



 Cheers
 Jeremy



 2009/3/17 Marc Boschma marc+lift...@boschma.cx


 On 17/03/2009, at 12:36 PM, Jeremy Mawson wrote:

 If I change the line to description -   
 span{Unparsed(result.description)}/span, it compiles but I have  
 an unwanted span tag and worse ... if result.description is not  
 well formed XML my page will fail to render! Firefox complains of  
 an XML Parsing Error. The description field has an unmatched br  
 tag (literally lt;brgt;) in the middle of it to force it onto two  
 lines.


 Try description - xml:group{Unparsed(result.description)}/ 
 xml:group

 That wraps the string in a scala XML group node...

 With respect to the br tag, it should be br/ or br/br to be  
 well formed. If you want to support non-well formed XML fro the  
 database wouldn't you need to parse it and convert it to well formed  
 first or upon retrieval ?

 Regards,

 Marc






 -- 
 Jeremy Mawson
 Senior Developer | Online Directories

 Sensis Pty Ltd
 222 Lonsdale St
 Melbourne 3000
 E: jeremy.maw...@sensis.com.au






 -- 
 Lift, the simply functional web framework http://liftweb.net
 Beginning Scala http://www.apress.com/book/view/1430219890
 Follow me: http://twitter.com/dpp
 Git some: http://github.com/dpp

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---