nis-util  1.0.D108
lib/arglex/source/file.cc
Go to the documentation of this file.
00001 //
00002 // nis-util - NIS Administration Utilities
00003 // Copyright (C) 2012 Peter Miller
00004 //
00005 // This program is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation; either version 2 of the License, or (at
00008 // your option) any later version.
00009 //
00010 // This program is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License along
00016 // with this program. If not, see <http://www.gnu.org/licenses/>.
00017 //
00018 
00019 #include <lib/arglex/source/file.h>
00020 #include <lib/input/file.h>
00021 #include <lib/rcstring/accumulator.h>
00022 
00023 
00024 arglex_source_file::~arglex_source_file()
00025 {
00026 }
00027 
00028 
00029 arglex_source_file::arglex_source_file(const rcstring &filename) :
00030     ip(input_file::create(filename))
00031 {
00032     // ip = input_remove_escaped_newlines::create(ip);
00033     // ip = input_remove_comments::create(ip);
00034 }
00035 
00036 
00037 arglex_source_file::pointer
00038 arglex_source_file::create(const rcstring &filename)
00039 {
00040     return pointer(new arglex_source_file(filename));
00041 }
00042 
00043 
00044 bool
00045 arglex_source_file::next(source_location &locn, rcstring &result)
00046 {
00047     for (;;)
00048     {
00049         locn = ip->get_source_location();
00050         int c = ip->get();
00051         if (c == input::eof)
00052             return false;
00053         if (isspace(c))
00054             continue;
00055         // Each argument is separated by white space.
00056         // There is no quoting mechanism.
00057         rcstring_accumulator acc;
00058         for (;;)
00059         {
00060             acc.push_back((unsigned char)c);
00061             c = ip->get();
00062             if (c == input::eof)
00063                 break;
00064             if (isspace(c))
00065                 break;
00066         }
00067         result = acc.mkstr();
00068         return true;
00069     }
00070 }
00071 
00072 
00073 // vim: set ts=8 sw=4 et :