Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcdcbeeea0 | ||
|
|
469cafa053 | ||
|
|
fdb359c180 | ||
|
|
b3d40b2554 | ||
|
|
fba076a0d0 | ||
|
|
3ef844de5f | ||
|
|
bb45d91ddb |
@@ -1,7 +1,12 @@
|
|||||||
|
|
||||||
------ current release ---------------------------
|
------ current release ---------------------------
|
||||||
|
|
||||||
1.8.2 (9/7/2009)
|
1.8.3 (10/21/2009)
|
||||||
|
+ Added support for Haiku R1/alpha1
|
||||||
|
|
||||||
|
------ old releases ------------------------------
|
||||||
|
|
||||||
|
1.8.2 (9/7/2009) f243f0ed443ecd7dde779de8a6525222591024db
|
||||||
+ Added feature #282 that returns useful exit codes to the shell. Now a
|
+ Added feature #282 that returns useful exit codes to the shell. Now a
|
||||||
script can detect whether no tasks were returned by a report (thanks to
|
script can detect whether no tasks were returned by a report (thanks to
|
||||||
Pietro Cerutti).
|
Pietro Cerutti).
|
||||||
@@ -14,8 +19,6 @@
|
|||||||
+ Fixed bug #288 which failed to propagate rc file overrides on the command
|
+ Fixed bug #288 which failed to propagate rc file overrides on the command
|
||||||
line to the default command (thanks to Zach Frazier).
|
line to the default command (thanks to Zach Frazier).
|
||||||
|
|
||||||
------ old releases ------------------------------
|
|
||||||
|
|
||||||
1.8.1 (8/20/2009) 35792e7874d2bb664abb1a0a67960b7fe7e0fccf
|
1.8.1 (8/20/2009) 35792e7874d2bb664abb1a0a67960b7fe7e0fccf
|
||||||
+ Fixed bug #231 that broke the build on OpenBSD 32-bit due to a time_t
|
+ Fixed bug #231 that broke the build on OpenBSD 32-bit due to a time_t
|
||||||
and int collision (thanks to Pietro Cerutti).
|
and int collision (thanks to Pietro Cerutti).
|
||||||
|
|||||||
1
NEWS
1
NEWS
@@ -26,6 +26,7 @@ Task has been built and tested on the following configurations:
|
|||||||
- OpenBSD 4.5
|
- OpenBSD 4.5
|
||||||
- FreeBSD
|
- FreeBSD
|
||||||
- Cygwin 1.5
|
- Cygwin 1.5
|
||||||
|
- Haiku R1/alpha1
|
||||||
|
|
||||||
While Task has undergone testing, bugs are sure to remain. If you encounter a
|
While Task has undergone testing, bugs are sure to remain. If you encounter a
|
||||||
bug, please enter a new issue at:
|
bug, please enter a new issue at:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
AC_INIT(task, 1.8.2, support@taskwarrior.org)
|
AC_INIT(task, 1.8.3, support@taskwarrior.org)
|
||||||
|
|
||||||
CFLAGS="${CFLAGS=}"
|
CFLAGS="${CFLAGS=}"
|
||||||
CXXFLAGS="${CXXFLAGS=}"
|
CXXFLAGS="${CXXFLAGS=}"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH task-tutorial 5 2009-09-07 "task 1.8.2" "User Manuals"
|
.TH task-tutorial 5 2009-10-21 "task 1.8.3" "User Manuals"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
task-tutorial \- A tutorial for the task(1) command line todo manager.
|
task-tutorial \- A tutorial for the task(1) command line todo manager.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH task 1 2009-09-07 "task 1.8.2" "User Manuals"
|
.TH task 1 2009-10-21 "task 1.8.3" "User Manuals"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
task \- A command line todo manager.
|
task \- A command line todo manager.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH taskrc 5 2009-09-07 "task 1.8.2" "User Manuals"
|
.TH taskrc 5 2009-10-21 "task 1.8.3" "User Manuals"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
taskrc \- Configuration file for the task(1) command
|
taskrc \- Configuration file for the task(1) command
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<pkg-contents spec="1.12"><f n="task" o="paul" g="staff" p="33261" pt="/Users/paul/task.git/package-config/osx/binary/task" m="false" t="file"/></pkg-contents>
|
<pkg-contents spec="1.12"><f n="task" o="root" g="wheel" p="33261" pt="/Users/paul/task.git/package-config/osx/binary/task" m="false" t="file"><mod>group</mod><mod>owner</mod></f></pkg-contents>
|
||||||
@@ -1 +1 @@
|
|||||||
<pkgref spec="1.12" uuid="C71026FD-E252-42CD-89C3-2F6F087AAF17"><config><identifier>com.beckingham.task180.task.pkg</identifier><version>1.8.0</version><description></description><post-install type="none"/><requireAuthorization/><installFrom mod="true">/Users/paul/task.git/package-config/osx/binary/task</installFrom><installTo mod="true" relocatable="true">/usr/local/bin</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>parent</mod><mod>locationType</mod><mod>relocatable</mod><mod>version</mod><mod>installTo.path</mod><mod>installTo</mod></config><contents><file-list>01task-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>
|
<pkgref spec="1.12" uuid="C71026FD-E252-42CD-89C3-2F6F087AAF17"><config><identifier>com.beckingham.task182.task.pkg</identifier><version>1.8.2</version><description></description><post-install type="none"/><requireAuthorization/><installFrom mod="true">/Users/paul/task.git/package-config/osx/binary/task</installFrom><installTo mod="true" relocatable="true">/usr/local/bin</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>installTo</mod><mod>locationType</mod><mod>relocatable</mod><mod>identifier</mod><mod>parent</mod><mod>version</mod><mod>installTo.path</mod></config><contents><file-list>01task-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>
|
||||||
@@ -1 +1 @@
|
|||||||
<pkmkdoc spec="1.12"><properties><title>Task 1.8.0</title><build>/Users/paul/Desktop/task-1.8.0.pkg</build><organization>com.beckingham</organization><userSees ui="easy"/><min-target os="3"/><domain anywhere="true" system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="task" id="choice0" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.beckingham.task180.task.pkg"/><choice-reqs><requirement id="tosv" operator="ge" value="'10.5.0'" selected="no" enabled="no" hidden="unchanged" startSelected="unchanged" startEnabled="unchanged" startHidden="unchanged"/></choice-reqs></choice></contents><resources bg-scale="proportional" bg-align="center"><locale lang="en"><resource mod="true" type="license">/Users/paul/task.git/package-config/osx/binary/COPYING.txt</resource><resource mod="true" type="readme">/Users/paul/task.git/package-config/osx/binary/README.txt</resource></locale></resources><flags/><item type="file">01task.xml</item><mod>properties.title</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
|
<pkmkdoc spec="1.12"><properties><title>Task 1.8.2</title><build>/Users/paul/Desktop/task-1.8.2.pkg</build><organization>com.beckingham</organization><userSees ui="both"/><min-target os="3"/><domain anywhere="true" system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="task" id="choice0" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.beckingham.task182.task.pkg"/><choice-reqs><requirement id="tosv" operator="ge" value="'10.6.0'" selected="no" enabled="no" hidden="unchanged" startSelected="unchanged" startEnabled="unchanged" startHidden="unchanged"/></choice-reqs></choice></contents><resources bg-scale="proportional" bg-align="center"><locale lang="en"><resource mod="true" type="license">/Users/paul/task.git/package-config/osx/binary/COPYING.txt</resource><resource mod="true" type="readme">/Users/paul/task.git/package-config/osx/binary/README.txt</resource></locale></resources><flags/><item type="file">01task.xml</item><mod>properties.title</mod><mod>properties.customizeOption</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include "Context.h"
|
#include "Context.h"
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
|
|||||||
29
src/Date.cpp
29
src/Date.cpp
@@ -29,6 +29,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include "Date.h"
|
#include "Date.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
@@ -82,14 +83,14 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||||||
// Single or double digit.
|
// Single or double digit.
|
||||||
case 'm':
|
case 'm':
|
||||||
if (i >= mdy.length () ||
|
if (i >= mdy.length () ||
|
||||||
! ::isdigit (mdy[i]))
|
! isdigit (mdy[i]))
|
||||||
{
|
{
|
||||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i + 1 < mdy.length () &&
|
if (i + 1 < mdy.length () &&
|
||||||
(mdy[i + 0] == '0' || mdy[i + 0] == '1') &&
|
(mdy[i + 0] == '0' || mdy[i + 0] == '1') &&
|
||||||
::isdigit (mdy[i + 1]))
|
isdigit (mdy[i + 1]))
|
||||||
{
|
{
|
||||||
month = ::atoi (mdy.substr (i, 2).c_str ());
|
month = ::atoi (mdy.substr (i, 2).c_str ());
|
||||||
i += 2;
|
i += 2;
|
||||||
@@ -103,14 +104,14 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
if (i >= mdy.length () ||
|
if (i >= mdy.length () ||
|
||||||
! ::isdigit (mdy[i]))
|
! isdigit (mdy[i]))
|
||||||
{
|
{
|
||||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i + 1 < mdy.length () &&
|
if (i + 1 < mdy.length () &&
|
||||||
(mdy[i + 0] == '0' || mdy[i + 0] == '1' || mdy[i + 0] == '2' || mdy[i + 0] == '3') &&
|
(mdy[i + 0] == '0' || mdy[i + 0] == '1' || mdy[i + 0] == '2' || mdy[i + 0] == '3') &&
|
||||||
::isdigit (mdy[i + 1]))
|
isdigit (mdy[i + 1]))
|
||||||
{
|
{
|
||||||
day = ::atoi (mdy.substr (i, 2).c_str ());
|
day = ::atoi (mdy.substr (i, 2).c_str ());
|
||||||
i += 2;
|
i += 2;
|
||||||
@@ -125,8 +126,8 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||||||
// Double digit.
|
// Double digit.
|
||||||
case 'y':
|
case 'y':
|
||||||
if (i + 1 >= mdy.length () ||
|
if (i + 1 >= mdy.length () ||
|
||||||
! ::isdigit (mdy[i + 0]) ||
|
! isdigit (mdy[i + 0]) ||
|
||||||
! ::isdigit (mdy[i + 1]))
|
! isdigit (mdy[i + 1]))
|
||||||
{
|
{
|
||||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||||
}
|
}
|
||||||
@@ -137,8 +138,8 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||||||
|
|
||||||
case 'M':
|
case 'M':
|
||||||
if (i + 1 >= mdy.length () ||
|
if (i + 1 >= mdy.length () ||
|
||||||
! ::isdigit (mdy[i + 0]) ||
|
! isdigit (mdy[i + 0]) ||
|
||||||
! ::isdigit (mdy[i + 1]))
|
! isdigit (mdy[i + 1]))
|
||||||
{
|
{
|
||||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||||
}
|
}
|
||||||
@@ -149,8 +150,8 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||||||
|
|
||||||
case 'D':
|
case 'D':
|
||||||
if (i + 1 >= mdy.length () ||
|
if (i + 1 >= mdy.length () ||
|
||||||
! ::isdigit (mdy[i + 0]) ||
|
! isdigit (mdy[i + 0]) ||
|
||||||
! ::isdigit (mdy[i + 1]))
|
! isdigit (mdy[i + 1]))
|
||||||
{
|
{
|
||||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||||
}
|
}
|
||||||
@@ -162,10 +163,10 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||||||
// Quadruple digit.
|
// Quadruple digit.
|
||||||
case 'Y':
|
case 'Y':
|
||||||
if (i + 3 >= mdy.length () ||
|
if (i + 3 >= mdy.length () ||
|
||||||
! ::isdigit (mdy[i + 0]) ||
|
! isdigit (mdy[i + 0]) ||
|
||||||
! ::isdigit (mdy[i + 1]) ||
|
! isdigit (mdy[i + 1]) ||
|
||||||
! ::isdigit (mdy[i + 2]) ||
|
! isdigit (mdy[i + 2]) ||
|
||||||
! ::isdigit (mdy[i + 3]))
|
! isdigit (mdy[i + 3]))
|
||||||
{
|
{
|
||||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ bool Nibbler::getInt (int& result)
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (i < mInput.length () && ::isdigit (mInput[i]))
|
while (i < mInput.length () && isdigit (mInput[i]))
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
if (i > mCursor)
|
if (i > mCursor)
|
||||||
@@ -260,7 +260,7 @@ bool Nibbler::getInt (int& result)
|
|||||||
bool Nibbler::getUnsignedInt (int& result)
|
bool Nibbler::getUnsignedInt (int& result)
|
||||||
{
|
{
|
||||||
std::string::size_type i = mCursor;
|
std::string::size_type i = mCursor;
|
||||||
while (i < mInput.length () && ::isdigit (mInput[i]))
|
while (i < mInput.length () && isdigit (mInput[i]))
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
if (i > mCursor)
|
if (i > mCursor)
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ bool Sequence::validId (const std::string& input) const
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (size_t i = 0; i < input.length (); ++i)
|
for (size_t i = 0; i < input.length (); ++i)
|
||||||
if (!::isdigit (input[i]))
|
if (!isdigit (input[i]))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -876,7 +876,7 @@ void Table::sort (std::vector <int>& order)
|
|||||||
if (gap > 1)
|
if (gap > 1)
|
||||||
{
|
{
|
||||||
gap = (int) ((float)gap / 1.3);
|
gap = (int) ((float)gap / 1.3);
|
||||||
if (gap == 10 or gap == 9)
|
if (gap == 10 || gap == 9)
|
||||||
gap = 11;
|
gap = 11;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ Timer::~Timer ()
|
|||||||
<< mDescription
|
<< mDescription
|
||||||
<< " "
|
<< " "
|
||||||
<< std::setprecision (6)
|
<< std::setprecision (6)
|
||||||
<< std::fixed
|
// << std::fixed
|
||||||
<< ((end.tv_sec - mStart.tv_sec) + ((end.tv_usec - mStart.tv_usec )
|
<< ((end.tv_sec - mStart.tv_sec) + ((end.tv_usec - mStart.tv_usec )
|
||||||
/ 1000000.0))
|
/ 1000000.0))
|
||||||
<< " sec";
|
<< " sec";
|
||||||
|
|||||||
@@ -106,16 +106,16 @@ static fileType determineFileType (const std::vector <std::string>& lines)
|
|||||||
{
|
{
|
||||||
if ( lines[i][0] == 'x' &&
|
if ( lines[i][0] == 'x' &&
|
||||||
lines[i][1] == ' ' &&
|
lines[i][1] == ' ' &&
|
||||||
::isdigit (lines[i][2]) &&
|
isdigit (lines[i][2]) &&
|
||||||
::isdigit (lines[i][3]) &&
|
isdigit (lines[i][3]) &&
|
||||||
::isdigit (lines[i][4]) &&
|
isdigit (lines[i][4]) &&
|
||||||
::isdigit (lines[i][5]) &&
|
isdigit (lines[i][5]) &&
|
||||||
lines[i][6] == '-' &&
|
lines[i][6] == '-' &&
|
||||||
::isdigit (lines[i][7]) &&
|
isdigit (lines[i][7]) &&
|
||||||
::isdigit (lines[i][8]) &&
|
isdigit (lines[i][8]) &&
|
||||||
lines[i][9] == '-' &&
|
lines[i][9] == '-' &&
|
||||||
::isdigit (lines[i][10]) &&
|
isdigit (lines[i][10]) &&
|
||||||
::isdigit (lines[i][11]))
|
isdigit (lines[i][11]))
|
||||||
return todo_sh_2_0;
|
return todo_sh_2_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,13 +126,13 @@ static fileType determineFileType (const std::vector <std::string>& lines)
|
|||||||
// +project
|
// +project
|
||||||
if (words[w].length () > 1 &&
|
if (words[w].length () > 1 &&
|
||||||
words[w][0] == '+' &&
|
words[w][0] == '+' &&
|
||||||
::isalnum (words[w][1]))
|
isalnum (words[w][1]))
|
||||||
return todo_sh_2_0;
|
return todo_sh_2_0;
|
||||||
|
|
||||||
// @context
|
// @context
|
||||||
if (words[w].length () > 1 &&
|
if (words[w].length () > 1 &&
|
||||||
words[w][0] == '@' &&
|
words[w][0] == '@' &&
|
||||||
::isalnum (words[w][1]))
|
isalnum (words[w][1]))
|
||||||
return todo_sh_2_0;
|
return todo_sh_2_0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1400,9 +1400,9 @@ std::string renderMonths (
|
|||||||
row = 0;
|
row = 0;
|
||||||
|
|
||||||
// Loop through days in month and add to table.
|
// Loop through days in month and add to table.
|
||||||
for (int d = 1; d <= daysInMonth.at (mpl); ++d)
|
for (int d = 1; d <= daysInMonth[mpl]; ++d)
|
||||||
{
|
{
|
||||||
Date temp (months.at (mpl), d, years.at (mpl));
|
Date temp (months[mpl], d, years[mpl]);
|
||||||
int dow = temp.dayOfWeek ();
|
int dow = temp.dayOfWeek ();
|
||||||
int woy = temp.weekOfYear (weekStart);
|
int woy = temp.weekOfYear (weekStart);
|
||||||
|
|
||||||
@@ -1420,9 +1420,9 @@ std::string renderMonths (
|
|||||||
table.addCell (row, thisCol, d);
|
table.addCell (row, thisCol, d);
|
||||||
|
|
||||||
if ((context.config.get ("color", true) || context.config.get (std::string ("_forcecolor"), false)) &&
|
if ((context.config.get ("color", true) || context.config.get (std::string ("_forcecolor"), false)) &&
|
||||||
today.day () == d &&
|
today.day () == d &&
|
||||||
today.month () == months.at (mpl) &&
|
today.month () == months[mpl] &&
|
||||||
today.year () == years.at (mpl))
|
today.year () == years[mpl])
|
||||||
table.setCellFg (row, thisCol, Text::cyan);
|
table.setCellFg (row, thisCol, Text::cyan);
|
||||||
|
|
||||||
foreach (task, all)
|
foreach (task, all)
|
||||||
@@ -1434,8 +1434,8 @@ std::string renderMonths (
|
|||||||
|
|
||||||
if ((context.config.get ("color", true) || context.config.get (std::string ("_forcecolor"), false)) &&
|
if ((context.config.get ("color", true) || context.config.get (std::string ("_forcecolor"), false)) &&
|
||||||
due.day () == d &&
|
due.day () == d &&
|
||||||
due.month () == months.at (mpl) &&
|
due.month () == months[mpl] &&
|
||||||
due.year () == years.at (mpl))
|
due.year () == years[mpl])
|
||||||
{
|
{
|
||||||
table.setCellFg (row, thisCol, Text::black);
|
table.setCellFg (row, thisCol, Text::black);
|
||||||
table.setCellBg (row, thisCol, due < today ? Text::on_red : Text::on_yellow);
|
table.setCellBg (row, thisCol, due < today ? Text::on_red : Text::on_yellow);
|
||||||
@@ -1447,7 +1447,7 @@ std::string renderMonths (
|
|||||||
int eow = 6;
|
int eow = 6;
|
||||||
if (weekStart == 1)
|
if (weekStart == 1)
|
||||||
eow = 0;
|
eow = 0;
|
||||||
if (dow == eow && d < daysInMonth.at (mpl))
|
if (dow == eow && d < daysInMonth[mpl])
|
||||||
row++;
|
row++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#! /bin/bash
|
#! /bin/sh
|
||||||
|
|
||||||
date > all.log
|
date > all.log
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ END=`tail -1 all.log`
|
|||||||
OS=`uname`
|
OS=`uname`
|
||||||
|
|
||||||
case $OS in
|
case $OS in
|
||||||
Darwin)
|
Darwin | FreeBSD)
|
||||||
STARTEPOCH=`date -j -f "%a %b %d %T %Z %Y" "${START}" "+%s"`
|
STARTEPOCH=`date -j -f "%a %b %d %T %Z %Y" "${START}" "+%s"`
|
||||||
ENDEPOCH=`date -j -f "%a %b %d %T %Z %Y" "${END}" "+%s"`
|
ENDEPOCH=`date -j -f "%a %b %d %T %Z %Y" "${END}" "+%s"`
|
||||||
;;
|
;;
|
||||||
|
|||||||
24
src/text.cpp
24
src/text.cpp
@@ -209,7 +209,7 @@ std::string commify (const std::string& data)
|
|||||||
int i;
|
int i;
|
||||||
for (int i = 0; i < (int) data.length (); ++i)
|
for (int i = 0; i < (int) data.length (); ++i)
|
||||||
{
|
{
|
||||||
if (::isdigit (data[i]))
|
if (isdigit (data[i]))
|
||||||
end = i;
|
end = i;
|
||||||
|
|
||||||
if (data[i] == '.')
|
if (data[i] == '.')
|
||||||
@@ -227,11 +227,11 @@ std::string commify (const std::string& data)
|
|||||||
int consecutiveDigits = 0;
|
int consecutiveDigits = 0;
|
||||||
for (; i >= 0; --i)
|
for (; i >= 0; --i)
|
||||||
{
|
{
|
||||||
if (::isdigit (data[i]))
|
if (isdigit (data[i]))
|
||||||
{
|
{
|
||||||
result += data[i];
|
result += data[i];
|
||||||
|
|
||||||
if (++consecutiveDigits == 3 && i && ::isdigit (data[i - 1]))
|
if (++consecutiveDigits == 3 && i && isdigit (data[i - 1]))
|
||||||
{
|
{
|
||||||
result += ',';
|
result += ',';
|
||||||
consecutiveDigits = 0;
|
consecutiveDigits = 0;
|
||||||
@@ -251,11 +251,11 @@ std::string commify (const std::string& data)
|
|||||||
int consecutiveDigits = 0;
|
int consecutiveDigits = 0;
|
||||||
for (; i >= 0; --i)
|
for (; i >= 0; --i)
|
||||||
{
|
{
|
||||||
if (::isdigit (data[i]))
|
if (isdigit (data[i]))
|
||||||
{
|
{
|
||||||
result += data[i];
|
result += data[i];
|
||||||
|
|
||||||
if (++consecutiveDigits == 3 && i && ::isdigit (data[i - 1]))
|
if (++consecutiveDigits == 3 && i && isdigit (data[i - 1]))
|
||||||
{
|
{
|
||||||
result += ',';
|
result += ',';
|
||||||
consecutiveDigits = 0;
|
consecutiveDigits = 0;
|
||||||
@@ -279,8 +279,8 @@ std::string lowerCase (const std::string& input)
|
|||||||
{
|
{
|
||||||
std::string output = input;
|
std::string output = input;
|
||||||
for (int i = 0; i < (int) input.length (); ++i)
|
for (int i = 0; i < (int) input.length (); ++i)
|
||||||
if (::isupper (input[i]))
|
if (isupper (input[i]))
|
||||||
output[i] = ::tolower (input[i]);
|
output[i] = tolower (input[i]);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
@@ -290,8 +290,8 @@ std::string upperCase (const std::string& input)
|
|||||||
{
|
{
|
||||||
std::string output = input;
|
std::string output = input;
|
||||||
for (int i = 0; i < (int) input.length (); ++i)
|
for (int i = 0; i < (int) input.length (); ++i)
|
||||||
if (::islower (input[i]))
|
if (islower (input[i]))
|
||||||
output[i] = ::toupper (input[i]);
|
output[i] = toupper (input[i]);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
@@ -302,7 +302,7 @@ std::string ucFirst (const std::string& input)
|
|||||||
std::string output = input;
|
std::string output = input;
|
||||||
|
|
||||||
if (output.length () > 0)
|
if (output.length () > 0)
|
||||||
output[0] = ::toupper (output[0]);
|
output[0] = toupper (output[0]);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
@@ -352,7 +352,7 @@ void guess (
|
|||||||
bool digitsOnly (const std::string& input)
|
bool digitsOnly (const std::string& input)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < input.length (); ++i)
|
for (size_t i = 0; i < input.length (); ++i)
|
||||||
if (!::isdigit (input[i]))
|
if (!isdigit (input[i]))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -362,7 +362,7 @@ bool digitsOnly (const std::string& input)
|
|||||||
bool noSpaces (const std::string& input)
|
bool noSpaces (const std::string& input)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < input.length (); ++i)
|
for (size_t i = 0; i < input.length (); ++i)
|
||||||
if (::isspace (input[i]))
|
if (isspace (input[i]))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ bool confirm (const std::string& question)
|
|||||||
<< " ";
|
<< " ";
|
||||||
|
|
||||||
std::getline (std::cin, answer);
|
std::getline (std::cin, answer);
|
||||||
answer = lowerCase (trim (answer));
|
answer = std::cin.eof() ? "no" : lowerCase (trim (answer));
|
||||||
}
|
}
|
||||||
while (answer != "y" && // TODO i18n
|
while (answer != "y" && // TODO i18n
|
||||||
answer != "ye" && // TODO i18n
|
answer != "ye" && // TODO i18n
|
||||||
|
|||||||
Reference in New Issue
Block a user