mirror of
https://gitlab.gnome.org/GNOME/gparted
synced 2024-10-03 22:55:04 +00:00
8ec302e1b0
Move common testing code which doesn't need linking with GParted objects into the common module. Move the remaining common code used to print GParted objects using the insertion operator (operator<<) into the insertion_operators module. Split the common code like this so that the operator<<(std::ostream&, const OperationDetail&) function is not included in test_PipeCapture and it is not forced to link with all the non-UI related GParted objects. The Automake manual provides guidance that when a header belongs to a single program it is recommended to be listed in the program's _SOURCES variable and for a directory only containing header files listing them in the noinst_HEADERS variable is the right variable to use [1]. However the guidance doesn't cover this case for common.h and insertion_operators.h; header files in a directory with other files and used by multiple programs. So just because we have gparted_core_OBJECTS (normal Makefile, not Automake special variable) listing objects to link with, choose to use noinst_HEADERS Automake variable to list needed headers. [1] GNU Automake manual, 9.2 Header files https://www.gnu.org/software/automake/manual/html_node/Headers.html "Usually, only header files that accompany installed libraries need to be installed. Headers used by programs or convenience libraries are not installed. The noinst_HEADERS variable can be used for such headers. However, when the header belongs to a single convenience library or program, we recommend listing it in the program's or library's _SOURCES variable (see Defining program sources) instead of in noinst_HEADERS. This is clearer for the Makefile.am reader. noinst_HEADERS would be the right variable to use in a directory containing only headers and no associated library or program. All header files must be listed somewhere; in a _SOURCES variable or in a _HEADERS variable. Missing ones will not appear in the distribution. " Closes #220 - Format to Cleared not clearing "pdc" ataraid signature
121 lines
2.9 KiB
C++
121 lines
2.9 KiB
C++
/* Copyright (C) 2023 Mike Fleetwood
|
|
*
|
|
* 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.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
|
|
#include "insertion_operators.h"
|
|
#include "OperationDetail.h"
|
|
|
|
#include <iostream>
|
|
#include <stddef.h>
|
|
#include <glibmm/ustring.h>
|
|
|
|
|
|
namespace GParted
|
|
{
|
|
|
|
|
|
// Hacky XML parser which strips italic and bold markup added in
|
|
// OperationDetail::set_description() and reverts just these 5 characters &<>'" encoded by
|
|
// Glib::Markup::escape_text() -> g_markup_escape_text() -> append_escaped_text().
|
|
static Glib::ustring strip_markup(const Glib::ustring& str)
|
|
{
|
|
size_t len = str.length();
|
|
size_t i = 0;
|
|
Glib::ustring ret;
|
|
ret.reserve(len);
|
|
while (i < len)
|
|
{
|
|
if (str.compare(i, 3, "<i>") == 0)
|
|
i += 3;
|
|
else if (str.compare(i, 4, "</i>") == 0)
|
|
i += 4;
|
|
else if (str.compare(i, 3, "<b>") == 0)
|
|
i += 3;
|
|
else if (str.compare(i, 4, "</b>") == 0)
|
|
i += 4;
|
|
else if (str.compare(i, 5, "&") == 0)
|
|
{
|
|
ret.push_back('&');
|
|
i += 5;
|
|
}
|
|
else if (str.compare(i, 4, "<") == 0)
|
|
{
|
|
ret.push_back('<');
|
|
i += 4;
|
|
}
|
|
else if (str.compare(i, 4, ">") == 0)
|
|
{
|
|
ret.push_back('>');
|
|
i += 4;
|
|
}
|
|
else if (str.compare(i, 6, "'") == 0)
|
|
{
|
|
ret.push_back('\'');
|
|
i += 6;
|
|
}
|
|
else if (str.compare(i, 6, """) == 0)
|
|
{
|
|
ret.push_back('"');
|
|
i += 6;
|
|
}
|
|
else
|
|
{
|
|
ret.push_back(str[i]);
|
|
i++;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
// Print method for OperationDetailStatus.
|
|
std::ostream& operator<<(std::ostream& out, const OperationDetailStatus od_status)
|
|
{
|
|
switch (od_status)
|
|
{
|
|
case STATUS_NONE: out << "NONE"; break;
|
|
case STATUS_EXECUTE: out << "EXECUTE"; break;
|
|
case STATUS_SUCCESS: out << "SUCCESS"; break;
|
|
case STATUS_ERROR: out << "ERROR"; break;
|
|
case STATUS_INFO: out << "INFO"; break;
|
|
case STATUS_WARNING: out << "WARNING"; break;
|
|
default: break;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
|
|
// Print method for an OperationDetail object.
|
|
std::ostream& operator<<(std::ostream& out, const OperationDetail& od)
|
|
{
|
|
out << strip_markup(od.get_description());
|
|
Glib::ustring elapsed = od.get_elapsed_time();
|
|
if (! elapsed.empty())
|
|
out << " " << elapsed;
|
|
if (od.get_status() != STATUS_NONE)
|
|
out << " (" << od.get_status() << ")";
|
|
out << "\n";
|
|
|
|
for (size_t i = 0; i < od.get_childs().size(); i++)
|
|
{
|
|
out << *od.get_childs()[i];
|
|
}
|
|
return out;
|
|
}
|
|
|
|
|
|
} //GParted
|