/*************************************************************************** * Copyright (C) 2003 by Sylvain Joyeux * * sylvain.joyeux@m4x.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "parsers.h" #include "../apt.h" #include #include static const TQString html_attribute_begin("%1\n\t\n\t\t"), html_attribute_classed("%2\n\t\n\t\t"), html_attribute_end("\n\t\n\n"); // Converts the special chars in orig into its HTML equivalents static TQString text2html(const TQString& orig) { TQString ret(orig); ret = ret.replace("<(?!a href)", "<"); //ret = ret.replace( TQRegExp("\n"), "
\n"); return ret; } static void close_indent(int indent, TQString& buffer) { if (buffer.isEmpty()) return; if (indent) buffer += "\n\t\t"; } static void close_item(int indent, TQString& buffer) { if (buffer.isEmpty()) return; close_indent(indent, buffer); buffer += html_attribute_end; } static void close_table(const TQString& version, int indent, TQString& buffer) { if (buffer.isEmpty()) return; close_item(indent, buffer); buffer = version + "\n" + buffer + "
\n"; } static TQString version_header_link(const KURL& url, const TQString& name) { return TQString("\t" + name + "\n"); } namespace Parsers { Show::Show(const TQString& package, const TQString& installed_version, bool act) : m_package(package), m_installed(installed_version), m_act(false) { m_act = act; } void Show::operator() (AptProtocol* slave, const TQString& tag, const TQString& value) { // Since we want to show the version first, we should wait for it // before sending anything static TQString version; static TQString buffer; static TQString attribute; static int indent; static bool multiline = false; static bool first_line = false, new_paragraph = true; if (tag == "begin" || tag == "package" || tag == "end") { if (multiline && !new_paragraph) buffer += "

"; if (tag == "begin") m_result_count = 0; else { m_result_count += (tag == "package"); close_table(version, indent, buffer); if (!buffer.isEmpty()) *slave << buffer; } // init the state variables for the next package buffer = ""; indent = 0; first_line = false; new_paragraph = true; } else if (tag == "field") { if (multiline && !new_paragraph) buffer += "

"; attribute = value; if (value == "Depends" || value == "Description") { close_item(indent, buffer); buffer += html_attribute_begin.tqarg(value) + " "; close_item(indent, buffer); buffer += html_attribute_begin.tqarg(" "); } else if (value != "Version" && value != "Package") { close_item(indent, buffer); buffer += html_attribute_begin.tqarg(value); } if (value == "Description") { multiline = true; new_paragraph = true; first_line = true; } else { multiline = false; } } else if (tag == "indent") { close_indent(indent, buffer); int new_indent = value.toInt(); if (new_indent) buffer += "\n\t
"; indent = new_indent; } else if (tag == "data" && attribute == "Version") { KURL action ("apt:/get"); TQString item_id = mangle_version(value); if (value == m_installed) { action.setQuery("remove"); version = TQString("
").tqarg(item_id) + i18n("Installed version %1").tqarg(value); } else { action.setQuery("install"); version = TQString("
").tqarg(item_id) + i18n("Version %1").tqarg(value); } action.addQueryItem("package", m_package); action.addQueryItem("version", value); if (m_act) { if (value == m_installed) version += version_header_link(action, i18n("Remove")); else version += version_header_link(action, i18n("Install")); } version += "
\n"; } else if (tag == "data") { if (multiline) { static const TQRegExp rx_empty("^\\s*$"); if (rx_empty.exactMatch(value)) { buffer += "

"; new_paragraph = true; } else if (first_line) { new_paragraph = true; first_line = false; } else if (new_paragraph) { buffer += "

"; new_paragraph = false; } } buffer += text2html(TQString(value).replace(TQRegExp("(http://\\S+)"),TQString("\\1"))); } else if (tag == "package_link") buffer += "buildURL("show", value).htmlURL() + "\">" + value + ""; } }