Changeset 54815


Ignore:
Timestamp:
Jul 8, 2009, 9:40:46 PM (9 years ago)
Author:
Daniel James
Message:

Teletype source mode. Refs #1202.

Location:
trunk/tools/quickbook
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/quickbook/detail/actions.cpp

    r54813 r54815  
    320320        {
    321321            parse(first, last, python_p);
     322        }
     323        else if (source_mode == "teletype")
     324        {
     325            parse(first, last, teletype_p);
     326        }
     327        else
     328        {
     329            BOOST_ASSERT(0);
    322330        }
    323331
  • trunk/tools/quickbook/detail/actions.hpp

    r54814 r54815  
    433433    python_p_type;
    434434   
     435    typedef teletype_highlight<
     436        plain_char_action
     437      , string_symbols
     438      , do_macro_action
     439      , pre_escape_back
     440      , post_escape_back
     441      , actions
     442      , collector>
     443    teletype_p_type;
     444   
    435445    struct syntax_highlight
    436446    {
     
    444454        , cpp_p(temp, macro, do_macro_action(temp), escape_actions)
    445455        , python_p(temp, macro, do_macro_action(temp), escape_actions)
     456        , teletype_p(temp, macro, do_macro_action(temp), escape_actions)
    446457        {
    447458        }
     
    453464        cpp_p_type cpp_p;
    454465        python_p_type python_p;
     466        teletype_p_type teletype_p;
    455467    };
    456468
  • trunk/tools/quickbook/doc/quickbook.qbk

    r52352 r54815  
    437437    [[C++]                  [[^\[c++\]]]]
    438438    [[Python]               [[^\[python\]]]]
     439    [[Plain Text]           [[^\[teletype\]]]]
    439440]
    440441
  • trunk/tools/quickbook/doc_info.hpp

    r50125 r54815  
    154154                           str_p("c++")
    155155                        |  "python"
     156                        |  "teletype"
    156157                        )                           [assign_a(actions.source_mode)]
    157158                    ;
  • trunk/tools/quickbook/phrase.hpp

    r50125 r54815  
    404404                        str_p("c++")
    405405                    |   "python"
     406                    |   "teletype"
    406407                    )                                   [assign_a(actions.source_mode)]
    407408                    ;
  • trunk/tools/quickbook/syntax_highlight.hpp

    r51949 r54815  
    324324        EscapeActions& escape_actions;
    325325    };
     326
     327    // Grammar for plain text (no actual highlighting)
     328    template <
     329        typename CharProcess
     330      , typename Macro
     331      , typename DoMacro
     332      , typename PreEscape
     333      , typename PostEscape
     334      , typename EscapeActions
     335      , typename Out>
     336    struct teletype_highlight
     337    : public grammar<teletype_highlight<CharProcess, Macro, DoMacro, PreEscape, PostEscape, EscapeActions, Out> >
     338    {
     339        teletype_highlight(Out& out, Macro const& macro, DoMacro do_macro, EscapeActions& escape_actions)
     340        : out(out), macro(macro), do_macro(do_macro), escape_actions(escape_actions) {}
     341
     342        template <typename Scanner>
     343        struct definition
     344        {
     345            definition(teletype_highlight const& self)
     346                : common(self.escape_actions, unused)
     347                , unused(false)
     348            {
     349                program
     350                    =
     351                    *(  macro
     352                    |   escape         
     353                    |   repeat_p(1)[anychar_p]          [CharProcess(self.out)]
     354                    )
     355                    ;
     356
     357                macro =
     358                    eps_p(self.macro                    // must not be followed by
     359                        >> (eps_p - (alpha_p | '_')))   // alpha or underscore
     360                    >> self.macro                       [self.do_macro]
     361                    ;
     362
     363                qbk_phrase =
     364                   *(   common
     365                    |   (anychar_p - str_p("``"))   [self.escape_actions.plain_char]
     366                    )
     367                    ;
     368
     369                escape =
     370                    str_p("``")         [PreEscape(self.escape_actions, save)]
     371                    >>
     372                    (
     373                        (
     374                            (
     375                                (+(anychar_p - "``") >> eps_p("``"))
     376                                & qbk_phrase
     377                            )
     378                            >>  str_p("``")
     379                        )
     380                        |
     381                        (
     382                            eps_p       [self.escape_actions.error]
     383                            >> *anychar_p
     384                        )
     385                    )                   [PostEscape(self.out, self.escape_actions, save)]
     386                    ;
     387            }
     388
     389            rule<Scanner> program, macro, qbk_phrase, escape;
     390
     391            phrase_grammar<EscapeActions> common;
     392            std::string save;
     393            bool unused;
     394
     395            rule<Scanner> const&
     396            start() const { return program; }
     397        };
     398
     399        Out& out;
     400        Macro const& macro;
     401        DoMacro do_macro;
     402        EscapeActions& escape_actions;
     403    };
     404
    326405}
    327406
  • trunk/tools/quickbook/test/Jamfile.v2

    r54812 r54815  
    1616    [ quickbook-test code-block-2 ]
    1717    [ quickbook-test code-block-3 ]
     18    [ quickbook-test code-block-teletype ]
    1819    [ quickbook-test code-snippet ]
    1920    [ quickbook-test preformatted ]
Note: See TracChangeset for help on using the changeset viewer.