$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Reece Dunn (msclrhd_at_[hidden])
Date: 2004-09-17 07:44:23
Throughout this e-mail, I assume the following aliases:
   namespace io  = boost::io;
   namespace fmt = boost::io::format;
   namespace css = boost::io::css;
NOTE: This is a design outline for features in a future version of the 
library.
David Abrahams has suggested the ability to specify default formatting on a 
stream. I have implemented a simple version of this so that you can do:
   io::sequence_decorators< char > seq( "; " );
   std::cout << '"' << seq.open(      std::cout ) << "\"\n"  // "[ "
             << '"' << seq.close(     std::cout ) << "\"\n"  // " ]"
             << '"' << seq.separator( std::cout ) << "\"\n"; // "; "
where separator( std::cout ) uses the separator value specified by seq and 
the others use the values set on the std::cout stream. To change these 
defaults, you can use:
   std::cout << io::cdecorate( "[{ ", " }]" ); // [{ a, b, c }]
The problem with this is that it changes the defaults for all the formatting 
used, thus you cannot have different defaults for sequences and n-ary types.
Cascading Style Sheets (CSS) are a web standard 
[http://www.w3.org/Style/CSS/] used for controlling how HTML tags are 
displayed to different devices (screen, printer and speech).
== Inlined Styles
In HTML you can specify "inlined" styles using a style attribute, e.g.:
   <div style = "color: red;">Red Text</div>
My library equivalent is to use the decorate() function, e.g.:
   fmt::range().decorate( "<-- ", " -->" );
== Dynamic Styles
You can also set CSS properties within script code, e.g.
   tag.style.fontFamily = "Times New Roman";
This style behaviour is available in the new decorators, for example:
   io::wrapper_decorators< char > wrap;
   wrap.open = "<< ";
   wrap.close = " >>";
A more complex example that uses nested format objects:
   fmt::container_t< char, fmt::pair_t< char > > my_fo
      = fmt::container( fmt::pair());
   my_fo.elem.open = "<< ";
   my_ob.elem.close = " >>";
   my_ob.separator = " | ";
   std::cout << io::object( ob, my_ob ); // output: [ << a, 5 >> | << b, -1 
 >> ]
== Cascading Style Sheets
HTML provides a <style> tag to specify styling across the document without 
linking to an external file, e.g.:
   <style>h1{ color: orange; font-size: 2pc; }</style>
The equivalent within my library would be to define the styling on a stream, 
e.g.:
   std::cout
      << css::element( "pair" )
         [
            ( css::attribute( "open"  ) = "<< " )
         +  ( css::attribute( "close" ) = " >>" )
         ]
      << css::element( "container" )
         [
            css::attribute( "separator" ) = " | "
         ]
      << io::object( ob ) // output: [ << a, 5 >> | << b, -1 >> ]
      << css::element( "pair" )
         [
            css::attribute( "separator" ) = " = "
         ]
      << io::object( ob ); // output: [ << a = 5 >> | << b = -1 >> ]
HTML can import styling from an external CSS file. The equivalent would be 
to use an object to hold the styling, e.g.:
   css::stylesheet< char > style
      = css::element( "pair" )
        [
           css::attribute( "separator" ) = " = "
        ]
      + css::element( "container" )
        [
           ( css::attribute( "open"  ) = "{ " )
        +  ( css::attribute( "close" ) = " }" )
        ]
      ;
   std::cout << style << io::object( ob ); // output: { [ a = 5 ], [ b = -1 
] }
It should be possible to provide the ability to save/load styling to/from a 
file and allow copying of style objects, e.g.:
   css::stylesheet< char > style2( "mystyles.style" ); // load styling
   style.load( "newstyles.style" );
   style = style2;
   style.save( "stylings.sty" );
NOTE: The css::stylesheet class will store the styles using something like:
   std::map< std::string, std::map< std::string, std::string > >
therefore it will be possible to use my library to implement the load and 
save facilities!
Regards,
Reece
_________________________________________________________________
It's fast, it's easy and it's free. Get MSN Messenger today! 
http://www.msn.co.uk/messenger