/* ============================================================================ * Douglas Thrift's Search Engine License * * Copyright (C) 2002, Douglas Thrift. All Rights Reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: * * "This product includes software developed by Douglas Thrift * (http://computers.douglasthrift.net/searchengine/)." * * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. * * 4. The names "Douglas Thrift" and "Douglas Thrift's Search Engine" must not * be used to endorse or promote products derived from this software without * specific prior written permission. For written permission, please visit * http://www.douglasthrift.net/contact.cgi for contact information. * * 5. Products derived from this software may not be called "Douglas Thrift's * Search Engine", nor may "Douglas Thrift's Search Engine" appear in their * name, without prior written permission. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ */ // Douglas Thrift's Search Engine Page // // Douglas Thrift // // Page.cpp #include "Page.h" Page::Page(string& url) : URL(url) { size = 0; } void Page::setSize(unsigned size) { this->size = size; } void Page::setTitle(string& title) { this->title = title; } void Page::setDescription(string& description) { this->description = description; } void Page::setText(string& text) { this->text = text; } void Page::setHeadings(vector& headings) { this->headings = headings; } istream& operator>>(istream& is, Page& data) { string line; getline(is, line); if (line == " ") { do { getline(is, line); if (line.find("
") == 0) { unsigned start = line.find("
") + 9; unsigned finish = line.find("
", start); string address = line.substr(start, finish - start); entities(address, "<", '<'); entities(address, ">", '>'); entities(address, "&", '&'); data.setAddress(address); } else if (line.find(" ") == 0) { unsigned start = line.find("") + 6; unsigned finish = line.find("", start); data.setPort(strtoul(line.substr(start, finish - start).c_str(), 0, 0)); } else if (line.find(" ") == 0) { unsigned start = line.find("") + 6; unsigned finish = line.find("", start); string path = line.substr(start, finish - start); entities(path, "<", '<'); entities(path, ">", '>'); entities(path, "&", '&'); data.setPath(path); } else if (line.find(" ") == 0) { unsigned start = line.find("") + 6; unsigned finish = line.find("", start); data.setSize(strtoul(line.substr(start, finish - start).c_str(), 0, 0)); } else if (line.find(" ") == 0) { unsigned start = line.find("<title>") + 7; unsigned finish = line.find("", start); string title = line.substr(start, finish - start); while (finish == string::npos) { getline(is, line); finish = line.find(""); title += '\n' + line.substr(0, finish - 0); } entities(title, "<", '<'); entities(title, ">", '>'); entities(title, "&", '&'); data.setTitle(title); } else if (line.find(" ") == 0) { unsigned start = line.find("") + 13; unsigned finish = line.find("", start); string description = line.substr(start, finish - start); entities(description, "<", '<'); entities(description, ">", '>'); entities(description, "&", '&'); data.setDescription(description); } else if (line.find(" ") == 0) { unsigned start = line.find("") + 6; unsigned finish = line.find("", start); string text = line.substr(start, finish - start); while (finish == string::npos) { getline(is, line); finish = line.find(""); text += '\n' + line.substr(0, finish - 0); } entities(text, "<", '<'); entities(text, ">", '>'); entities(text, "&", '&'); data.setText(text); } else if (line.find(" ") == 0) { unsigned start = line.find("") + 9; unsigned finish = line.find("", start); string heading = line.substr(start, finish - start); while (finish == string::npos) { getline(is, line); finish = line.find(""); heading += line.substr(0, finish - 0); } entities(heading, "<", '<'); entities(heading, ">", '>'); entities(heading, "&", '&'); data.headings.push_back(heading); } } while (line != " "); } return is; } ostream& operator<<(ostream& os, Page& data) { string address = data.getAddress(); entities(address, '&', "&"); entities(address, '<', "<"); entities(address, '>', ">"); os << " \n" << "
" << address << "
\n"; if (data.getPort() != 80) { os << " " << data.getPort() << "\n"; } string path = data.getPath(); entities(path, '&', "&"); entities(path, '<', "<"); entities(path, '>', ">"); os << " " << path << "\n"; os << " " << data.getSize() << "\n"; if(data.getTitle() != "") { string title = data.getTitle(); entities(title, '&', "&"); entities(title, '<', "<"); entities(title, '>', ">"); os << " " << title << "\n"; } if(data.getDescription() != "") { string description = data.getDescription(); entities(description, '&', "&"); entities(description, '<', "<"); entities(description, '>', ">"); os << " " << description << "\n"; } string text = data.getText(); entities(text, '&', "&"); entities(text, '<', "<"); entities(text, '>', ">"); os << " " << text << "\n"; for (int index = 0; index < data.getHeadings().size(); index++) { string heading = data.getHeadings()[index]; entities(heading, '&', "&"); entities(heading, '<', "<"); entities(heading, '>', ">"); os << " " << heading << "\n"; } os << "
"; return os; }