Changeset 514


Ignore:
Timestamp:
Dec 9, 2007, 2:51:07 AM (13 years ago)
Author:
Peter Johansson
Message:

Fixing #230

Location:
trunk/lib
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Configuration.cc

    r512 r514  
    170170        if (!parsing_found) {
    171171          parsing_found=true;
     172          // clearing the default setting
    172173          string2codons_.clear();
    173174        }
     
    192193        std::string start;
    193194        while (getline(ss, start, ':')) {
    194           trim(start);
     195          start = trim(start);
    195196          std::string end;
    196197          getline(ss, end, ';');
    197           trim(end);
    198           if (!start.empty() && !end.empty())
     198          end = trim(end);
     199          if (!start.empty() && !end.empty()) {
     200            replace(start, "<NEWLINE>", "\n");
     201            replace(end, "<NEWLINE>", "\n");
    199202            add_codon(lhs, start, end);
     203          }
    200204          else if (!start.empty() || !end.empty()) {
    201205            std::stringstream mess;
     
    288292    add_codon("*.sgml", "<!--", "-->");
    289293    add_codon("*.bat", "\nREM", "\n");
     294    add_codon("*.bat", "\nrem", "\n");
    290295  }
    291296
  • trunk/lib/Parser.cc

    r512 r514  
    5757
    5858  void Parser::parse(std::istream& is,
    59                      const std::vector<std::pair<std::string, std::string> >& codon)
     59                     const std::vector<std::pair<std::string, std::string> >&
     60                     codon)
    6061  {
    6162    // mode zero means we are currently not in a comment
     
    6869      for (std::string::iterator iter=str.begin(); iter!=str.end(); ++iter){
    6970        for (size_t i=mode; i<codon.size(); ++i) {
     71          if ( iter==str.begin() && codon[i].first[0] == '\n' &&
     72               match_begin(iter, str.end(), codon[i].first.substr(1)) ) {
     73            iter += codon[i].first.size()-1;
     74            mode = i+1;
     75            break;
     76          }
    7077          if (match_begin(iter, str.end(), codon[i].first)) {
    7178            iter += codon[i].first.size();
  • trunk/lib/utility.cc

    r508 r514  
    208208
    209209
     210  void replace(std::string& str, std::string old_str, std::string new_str)
     211  {
     212    std::string::iterator iter(str.begin());
     213    while ((iter=search(iter, str.end(), old_str)) != str.end()) {
     214      size_t i = iter-str.begin();
     215      str = std::string(str.begin(), iter) + new_str +
     216        std::string(iter+old_str.size(), str.end());
     217      // pointing to char after substr we just inserted
     218      iter = str.begin() + (i+new_str.size());
     219    }
     220  }
     221
     222
    210223  void touch(std::string str)
    211224  {
  • trunk/lib/utility.h

    r507 r514  
    150150  ///
    151151  std::string pwd(void);
     152
     153  /**
     154     In \a full_str  replace every sub-string \a old_str with
     155     \a new_str;
     156   */
     157  void replace(std::string& full_str, std::string old_str, std::string new_str);
    152158
    153159  ///
Note: See TracChangeset for help on using the changeset viewer.