mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +02:00
Code Cleanup
- Applied refactoring patch from Itay Perl.
This commit is contained in:
parent
4840708090
commit
1d4c79b897
3 changed files with 84 additions and 41 deletions
2
AUTHORS
2
AUTHORS
|
@ -34,6 +34,7 @@ The following submitted code, packages or analysis, and deserve special thanks:
|
||||||
Jostein Berntsen
|
Jostein Berntsen
|
||||||
Andraž 'ruskie' Levstik
|
Andraž 'ruskie' Levstik
|
||||||
Irfan Siddiqui
|
Irfan Siddiqui
|
||||||
|
Itay Perl
|
||||||
|
|
||||||
Thanks to the following, who submitted detailed bug reports and excellent
|
Thanks to the following, who submitted detailed bug reports and excellent
|
||||||
suggestions:
|
suggestions:
|
||||||
|
@ -65,7 +66,6 @@ suggestions:
|
||||||
Michelle Crane
|
Michelle Crane
|
||||||
Elizabeth Maxson
|
Elizabeth Maxson
|
||||||
Peter De Poorter
|
Peter De Poorter
|
||||||
Itay Perl
|
|
||||||
Max Muller
|
Max Muller
|
||||||
Sander Marechal
|
Sander Marechal
|
||||||
Thomas Sattler
|
Thomas Sattler
|
||||||
|
|
71
src/Att.cpp
71
src/Att.cpp
|
@ -90,6 +90,22 @@ static const char* modifierNames[] =
|
||||||
#define NUM_MODIFIABLE_NAMES (sizeof (modifiableNames) / sizeof (modifiableNames[0]))
|
#define NUM_MODIFIABLE_NAMES (sizeof (modifiableNames) / sizeof (modifiableNames[0]))
|
||||||
#define NUM_MODIFIER_NAMES (sizeof (modifierNames) / sizeof (modifierNames[0]))
|
#define NUM_MODIFIER_NAMES (sizeof (modifierNames) / sizeof (modifierNames[0]))
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
static inline std::string& str_replace (
|
||||||
|
std::string &str,
|
||||||
|
const std::string& search,
|
||||||
|
const std::string& replacement)
|
||||||
|
{
|
||||||
|
std::string::size_type pos = 0;
|
||||||
|
while ((pos = str.find (search, pos)) != std::string::npos)
|
||||||
|
{
|
||||||
|
str.replace (pos, search.length (), replacement);
|
||||||
|
pos += replacement.length ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
Att::Att ()
|
Att::Att ()
|
||||||
: mName ("")
|
: mName ("")
|
||||||
|
@ -917,9 +933,7 @@ void Att::enquote (std::string& value) const
|
||||||
// that hand-editing the pending.data file could cause.
|
// that hand-editing the pending.data file could cause.
|
||||||
void Att::dequote (std::string& value) const
|
void Att::dequote (std::string& value) const
|
||||||
{
|
{
|
||||||
std::string::size_type quote;
|
str_replace (value, "\"", "");
|
||||||
while ((quote = value.find ('"')) != std::string::npos)
|
|
||||||
value.replace (quote, 1, "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -928,21 +942,14 @@ void Att::dequote (std::string& value) const
|
||||||
// " -> &dquot;
|
// " -> &dquot;
|
||||||
// [ -> &open;
|
// [ -> &open;
|
||||||
// ] -> &close;
|
// ] -> &close;
|
||||||
|
// \ -> \\ (extra chars to disambiguate multi-line comment)
|
||||||
void Att::encode (std::string& value) const
|
void Att::encode (std::string& value) const
|
||||||
{
|
{
|
||||||
std::string::size_type i;
|
str_replace (value, "\t", "&tab;");
|
||||||
|
str_replace (value, "\"", "&dquot;");
|
||||||
while ((i = value.find ('\t')) != std::string::npos)
|
str_replace (value, "[", "&open;");
|
||||||
value.replace (i, 1, "&tab;"); // no i18n
|
str_replace (value, "]", "&close;");
|
||||||
|
str_replace (value, "\\", "\\\\");
|
||||||
while ((i = value.find ('"')) != std::string::npos)
|
|
||||||
value.replace (i, 1, "&dquot;"); // no i18n
|
|
||||||
|
|
||||||
while ((i = value.find ('[')) != std::string::npos)
|
|
||||||
value.replace (i, 1, "&open;"); // no i18n
|
|
||||||
|
|
||||||
while ((i = value.find (']')) != std::string::npos)
|
|
||||||
value.replace (i, 1, "&close;"); // no i18n
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -956,35 +963,19 @@ void Att::encode (std::string& value) const
|
||||||
// : <- :
|
// : <- :
|
||||||
void Att::decode (std::string& value) const
|
void Att::decode (std::string& value) const
|
||||||
{
|
{
|
||||||
std::string::size_type i;
|
|
||||||
|
|
||||||
// Supported encodings.
|
// Supported encodings.
|
||||||
while ((i = value.find ("&tab;")) != std::string::npos)
|
str_replace (value, "&tab;", "\t");
|
||||||
value.replace (i, 5, "\t");
|
str_replace (value, "&dquot;", "\"");
|
||||||
|
str_replace (value, """, "'");
|
||||||
while ((i = value.find ("&dquot;")) != std::string::npos)
|
str_replace (value, "&open;", "[");
|
||||||
value.replace (i, 7, "\"");
|
str_replace (value, "&close;", "]");
|
||||||
|
|
||||||
while ((i = value.find (""")) != std::string::npos)
|
|
||||||
value.replace (i, 6, "\"");
|
|
||||||
|
|
||||||
while ((i = value.find ("&open;")) != std::string::npos)
|
|
||||||
value.replace (i, 6, "[");
|
|
||||||
|
|
||||||
while ((i = value.find ("&close;")) != std::string::npos)
|
|
||||||
value.replace (i, 7, "]");
|
|
||||||
|
|
||||||
// Support for deprecated encodings. These cannot be removed or old files
|
// Support for deprecated encodings. These cannot be removed or old files
|
||||||
// will not be parsable. Not just old files - completed.data can contain
|
// will not be parsable. Not just old files - completed.data can contain
|
||||||
// tasks formatted/encoded using these.
|
// tasks formatted/encoded using these.
|
||||||
while ((i = value.find ("&squot;")) != std::string::npos)
|
str_replace (value, "&squot;", "'");
|
||||||
value.replace (i, 7, "'");
|
str_replace (value, ",", ",");
|
||||||
|
str_replace (value, ":", ":");
|
||||||
while ((i = value.find (",")) != std::string::npos)
|
|
||||||
value.replace (i, 7, ",");
|
|
||||||
|
|
||||||
while ((i = value.find (":")) != std::string::npos)
|
|
||||||
value.replace (i, 7, ":");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
52
src/tests/backslash.t
Executable file
52
src/tests/backslash.t
Executable file
|
@ -0,0 +1,52 @@
|
||||||
|
#! /usr/bin/perl
|
||||||
|
################################################################################
|
||||||
|
## taskwarrior - a command line task list manager.
|
||||||
|
##
|
||||||
|
## Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
||||||
|
## All rights reserved.
|
||||||
|
##
|
||||||
|
## 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, write to the
|
||||||
|
##
|
||||||
|
## Free Software Foundation, Inc.,
|
||||||
|
## 51 Franklin Street, Fifth Floor,
|
||||||
|
## Boston, MA
|
||||||
|
## 02110-1301
|
||||||
|
## USA
|
||||||
|
##
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More tests => 3;
|
||||||
|
|
||||||
|
# Create the rc file.
|
||||||
|
if (open my $fh, '>', 'backslash.rc')
|
||||||
|
{
|
||||||
|
print $fh "data.location=.\n";
|
||||||
|
close $fh;
|
||||||
|
ok (-r 'backslash.rc', 'Created backslash.rc');
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add a description with a backslash.
|
||||||
|
qx{../task rc:backslash.rc add foo\\\\bar};
|
||||||
|
my $output = qx{../task rc:backslash.rc ls};
|
||||||
|
like ($output, qr/foo\\bar/, 'Backslash preserved, no parsing issues');
|
||||||
|
|
||||||
|
# Cleanup.
|
||||||
|
unlink 'backslash.rc';
|
||||||
|
ok (!-r 'backslash.rc', 'Removed backslash.rc');
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
################################################################################
|
Loading…
Add table
Add a link
Reference in a new issue