Loading ...
Sorry, an error occurred while loading the content.

Re: [Cheetahtemplate-discuss] unicode troubles

Expand Messages
  • Tavis Rudd
    Sure. I ve just checked it in. I also got rid of that old Pager filter, which was a quick demonstration hack I added years ago, and the now redundant
    Message 1 of 30 , Mar 29, 2007
    • 0 Attachment
      Sure. I've just checked it in.

      I also got rid of that old Pager filter, which was a quick demonstration
      hack I added years ago, and the now redundant ReplaceNone filter. If
      anyone is relying on this, please say so now.

      I think we could get rid of that setting/settings stuff in
      Filter.__init__ which uses the DummyTemplate. I'm not aware of it ever
      having been used. Any objections?

      On Thu, 29 Mar 2007, Mike Orr wrote:

      > On 3/29/07, Tavis Rudd <tavis@...> wrote:
      >> Hi Miha,
      >> I'd put the template source as unicode strings in .py files instead of
      >> .tmpl files, import them, then give them to Cheetah with the source
      >> argument rather than the file argument.
      >>
      >> Unfortunately I know nothing about that WebEncode filter.'
      >
      > The problem is Cheetah/Filters.py line 213:
      >
      > s = str(val)
      >
      > This raises UnicodeEncodeError if it's a unicode string containing
      > non-ASCII characters. It should avoid converting it if it's already
      > unicode, as RawOrEncodedUnicode.filter does.
      >
      > The Filter, ReplaceNone, MaxLen, Pager, Strip, and StripSqueeze
      > filters are also broken the same way.
      >
      > Tavis, how about we rename RawOrEncodedUnicode to Filter, and make
      > every subclass call its .filter() method instead of str(). I'd also
      > change
      >
      > if type(val)==unicodeType:
      >
      > to
      >
      > if isinstance(val, unicode)
      >
      > This will make it work with unicode subclasses as PTY uses and Quixote
      > will soon use.
      >
      > I've been trying to make these changes myself but SourceForge's CVS
      > hasn't been cooperating.
      >
      > --
      > Mike Orr <sluggoster@...>
      >

      -------------------------------------------------------------------------
      Take Surveys. Earn Cash. Influence the Future of IT
      Join SourceForge.net's Techsay panel and you'll get the chance to share your
      opinions on IT & business topics through brief surveys-and earn cash
      http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
      _______________________________________________
      Cheetahtemplate-discuss mailing list
      Cheetahtemplate-discuss@...
      https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
    • Tavis Rudd
      One thing I d consider is adding a #unicode directive for use with .tmpl source files. It would indicate that Cheetah should output unicode strings for the
      Message 2 of 30 , Mar 29, 2007
      • 0 Attachment
        One thing I'd consider is adding a #unicode directive for use with .tmpl
        source files. It would indicate that Cheetah should output unicode
        strings for the template in all situations.
        The template objects created by all of these idioms
        Template.compile(file='foo.tmpl') # with #unicode in foo.tmpl
        Template.compile(source='''#unicode\n ...''')
        Template.compile(source=u'''some unicode string''')
        would return unicode strings from their render methods.

        I don't want to make unicode output the default behaviour as it
        will break existing applications, my own included, that expect encoded
        strings rather than decoded unicode objects as output.

        Tavis

        On Thu, 29 Mar 2007, Tavis Rudd wrote:

        > Hi Miha,
        > I'd put the template source as unicode strings in .py files instead of
        > .tmpl files, import them, then give them to Cheetah with the source
        > argument rather than the file argument.
        >
        > Unfortunately I know nothing about that WebEncode filter.
        >
        > Cheers,
        > Tavis
        >
        > On Thu, 29 Mar 2007, Miha Vrhovnik wrote:
        >
        >> - I feed cheetah with unicode strings
        >> - result MUST be unicode
        >> - files are supposed to be utf-8 encoded
        >> - I don't have control over template files as I'm using python as scripting language in my app. and everything I put to him is in unicode so that's what I expect when getting strings from it.
        >>
        >> Any recommendations?
        >>
        >> Mike said, that WebEncode filter is not unicode enabled and this is supposed to be anther reason for getting unicode errors.
        >>
        >> Regards,
        >> Miha
        >>
        >> "Tavis Rudd" <tavis@...> wrote on 29.3.2007 0:46:43:
        >>> You're misunderstanding how Python handles file encodings. Python doesn't
        >>> convert everything to unicode. If you have a utf-8 encoded Python
        >>> source file with a normal str object in it, the str remains a str
        >>> regardless of what encoded characters may be in it.
        >>>
        >>> If you want Cheetah to return a unicode object as output you must feed it
        >>> a unicode source parameter. Otherwise you can call .encode('...') on its
        >>> output to get a unicode object.
        >>>
        >>> On Mon, 8 Jan 2007, Miha Vrhovnik wrote:
        >>>
        >>>> "Brian Bird" <brian.bird@...> wrote on 8.1.2007 9:16:41:
        >>>>> I think the problem is that the file= argument expects to read in the file as bytes because there is nowhere to specify
        >>>>> the encoding (perhaps there should be an extra keyword argument called encoding= and if specified then Cheetah
        >>>> ... cut...
        >>>>
        >>>> Brian you are missing something.
        >>>> I told Cheettah that file encoding is utf-8 by this line: #encoding UTF-8 and that's why I'm expecting it to behave like python e.g convert everything to unicode.
        >>>>
        >>>> Regards,
        >>>> Miha
        >>>>
        >>>> --
        >>>> It's time to get rid of your current e-mail client ...
        >>>> ... and start using si.Mail.
        >>>>
        >>>> It's small & free. ( http://simail.sourceforge.net/ )
        >>>>
        >>>> -------------------------------------------------------------------------
        >>>> Take Surveys. Earn Cash. Influence the Future of IT
        >>>> Join SourceForge.net's Techsay panel and you'll get the chance to share your
        >>>> opinions on IT & business topics through brief surveys - and earn cash
        >>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
        >>>> _______________________________________________
        >>>> Cheetahtemplate-discuss mailing list
        >>>> Cheetahtemplate-discuss@...
        >>>> https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
        >>>>
        >>>
        >>> -------------------------------------------------------------------------
        >>> Take Surveys. Earn Cash. Influence the Future of IT
        >>> Join SourceForge.net's Techsay panel and you'll get the chance to share your
        >>> opinions on IT & business topics through brief surveys-and earn cash
        >>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
        >>> _______________________________________________
        >>> Cheetahtemplate-discuss mailing list
        >>> Cheetahtemplate-discuss@...
        >>> https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
        >>>
        >>
        >>
        >> --
        >> It's time to get rid of your current e-mail client ...
        >> ... and start using si.Mail.
        >>
        >> It's small & free. ( http://simail.sourceforge.net/ )
        >>
        >> -------------------------------------------------------------------------
        >> Take Surveys. Earn Cash. Influence the Future of IT
        >> Join SourceForge.net's Techsay panel and you'll get the chance to share your
        >> opinions on IT & business topics through brief surveys-and earn cash
        >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
        >> _______________________________________________
        >> Cheetahtemplate-discuss mailing list
        >> Cheetahtemplate-discuss@...
        >> https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
        >>
        >
        > -------------------------------------------------------------------------
        > Take Surveys. Earn Cash. Influence the Future of IT
        > Join SourceForge.net's Techsay panel and you'll get the chance to share your
        > opinions on IT & business topics through brief surveys-and earn cash
        > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
        > _______________________________________________
        > Cheetahtemplate-discuss mailing list
        > Cheetahtemplate-discuss@...
        > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
        >

        -------------------------------------------------------------------------
        Take Surveys. Earn Cash. Influence the Future of IT
        Join SourceForge.net's Techsay panel and you'll get the chance to share your
        opinions on IT & business topics through brief surveys-and earn cash
        http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
        _______________________________________________
        Cheetahtemplate-discuss mailing list
        Cheetahtemplate-discuss@...
        https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
      • Miha Vrhovnik
        Travis this would be very very good solution especially if it would take the #encoding line as input encoding to convert everything to unicode. Regards, Miha
        Message 3 of 30 , Mar 29, 2007
        • 0 Attachment
          Travis this would be very very good solution especially if it would take the #encoding line as input encoding to convert everything to unicode.

          Regards,
          Miha

          "Tavis Rudd" <tavis@...> wrote on 29.3.2007 20:40:49:
          >One thing I'd consider is adding a #unicode directive for use with .tmpl
          >source files. It would indicate that Cheetah should output unicode
          >strings for the template in all situations.
          >The template objects created by all of these idioms
          > Template.compile(file='foo.tmpl') # with #unicode in foo.tmpl
          > Template.compile(source='''#unicode\n ...''')
          > Template.compile(source=u'''some unicode string''')
          >would return unicode strings from their render methods.
          >
          >I don't want to make unicode output the default behaviour as it
          >will break existing applications, my own included, that expect encoded
          >strings rather than decoded unicode objects as output.
          >
          >Tavis
          >

          -------------------------------------------------------------------------
          Take Surveys. Earn Cash. Influence the Future of IT
          Join SourceForge.net's Techsay panel and you'll get the chance to share your
          opinions on IT & business topics through brief surveys-and earn cash
          http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
          _______________________________________________
          Cheetahtemplate-discuss mailing list
          Cheetahtemplate-discuss@...
          https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
        • Mike Orr
          ... Agreed, both Filter.__init__ and DummyTemplate can go. They should have gone when #settings was eliminated. Filter.generateAutoArgs can go too. Does
          Message 4 of 30 , Mar 29, 2007
          • 0 Attachment
            On 3/29/07, Tavis Rudd <tavis@...> wrote:
            > I think we could get rid of that setting/settings stuff in
            > Filter.__init__ which uses the DummyTemplate. I'm not aware of it ever
            > having been used. Any objections?

            Agreed, both Filter.__init__ and DummyTemplate can go. They should
            have gone when #settings was eliminated.

            Filter.generateAutoArgs can go too. Does Cheetah ever call it?
            Apparently no filter except Pager has ever needed it.

            --
            Mike Orr <sluggoster@...>

            -------------------------------------------------------------------------
            Take Surveys. Earn Cash. Influence the Future of IT
            Join SourceForge.net's Techsay panel and you'll get the chance to share your
            opinions on IT & business topics through brief surveys-and earn cash
            http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
            _______________________________________________
            Cheetahtemplate-discuss mailing list
            Cheetahtemplate-discuss@...
            https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
          • Tavis Rudd
            The #unicode and #encoding directives could be combined in the form: #unicode utf-8 #unicode latin-1 etc. ... Take Surveys. Earn Cash. Influence the Future of
            Message 5 of 30 , Mar 29, 2007
            • 0 Attachment
              The #unicode and #encoding directives could be combined in the form:
              #unicode utf-8
              #unicode latin-1
              etc.

              On Thu, 29 Mar 2007, Miha Vrhovnik wrote:

              > Travis this would be very very good solution especially if it would take the #encoding line as input encoding to convert everything to unicode.
              >
              > Regards,
              > Miha
              >
              > "Tavis Rudd" <tavis@...> wrote on 29.3.2007 20:40:49:
              >> One thing I'd consider is adding a #unicode directive for use with .tmpl
              >> source files. It would indicate that Cheetah should output unicode
              >> strings for the template in all situations.
              >> The template objects created by all of these idioms
              >> Template.compile(file='foo.tmpl') # with #unicode in foo.tmpl
              >> Template.compile(source='''#unicode\n ...''')
              >> Template.compile(source=u'''some unicode string''')
              >> would return unicode strings from their render methods.
              >>
              >> I don't want to make unicode output the default behaviour as it
              >> will break existing applications, my own included, that expect encoded
              >> strings rather than decoded unicode objects as output.
              >>
              >> Tavis
              >>
              >
              > -------------------------------------------------------------------------
              > Take Surveys. Earn Cash. Influence the Future of IT
              > Join SourceForge.net's Techsay panel and you'll get the chance to share your
              > opinions on IT & business topics through brief surveys-and earn cash
              > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
              > _______________________________________________
              > Cheetahtemplate-discuss mailing list
              > Cheetahtemplate-discuss@...
              > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
              >

              -------------------------------------------------------------------------
              Take Surveys. Earn Cash. Influence the Future of IT
              Join SourceForge.net's Techsay panel and you'll get the chance to share your
              opinions on IT & business topics through brief surveys-and earn cash
              http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
              _______________________________________________
              Cheetahtemplate-discuss mailing list
              Cheetahtemplate-discuss@...
              https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
            • Mike Orr
              ... Hmm. What about this? #unicode = Make output unicode. #unicode FOO = Make output unicode, and set input encoding. (Does this set the
              Message 6 of 30 , Mar 29, 2007
              • 0 Attachment
                On 3/29/07, Tavis Rudd <tavis@...> wrote:
                > The #unicode and #encoding directives could be combined in the form:
                > #unicode utf-8
                > #unicode latin-1
                > etc.

                Hmm. What about this?

                #unicode => Make output unicode.
                #unicode FOO => Make output unicode, and set input encoding.
                (Does this set the placeholder values' encoding too?)
                no directive => Template must be ASCII. Output will be unicode if
                any placeholder value is unicode. (Possible exception if another value is a
                non-ASCII str.)


                #encoding sets the input encoding but does not make the output unicode.
                Its original purpose was to provide an "# -*- encoding" for non-ASCII
                templates, something that Python 2.4 suddenly required. I guess it
                should have made the output unicode too. But now there are lots of
                sites using it as is. Would they break if it started outputting
                unicode?

                --
                Mike Orr <sluggoster@...>

                -------------------------------------------------------------------------
                Take Surveys. Earn Cash. Influence the Future of IT
                Join SourceForge.net's Techsay panel and you'll get the chance to share your
                opinions on IT & business topics through brief surveys-and earn cash
                http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                _______________________________________________
                Cheetahtemplate-discuss mailing list
                Cheetahtemplate-discuss@...
                https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
              • Tavis Rudd
                ... using the system default input encoding ... No, it wouldn t do anything to the the encoding of placeholder values by default. However, we could provide a
                Message 7 of 30 , Mar 29, 2007
                • 0 Attachment
                  On Thu, 29 Mar 2007, Mike Orr wrote:
                  > On 3/29/07, Tavis Rudd <tavis@...> wrote:
                  >> The #unicode and #encoding directives could be combined in the form:
                  >> # unicode utf-8
                  >> # unicode latin-1
                  >> etc.
                  >
                  > Hmm. What about this?
                  >
                  > # unicode => Make output unicode.
                  using the system default input encoding

                  > # unicode FOO => Make output unicode, and set input encoding.
                  > (Does this set the placeholder values' encoding too?)
                  No, it wouldn't do anything to the the encoding of placeholder values by
                  default. However, we could provide a filter that does that.

                  > no directive => Template must be ASCII. Output will be unicode if
                  > any placeholder value is unicode. (Possible exception if another value
                  > is a non-ASCII str.)
                  Well, technically the requirement isn't always ASCII, it's whatever the
                  default encoding is set to.

                  > #encoding sets the input encoding but does not make the output unicode.
                  > Its original purpose was to provide an "# -*- encoding" for non-ASCII
                  > templates, something that Python 2.4 suddenly required. I guess it
                  > should have made the output unicode too. But now there are lots of
                  > sites using it as is. Would they break if it started outputting
                  > unicode?

                  Yes, it would break things.



                  -------------------------------------------------------------------------
                  Take Surveys. Earn Cash. Influence the Future of IT
                  Join SourceForge.net's Techsay panel and you'll get the chance to share your
                  opinions on IT & business topics through brief surveys-and earn cash
                  http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                  _______________________________________________
                  Cheetahtemplate-discuss mailing list
                  Cheetahtemplate-discuss@...
                  https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
                • Mike Orr
                  ... The default encoding *is* ASCII for all practical purposes. Applications can t change it. The only way to change it is in site.py. -- Mike Orr
                  Message 8 of 30 , Mar 29, 2007
                  • 0 Attachment
                    On 3/29/07, Tavis Rudd <tavis@...> wrote:
                    > > no directive => Template must be ASCII. Output will be unicode if
                    > > any placeholder value is unicode. (Possible exception if another value
                    > > is a non-ASCII str.)
                    > Well, technically the requirement isn't always ASCII, it's whatever the
                    > default encoding is set to.

                    The default encoding *is* ASCII for all practical purposes.
                    Applications can't change it. The only way to change it is in
                    site.py.

                    --
                    Mike Orr <sluggoster@...>

                    -------------------------------------------------------------------------
                    Take Surveys. Earn Cash. Influence the Future of IT
                    Join SourceForge.net's Techsay panel and you'll get the chance to share your
                    opinions on IT & business topics through brief surveys-and earn cash
                    http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                    _______________________________________________
                    Cheetahtemplate-discuss mailing list
                    Cheetahtemplate-discuss@...
                    https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
                  • Tavis Rudd
                    I believe this issue with WebSafe is fixed in the cvs now. ... Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net s Techsay panel and
                    Message 9 of 30 , Apr 2, 2007
                    • 0 Attachment
                      I believe this issue with WebSafe is fixed in the cvs now.

                      On Sun, 7 Jan 2007, Mike Orr wrote:

                      > On 1/7/07, Charlie knudsen <charlie_knudsen@...> wrote:
                      >>
                      >> I may have made some progress on my issue. The below code is able to
                      >> process the file:
                      >> -----------------------
                      >> t = Template(file="input.txt")
                      >> out = t.respond()
                      >> if type(out) != type(u''):
                      >> out = out.decode('utf-8')
                      >> print out.encode('utf-8')
                      >> ---------------------------
                      >> While this solves the simple example I outlined, I have not yet plugged this
                      >> fix or variation of this fix into the actual my actual project. So please
                      >> let me know if you could let me know if I am doing anything wrong, or why
                      >> the decode function is needed I would appreciate it.
                      >
                      > Yes, this is reasonable. str(t) and unicode(t) break if the string
                      > contains non-ASCII characters due to bugs in Python, so use
                      > t.respond() instead, which preserves the string-or-unicode status. I
                      > use precompiled ASCII templates with Unicode placeholder values and
                      > get Unicode back fine. Perhaps you've discovered a bug in how
                      > Template(file=) operates re Unicode. Is there a reason you can't use
                      > precompiled templates?
                      >
                      > The WebSafe filter is not safe for non-ASCII characters because it
                      > calls str() on the placeholder value. It needs to be based on
                      > RawOrEncodedUnicode. I'm trying to clear out a couple other Python
                      > projects so I can fix up the Filters module and a few other things
                      > that need done in Cheetah.
                      >
                      > Sorry for not replying sooner. I was sick the past few days so I just
                      > read your message quickly, and didn't realize the problem was so
                      > similar to one I had had.
                      >
                      > --
                      > Mike Orr <sluggoster@...>
                      >
                      > -------------------------------------------------------------------------
                      > Take Surveys. Earn Cash. Influence the Future of IT
                      > Join SourceForge.net's Techsay panel and you'll get the chance to share your
                      > opinions on IT & business topics through brief surveys - and earn cash
                      > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                      > _______________________________________________
                      > Cheetahtemplate-discuss mailing list
                      > Cheetahtemplate-discuss@...
                      > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
                      >

                      -------------------------------------------------------------------------
                      Take Surveys. Earn Cash. Influence the Future of IT
                      Join SourceForge.net's Techsay panel and you'll get the chance to share your
                      opinions on IT & business topics through brief surveys-and earn cash
                      http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                      _______________________________________________
                      Cheetahtemplate-discuss mailing list
                      Cheetahtemplate-discuss@...
                      https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
                    • Tavis Rudd
                      The #unicode directive is implemented in the cvs now. Please note: - #unicode and #encoding are mutually exclusive. Use one or the other. - #unicode must be
                      Message 10 of 30 , Apr 2, 2007
                      • 0 Attachment
                        The #unicode directive is implemented in the cvs now.
                        Please note:
                        - #unicode and #encoding are mutually exclusive. Use one or the other.
                        - #unicode must be on a line by itself.
                        - Strings in embedded code must be explictly marked as unicode if they
                        contain non-ascii chars:

                        #unicode latin-1
                        $f("<some non-ascii char>") ## wrong
                        $f(u"<some non-ascii char>") ## right

                        However, this works fine:

                        #unicode latin-1
                        blah blah <some non-ascii char> blah blah

                        Cheers,
                        Tavis




                        On Thu, 29 Mar 2007, Tavis Rudd wrote:
                        >
                        >
                        > On Thu, 29 Mar 2007, Mike Orr wrote:
                        >> On 3/29/07, Tavis Rudd <tavis@...> wrote:
                        >>> The #unicode and #encoding directives could be combined in the form:
                        >>> # unicode utf-8
                        >>> # unicode latin-1
                        >>> etc.
                        >>
                        >> Hmm. What about this?
                        >>
                        >> # unicode => Make output unicode.
                        > using the system default input encoding
                        >
                        >> # unicode FOO => Make output unicode, and set input encoding.
                        >> (Does this set the placeholder values' encoding too?)
                        > No, it wouldn't do anything to the the encoding of placeholder values by
                        > default. However, we could provide a filter that does that.
                        >
                        >> no directive => Template must be ASCII. Output will be unicode if
                        >> any placeholder value is unicode. (Possible exception if another value
                        >> is a non-ASCII str.)
                        > Well, technically the requirement isn't always ASCII, it's whatever the
                        > default encoding is set to.
                        >
                        >> #encoding sets the input encoding but does not make the output unicode.
                        >> Its original purpose was to provide an "# -*- encoding" for non-ASCII
                        >> templates, something that Python 2.4 suddenly required. I guess it
                        >> should have made the output unicode too. But now there are lots of
                        >> sites using it as is. Would they break if it started outputting
                        >> unicode?
                        >
                        > Yes, it would break things.
                        >
                        >
                        >
                        > -------------------------------------------------------------------------
                        > Take Surveys. Earn Cash. Influence the Future of IT
                        > Join SourceForge.net's Techsay panel and you'll get the chance to share your
                        > opinions on IT & business topics through brief surveys-and earn cash
                        > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                        > _______________________________________________
                        > Cheetahtemplate-discuss mailing list
                        > Cheetahtemplate-discuss@...
                        > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
                        >

                        -------------------------------------------------------------------------
                        Take Surveys. Earn Cash. Influence the Future of IT
                        Join SourceForge.net's Techsay panel and you'll get the chance to share your
                        opinions on IT & business topics through brief surveys-and earn cash
                        http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
                        _______________________________________________
                        Cheetahtemplate-discuss mailing list
                        Cheetahtemplate-discuss@...
                        https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
                      Your message has been successfully submitted and would be delivered to recipients shortly.