Changeset 214


Ignore:
Timestamp:
Sep 27, 2006, 1:16:10 PM (13 years ago)
Author:
Peter Johansson
Message:

refs #69 added parsing for comments starting with '#' and '%', respectively

Location:
trunk/lib
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Parser.cc

    r184 r214  
    3838  {
    3939    std::ifstream is(path.c_str());
    40     cc_mode(is);
     40    if (match_end(path.begin(), path.end(), ".ac") ||
     41        match_end(path.begin(), path.end(), ".am") ||
     42        match_end(path.begin(), path.end(), ".pl") ||
     43        match_end(path.begin(), path.end(), ".pm") ||
     44        match_end(path.begin(), path.end(), ".sh"))
     45      line_com_mode(is, "#");
     46    else if (match_end(path.begin(), path.end(), ".tex"))
     47      line_com_mode(is, "%");
     48    else
     49      cc_mode(is);
    4150    is.close();
    4251  }
     
    94103
    95104
     105  void Parser::line_com_mode(std::istream& is, const std::string& com_start)
     106  {
     107    std::string str;
     108    while(getline(is,str)) {
     109      bool line_com=false;
     110      line_type lt=empty;
     111      for (std::string::iterator iter=str.begin(); iter!=str.end(); ++iter){
     112        if (lt==empty){
     113          if (isalnum(*iter)){
     114            if (line_com){
     115              lt = comment;
     116            }
     117            else{
     118              lt = code;
     119            }
     120          }
     121          else if (match_begin(iter, str.end(), com_start)){
     122            line_com=true;
     123          }
     124          else if (!line_com && !isspace(*iter)){
     125            lt = code;
     126          }
     127
     128        }
     129      }
     130      type_.push_back(lt);
     131    }
     132  }
     133
     134
    96135}} // end of namespace svndigest and namespace theplu
  • trunk/lib/Parser.h

    r165 r214  
    7070    void cc_mode(std::istream&);
    7171
     72    void line_com_mode(std::istream& is, const std::string& com_start);
     73
    7274    std::vector<line_type> type_;
    7375
  • trunk/lib/utility.h

    r201 r214  
    6363  std::string getenv(const std::string& var);
    6464
    65   inline bool match_begin(std::string::iterator first,
    66                           std::string::iterator last,
     65  inline bool match_begin(std::string::const_iterator first,
     66                          std::string::const_iterator last,
    6767                          const std::string& str)
    6868  { return (std::distance(first, last)>=static_cast<int>(str.size()) &&
     
    7070  }
    7171
    72   inline bool match_end(std::string::iterator first,
    73                         std::string::iterator last,
     72  inline bool match_end(std::string::const_iterator first,
     73                        std::string::const_iterator last,
    7474                        const std::string& str)
    7575  { return (std::distance(first,last)>=static_cast<int>(str.size()) &&
Note: See TracChangeset for help on using the changeset viewer.