summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am6
-rw-r--r--NEWS8
-rw-r--r--configure.ac19
-rw-r--r--doc/Makefile.am8
-rw-r--r--po/calcurse.pot4
-rw-r--r--po/de.po2
-rw-r--r--po/en.po2
-rw-r--r--po/es.po2
-rw-r--r--po/fr.po172
-rw-r--r--po/nl.po2
-rw-r--r--po/ru.po2
-rw-r--r--src/args.c12
-rw-r--r--src/io.c181
13 files changed, 250 insertions, 170 deletions
diff --git a/Makefile.am b/Makefile.am
index 9e17d2f..5dd1ed9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,11 @@ AUTOMAKE_OPTIONS= foreign
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = doc po src
+SUBDIRS = po src
+
+if ENABLE_DOCS
+SUBDIRS += doc
+endif
EXTRA_DIST = \
INSTALL \
diff --git a/NEWS b/NEWS
index 78f0b84..e8af26e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+[08 Sep 2011]
+Version 2.9.2:
+- Bugfixes:
+ * Handle iCal line folding correctly.
+
+ * Introduce a configure option to completely exclude the documentation
+ subdirectory from the build process ("--disable-docs").
+
[03 Aug 2011]
Version 2.9.1:
- Bugfixes:
diff --git a/configure.ac b/configure.ac
index f736d9f..debd8b8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -70,23 +70,34 @@ AC_CHECK_HEADERS([math.h], [
#-------------------------------------------------------------------------------
# Check whether to build documentation
#-------------------------------------------------------------------------------
+AC_ARG_ENABLE(docs,
+ AS_HELP_STRING([--disable-docs], [skip documentation]),
+ [enabledocs=$enableval], [enabledocs=yes])
+if test x"$enabledocs" != x"yes"; then
+ enabledocs=no
+ AC_MSG_WARN([Skipping documentation!])
+fi
+AC_MSG_CHECKING([whether to include documentation])
+AC_MSG_RESULT($enabledocs)
+AM_CONDITIONAL(ENABLE_DOCS, test x"$enabledocs" = x"yes")
+
AC_ARG_WITH(asciidoc,
AS_HELP_STRING([--with-asciidoc],
- [Use asciidoc to regenerate documentation.]),
+ [use AsciiDoc to regenerate documentation]),
[use_asciidoc=$withval],
[use_asciidoc="auto"])
if test x"$use_asciidoc" = x"auto"; then
AC_PATH_PROG([ASCIIDOC], [asciidoc])
if test -z "$ASCIIDOC"; then
have_asciidoc=no
- AC_MSG_WARN([AsciiDoc not found - documentation will be skipped!])
+ AC_MSG_WARN([AsciiDoc not found - cannot rebuild documentation!])
else
have_asciidoc=yes
fi
AC_PATH_PROG([A2X], [a2x])
if test -z "$A2X"; then
have_a2x=no
- AC_MSG_WARN([a2x not found - man pages will be skipped!])
+ AC_MSG_WARN([a2x not found - cannot rebuild man pages!])
else
have_a2x=yes
fi
@@ -101,7 +112,7 @@ elif test x"$use_asciidoc" = x"yes"; then
fi
have_asciidoc=yes
elif test x"$use_asciidoc" = x"no"; then
- AC_MSG_WARN(["--without-asciidoc" specified - documentation will be skipped!])
+ AC_MSG_WARN([Will not rebuild documentation!])
have_asciidoc=no
have_a2x=no
fi
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 287cddb..caa90d2 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -5,19 +5,19 @@ ASCIIDOC_ARGS = \
-n \
-a toc \
-a icons
-
-dist_doc_DATA = \
- manual.html
endif
if HAVE_A2X
A2X_ARGS = \
-d manpage \
-f manpage
+endif
+
+dist_doc_DATA = \
+ manual.html
dist_man_MANS = \
calcurse.1
-endif
EXTRA_DIST = \
manual.txt \
diff --git a/po/calcurse.pot b/po/calcurse.pot
index 8bf0cdd..5ef5d1b 100644
--- a/po/calcurse.pot
+++ b/po/calcurse.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: calcurse 2.9.1\n"
+"Project-Id-Version: calcurse 2.9.2\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/po/de.po b/po/de.po
index 753e482..ffd4191 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-11 14:00+0000\n"
"Last-Translator: cryptocrack <transifex@cryptocrack.de>\n"
"Language-Team: German (http://www.transifex.net/projects/p/calcurse/team/"
diff --git a/po/en.po b/po/en.po
index 314ecec..68d2eb5 100644
--- a/po/en.po
+++ b/po/en.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse 1.4\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2006-07-03 00:05+0100\n"
"Last-Translator: Neil Williams <linux@codehelp.co.uk>\n"
"Language-Team: English/GB <en_GB@li.org>\n"
diff --git a/po/es.po b/po/es.po
index e534673..9d49af2 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-11 09:21+0000\n"
"Last-Translator: cryptocrack <transifex@cryptocrack.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/po/fr.po b/po/fr.po
index ca5e13a..adadf66 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -2,13 +2,15 @@
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
#
+# esaule <godrik@mandragor.org>, 2011.
+# Lukas Fleischer <transifex@cryptocrack.de>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
-"PO-Revision-Date: 2011-05-17 13:44+0000\n"
-"Last-Translator: esaule <godrik@mandragor.org>\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
+"PO-Revision-Date: 2011-09-04 21:35+0000\n"
+"Last-Translator: lkppo <lkppo@free.fr>\n"
"Language-Team: French (http://www.transifex.net/projects/p/calcurse/team/"
"fr/)\n"
"Language: fr\n"
@@ -74,6 +76,10 @@ msgid ""
"Copyright (c) 2004-2011 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
+"\n"
+"Copyright (c) 2004-2011 Équipe de développement de calcurse.\n"
+"Ceci est un logiciel libre ; consultez le code source pour connaître les "
+"conditions légales d'utilisation.\n"
#, c-format
msgid "Calcurse %s - text-based organizer\n"
@@ -150,6 +156,81 @@ msgid ""
"For more information, type '?' from within Calcurse, or read the manpage.\n"
"Mail bug reports and suggestions to <misc@calcurse.org>.\n"
msgstr ""
+"\n"
+"Divers:\n"
+" -h, --help\n"
+"\taffiche cette aide et quitte.\n"
+"\n"
+" -v, --version\n"
+"\taffiche la version de calcurse et quitte.\n"
+"\n"
+" --status\n"
+"\taffiche l'état des instances de calcurse en cours d'exécution.\n"
+"\n"
+"Fichiers:\n"
+" -c <fichier>, --calendar <fichier>\n"
+"\tindique le <fichier> de calendrier à utiliser (incompatible avec '-D').\n"
+"\n"
+" -D <dir>, --directory <dir>\n"
+"\tindique le répertoire de données à utiliser (incompatible avec '-c').\n"
+"\tSi non indiqué, le répertoire par défaut est ~/.calcurse\n"
+"\n"
+"Non-interactif:\n"
+" -a, --appointment\n"
+" \taffiche les évènements et les rendez-vous du jour et quitte.\n"
+"\n"
+" -d <date|nb>, --day <date|nb>\n"
+"\taffiche les évènements et rendez-vous d'une <date> ou des <nb> prochains "
+"jours et\n"
+"\tquitte. Pour indiquer un jour de départ et une durée, utilisez les "
+"options\n"
+"\t'--startday' and '--range'.\n"
+"\n"
+" -i <fichier>, --import <fichier>\n"
+"\timporte les données au format icalendar depuis un <fichier>. \n"
+"\n"
+" -n, --next\n"
+"\taffiche le prochain rendez-vous à venir dans les 24 heures et quitte. "
+"Donne aussi\n"
+"\tle temps restant avant le rendez-vous suivant.\n"
+" -N, --note\n"
+"\tutilisée avec l'option '-a' ou '-t', affiche la note associée\n"
+"\tà l'élément affiché s'il en a une.\n"
+"\n"
+" -r[nombre], --range[=nombre]\n"
+"\taffiche les évènements et les rendez-vous sur [nombre] de jours\n"
+"\tet quitte. Si [nombre] n'est pas précisé, on utilise une durée de 1 jour "
+"par défaut.\n"
+"\n"
+" -s[date], --startday[=date]\n"
+"\taffiche les évènements et rendez-vous d'une [date] et quitte.\n"
+"\tSi la [date] n'est pas précisée, la date courante est utilisée.\n"
+"\n"
+" -S<regex>, --search=<regex>\n"
+"\tRecherche les évènements, rendez-vous et tâches\n"
+"\tdont la description correspond à l'expression régulière [regex].n\n"
+" -t[priorite], --todo[=priorite]\n"
+"\taffiche la liste des tâches et quitte. Si la valeur facultative [priorite] "
+"est précisée,\n"
+"\talors ne seront affichées que les tâches de ce niveau priorité.\n"
+"\tLe niveau de priorité est compris entre 1 (plus important) et 9 (moins "
+"important).\n"
+"\tIl est également possible de spécifier '0' pour la priorité,\n"
+"\tauquel cas seules les tâches terminées seront affichés.\n"
+"\n"
+" -x[format], --export[=format]\n"
+"\texporte les données utilisateur au format spécifié. Évènements, rendez-"
+"vous et \n"
+"\ttâches sont convertis et envoyés sur la sortie standard (stdout).\n"
+"\tDeux formats au choix : 'ical' et 'pcal'.\n"
+"\tSi l'option facultative de format est omise, le format ical\n"
+"\test sélectionné par défaut.\n"
+"\tnote : pour rediriger la sortie de l'export vers un fichier,\n"
+"\tutilisez une commande de la forme : calcurse --export > calcurse.dat\n"
+"\n"
+"Pour plus d'informations, tapez '?' dans Calcurse, ou lisez le manuel.\n"
+"Envoyez par courriel vos rapports de bogue et vos suggestions à "
+"<misc@calcurse.org>.\n"
#, c-format
msgid ""
@@ -235,7 +316,7 @@ msgid "To do :"
msgstr "Tâche :"
msgid "ERROR setting first day of week"
-msgstr ""
+msgstr "ERREUR de paramètre sur le premier jour de la semaine"
msgid ""
"The day you entered is not valid (should be between 01/01/1902 and "
@@ -278,7 +359,7 @@ msgid "Layout"
msgstr "Ecran"
msgid "Sidebar"
-msgstr ""
+msgstr "Barre latérale"
msgid "Color"
msgstr "Couleur"
@@ -287,10 +368,10 @@ msgid "Notify"
msgstr "Notifier"
msgid "Keys"
-msgstr ""
+msgstr "Raccourcis"
msgid "Select"
-msgstr ""
+msgstr "Sélectionner"
msgid "Up"
msgstr "Haut"
@@ -479,19 +560,19 @@ msgid "undefined"
msgstr "inconnue"
msgid "Key info"
-msgstr ""
+msgstr "Informations"
msgid "Add key"
-msgstr ""
+msgstr "Ajouter"
msgid "Del key"
-msgstr ""
+msgstr "Supprimer"
msgid "Prev Key"
-msgstr ""
+msgstr "Précédent"
msgid "Next Key"
-msgstr ""
+msgstr "Suivant"
#, c-format
msgid "keys configuration"
@@ -692,7 +773,7 @@ msgid ""
msgstr ""
msgid "Displacement keys\n"
-msgstr ""
+msgstr "Touches de déplacement\n"
#, c-format
msgid ""
@@ -721,7 +802,7 @@ msgid ""
msgstr ""
msgid "View\n"
-msgstr ""
+msgstr "Afficher\n"
#, c-format
msgid ""
@@ -772,7 +853,7 @@ msgid ""
msgstr ""
msgid "Delete\n"
-msgstr ""
+msgstr "Supprimer\n"
#, c-format
msgid ""
@@ -1016,7 +1097,7 @@ msgid ""
msgstr ""
msgid "Generic keybindings\n"
-msgstr ""
+msgstr "Raccourcis clavier génériques\n"
#, c-format
msgid ""
@@ -1093,6 +1174,8 @@ msgstr "Export..."
msgid "Internal error while displaying progress bar"
msgstr ""
+"Une erreur interne s'est produite durant l'affichage de la barre de "
+"progression"
msgid "Choose the file used to export calcurse data:"
msgstr "Choisissez le fichier dans lequel exporter les données :"
@@ -1147,7 +1230,7 @@ msgid "The data files were successfully saved"
msgstr "Les données ont été correctement enregistrées"
msgid "syntax error in the item date"
-msgstr ""
+msgstr "Erreur de syntaxe sur la date"
msgid "no event nor appointment found"
msgstr "Aucun évènement ou rendez-vous trouvé"
@@ -1159,7 +1242,7 @@ msgid "Failed to open todo file"
msgstr "Problème d'ouverture du fichier des tâches"
msgid "could not find any key file."
-msgstr ""
+msgstr "Impossible de trouver un fichier de raccourcis."
msgid ""
"\n"
@@ -1167,23 +1250,29 @@ msgid ""
"Please backup your keys file, remove it from directory, and launch calcurse "
"again.\n"
msgstr ""
+"\n"
+"Trop d'erreurs à la lecture du fichier de configuration !\n"
+"Veuillez faire une sauvegarde votre fichier de raccourcis, et le supprimer "
+"du répertoire, puis relancer calcurse.\n"
msgid "Could not read key label"
-msgstr ""
+msgstr "Impossible de lire le libellé de la touche"
msgid "Key label not recognized"
msgstr "Touche non reconnue"
#, c-format
msgid "Error reading key: \"%s\""
-msgstr ""
+msgstr "Erreur de lecture de la touche : \"%s\""
#, c-format
msgid "\"%s\" assigned multiple times!"
-msgstr ""
+msgstr "\"%s\" est assignée plusieurs fois !"
msgid "There were some errors when loading keys file, see log file ?"
msgstr ""
+"Des erreurs se sont produites lors du chargement du fichier de raccourcis. "
+"Voulez-vous consulter le journal ?"
msgid "Too many errors while reading keys file, aborting..."
msgstr "Trop d'erreur durant la lecture du fichier de touche, annulation..."
@@ -1254,7 +1343,7 @@ msgid "item has a negative duration."
msgstr "L'élément a une durée négative."
msgid "event date is not defined."
-msgstr ""
+msgstr "La date de l'évènement n'est pas définie."
msgid "item could not be identified."
msgstr "L'élément n'a pu être identifié."
@@ -1312,6 +1401,8 @@ msgstr "Certains éléments n'ont pu être importés, voir le fichier de log ?"
msgid "Warning: could not create temporary log file, Aborting..."
msgstr ""
+"Attention : création d'un fichier journal temporaire impossible, abandon en "
+"cours..."
msgid "Warning: could not open temporary log file, Aborting..."
msgstr "Attention: impossible d'ouvrir le fichier de log, abandon..."
@@ -1385,7 +1476,7 @@ msgid "notify-daemon_log = "
msgstr "notify-daemon_log = "
msgid "(Log activity when running in background)"
-msgstr ""
+msgstr "Enregistrer l'activité lors de l'exécution en arrière-plan"
msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
msgstr ""
@@ -1409,13 +1500,15 @@ msgid "unknown character"
msgstr "caractère inconnu"
msgid "date error in event"
-msgstr "Date erroné pour le rendez-vous"
+msgstr "Date erronée pour l'évènement"
msgid "appointment not found"
msgstr "rendez-vous inconnu"
msgid "Enter the repetition type: (D)aily, (W)eekly, (M)onthly, (Y)early"
-msgstr "Entrez le type: (D) journ., (W) hebdo., (M) mensuel, (Y) annuel"
+msgstr ""
+"Entrez le type de répétition : (D) quotidien, (W) hebdomadaire, (M) mensuel, "
+"(Y) annuel"
msgid "Enter the repetition frequence:"
msgstr "Entrez la fréquence de répétition :"
@@ -1426,19 +1519,20 @@ msgstr "Entrez la date de fin: [%s] ou '0' pour répéter indéfiniment"
#, c-format
msgid "Possible formats are [%s] or '0' for an endless repetition"
-msgstr "Les formats autorisés sont [%s] ou '0' pour une répétition sans fin"
+msgstr ""
+"Les formats autorisés sont [%s] ou '0' pour une répétition indéfiniment"
msgid "This item is already a repeated one."
-msgstr "Cet élément est déjà recurrent."
+msgstr "Cet élément est déjà récurrent."
msgid "Sorry, the date you entered is older than the item start time."
-msgstr "La date que vous avez entrée est antérieure à la date de l'élément!"
+msgstr "La date que vous avez entrée est antérieure à la date de l'élément !"
msgid "wrong item type"
msgstr "type d'élément incorrect"
msgid "syntax error in item date"
-msgstr "erreur de syntaxe dans la data de l'élément"
+msgstr "erreur de syntaxe dans la date de l'élément"
#, c-format
msgid "Could not remove calcurse lock file: %s\n"
@@ -1465,7 +1559,7 @@ msgstr "Voulez-vous vraiment effacer cette tâche ?"
msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote ?"
msgstr ""
-"Une note est attachée à cette tâche. Effacer (t) la tâche ou (n) la note "
+"Une note est attachée à cette tâche. Effacer la (t)âche ou la (n)ote "
"seulement ?"
msgid "[t/n] "
@@ -1493,10 +1587,10 @@ msgid "Internal error: line too long"
msgstr "Erreur interne : ligne trop longue"
msgid "out of memory"
-msgstr "plus de memoire"
+msgstr "dépassement de mémoire"
msgid "failure in mktime"
-msgstr "faute dans mktime"
+msgstr "erreur fatale dans mktime"
msgid "error in mktime"
msgstr "erreur dans mktime"
@@ -1508,7 +1602,7 @@ msgid "could not convert string"
msgstr "impossible de convertir la chaîne de caractères"
msgid "out of range"
-msgstr "en dehors de l'interval"
+msgstr "en dehors de l'intervalle"
msgid "yes"
msgstr "oui"
@@ -1517,14 +1611,14 @@ msgid "no"
msgstr "non"
msgid "option not defined"
-msgstr "option non definie"
+msgstr "option non définie"
#, c-format
msgid "temporary file \"%s\" could not be created"
msgstr "le fichier temporaire \"%s\" n'a pas pu être crée"
msgid "could not remove note"
-msgstr "impossible de retirer la note"
+msgstr "impossible de supprimer la note"
#, c-format
msgid "Error when closing file at %s"
@@ -1633,13 +1727,13 @@ msgid "Config"
msgstr "Config"
msgid "Redraw"
-msgstr "Retracer"
+msgstr "Rafraîchir"
msgid "Add Appt"
msgstr "Ajt rdv"
msgid "Add Todo"
-msgstr "Ajt todo"
+msgstr "Ajt tâche"
msgid "+1 Day"
msgstr "+1 Jour"
@@ -1657,10 +1751,10 @@ msgid "Today"
msgstr "Aujourd."
msgid "Nxt View"
-msgstr "Proch.Vue"
+msgstr "Voir Suiv."
msgid "Prv View"
-msgstr "VuePrec."
+msgstr "Voir Prec."
msgid "beg Week"
msgstr "deb Sem."
diff --git a/po/nl.po b/po/nl.po
index a599763..94ffcb0 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-11 09:21+0000\n"
"Last-Translator: cryptocrack <transifex@cryptocrack.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/po/ru.po b/po/ru.po
index e66dcff..8317153 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2011-07-31 02:54+0200\n"
+"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-23 18:06+0000\n"
"Last-Translator: Rusdec <linux.kernel.it@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/calcurse/team/"
diff --git a/src/args.c b/src/args.c
index 060ac3d..8600d33 100644
--- a/src/args.c
+++ b/src/args.c
@@ -193,13 +193,19 @@ print_notefile (FILE *out, char *filename, int nbtab)
{
char path_to_notefile[BUFSIZ];
FILE *notefile;
- char linestarter[BUFSIZ] = "";
+ char linestarter[BUFSIZ];
char buffer[BUFSIZ];
int i;
int printlinestarter = 1;
- for (i = 0; i < nbtab; i++)
- (void)snprintf(linestarter, BUFSIZ, "%s\t", linestarter);
+ if (nbtab < BUFSIZ)
+ {
+ for (i = 0; i < nbtab; i++)
+ linestarter[i] = '\t';
+ linestarter[nbtab] = '\0';
+ }
+ else
+ linestarter[0] = '\0';
(void)snprintf (path_to_notefile, BUFSIZ, "%s/%s", path_notes, filename);
notefile = fopen (path_to_notefile, "r");
diff --git a/src/io.c b/src/io.c
index d8af1fb..ddd584b 100644
--- a/src/io.c
+++ b/src/io.c
@@ -1813,7 +1813,7 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
/*
* Returns an allocated string representing the string given in argument once
- * unformatted. See ical_unfold_content () below.
+ * unformatted.
*
* Note:
* Even if the RFC2445 recommends not to have more than 75 octets on one line of
@@ -1827,8 +1827,6 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
static char *
ical_unformat_line (char *line)
{
-#define LINE_FEED 0x0a
-#define CARRIAGE_RETURN 0x0d
char *p, uline[BUFSIZ];
int len;
@@ -1840,10 +1838,6 @@ ical_unformat_line (char *line)
{
switch (*p)
{
- case LINE_FEED:
- return mem_strdup (uline);
- case CARRIAGE_RETURN:
- break;
case '\\':
switch (*(p + 1))
{
@@ -1871,106 +1865,69 @@ ical_unformat_line (char *line)
break;
}
}
-#undef LINE_FEED
-#undef CARRIAGE_RETURN
- return NULL;
+
+ return mem_strdup (uline);
}
-/*
- * Extract from RFC2445:
- *
- * When parsing a content line, folded lines MUST first be
- * unfolded [..] The content information associated with an iCalendar
- * object is formatted using a syntax similar to that defined by [RFC 2425].
- */
-static char *
-ical_unfold_content (FILE *fd, char *line, unsigned *lineno)
+static void
+ical_readline_init (FILE *fdi, char *buf, char *lstore, unsigned *ln)
{
- char *content;
- int c;
+ char *eol;
- content = ical_unformat_line (line);
- if (!content)
- return NULL;
+ *buf = *lstore = '\0';
+ fgets (lstore, BUFSIZ, fdi);
+ if ((eol = strchr(lstore, '\n')) != NULL)
+ *eol = '\0';
+ (*ln)++;
+}
- for (;;)
- {
- c = getc (fd);
- if (c == SPACE || c == TAB)
- {
- char buf[BUFSIZ];
+static int
+ical_readline (FILE *fdi, char *buf, char *lstore, unsigned *ln)
+{
+ char *eol;
- if (fgets (buf, BUFSIZ, fd) != NULL)
- {
- char *tmpline, *rline;
- int newsize;
+ strncpy (buf, lstore, BUFSIZ);
+ (*ln)++;
- (*lineno)++;
- tmpline = ical_unformat_line (buf);
- if (!tmpline)
- {
- mem_free (content);
- return NULL;
- }
- newsize = strlen (content) + strlen (tmpline) + 1;
- if ((rline = mem_realloc (content, newsize, 1)) == NULL)
- {
- mem_free (content);
- mem_free (tmpline);
- return NULL;
- }
- content = rline;
- (void)strncat (content, tmpline, BUFSIZ);
- mem_free (tmpline);
- }
- else
- {
- mem_free (content);
- return NULL;
- /* Could not get entire item description. */
- }
- }
- else
- {
- (void)ungetc (c, fd);
- return content;
- }
+ while (fgets (lstore, BUFSIZ, fdi) != NULL)
+ {
+ if ((eol = strchr(lstore, '\n')) != NULL)
+ *eol = '\0';
+ if (*lstore != SPACE && *lstore != TAB)
+ break;
+ strncat (buf, lstore + 1, BUFSIZ);
+ (*ln)++;
+ }
+
+ if (feof (fdi))
+ {
+ *lstore = '\0';
+ if (*buf == '\0')
+ return 0;
}
+
+ return 1;
}
static float
-ical_chk_header (FILE *fd, unsigned *lineno)
+ical_chk_header (FILE *fd, char *buf, char *lstore, unsigned *lineno)
{
const int HEADER_MALFORMED = -1;
const struct string icalheader = STRING_BUILD ("BEGIN:VCALENDAR");
- char buf[BUFSIZ];
-
- (void)fgets (buf, BUFSIZ, fd);
- (*lineno)++;
+ float version;
- if (buf == NULL) return HEADER_MALFORMED;
+ if (!ical_readline (fd, buf, lstore, lineno))
+ return HEADER_MALFORMED;
str_toupper (buf);
if (strncmp (buf, icalheader.str, icalheader.len) != 0)
return HEADER_MALFORMED;
- const int AWAITED = 1;
- float version = HEADER_MALFORMED;
- int read;
-
- do
+ while (!sscanf (buf, "VERSION:%f", &version))
{
- if (fgets (buf, BUFSIZ, fd) == NULL)
- {
- return HEADER_MALFORMED;
- }
- else
- {
- (*lineno)++;
- read = sscanf (buf, "VERSION:%f", &version);
- }
+ if (!ical_readline (fd, buf, lstore, lineno))
+ return HEADER_MALFORMED;
}
- while (read != AWAITED);
return version;
}
@@ -2354,14 +2311,13 @@ ical_read_exdate (llist_t *exc, FILE *log, char *exstr, unsigned *noskipped,
/* Return an allocated string containing the name of the newly created note. */
static char *
-ical_read_note (char *first_line, FILE *fdi, unsigned *noskipped,
- unsigned *lineno, ical_vevent_e item_type, const int itemline,
- FILE *log)
+ical_read_note (char *line, unsigned *noskipped, ical_vevent_e item_type,
+ const int itemline, FILE *log)
{
char *p, *notestr, *notename, fullnotename[BUFSIZ];
FILE *fdo;
- if ((p = strchr (first_line, ':')) != NULL)
+ if ((p = strchr (line, ':')) != NULL)
{
notename = new_tempfile (path_notes, NOTESIZ);
EXIT_IF (notename == NULL,
@@ -2372,7 +2328,7 @@ ical_read_note (char *first_line, FILE *fdi, unsigned *noskipped,
EXIT_IF (fdo == NULL, _("Warning: could not open %s, Aborting..."),
fullnotename);
p++;
- notestr = ical_unfold_content (fdi, p, lineno);
+ notestr = ical_unformat_line (p);
if (notestr == NULL)
{
ical_log (log, item_type, itemline,
@@ -2407,14 +2363,14 @@ ical_read_note (char *first_line, FILE *fdi, unsigned *noskipped,
/* Returns an allocated string containing the ical item summary. */
static char *
-ical_read_summary (char *first_line, FILE *fdi, unsigned *lineno)
+ical_read_summary (char *line)
{
char *p, *summary;
- if ((p = strchr (first_line, ':')) != NULL)
+ if ((p = strchr (line, ':')) != NULL)
{
p++;
- summary = ical_unfold_content (fdi, p, lineno);
+ summary = ical_unformat_line (p);
return summary;
}
else
@@ -2423,7 +2379,8 @@ ical_read_summary (char *first_line, FILE *fdi, unsigned *lineno)
static void
ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
- unsigned *noskipped, unsigned *lineno)
+ unsigned *noskipped, char *buf, char *lstore,
+ unsigned *lineno)
{
const int ITEMLINE = *lineno;
const struct string endevent = STRING_BUILD ("END:VEVENT");
@@ -2437,7 +2394,7 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
const struct string endalarm = STRING_BUILD ("END:VALARM");
const struct string desc = STRING_BUILD ("DESCRIPTION");
ical_vevent_e vevent_type;
- char *p, buf[BUFSIZ], buf_upper[BUFSIZ];
+ char *p, buf_upper[BUFSIZ];
struct {
llist_t exc;
ical_rpt_t *rpt;
@@ -2450,11 +2407,11 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
vevent_type = UNDEFINED;
bzero (&vevent, sizeof vevent);
skip_alarm = 0;
- while (fgets (buf, BUFSIZ, fdi) != NULL)
+ while (ical_readline (fdi, buf, lstore, lineno))
{
- (*lineno)++;
memcpy (buf_upper, buf, strlen (buf));
str_toupper (buf_upper);
+
if (skip_alarm)
{
/* Need to skip VALARM properties because some keywords could
@@ -2584,7 +2541,7 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
}
else if (strncmp (buf_upper, summary.str, summary.len) == 0)
{
- vevent.mesg = ical_read_summary (buf, fdi, lineno);
+ vevent.mesg = ical_read_summary (buf);
}
else if (strncmp (buf_upper, alarm.str, alarm.len) == 0)
{
@@ -2593,8 +2550,8 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
}
else if (strncmp (buf_upper, desc.str, desc.len) == 0)
{
- vevent.note = ical_read_note (buf, fdi, noskipped, lineno,
- ICAL_VEVENT, ITEMLINE, log);
+ vevent.note = ical_read_note (buf, noskipped, ICAL_VEVENT,
+ ITEMLINE, log);
}
}
}
@@ -2616,7 +2573,7 @@ cleanup:
static void
ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
- unsigned *lineno)
+ char *buf, char *lstore, unsigned *lineno)
{
const struct string endtodo = STRING_BUILD ("END:VTODO");
const struct string summary = STRING_BUILD ("SUMMARY");
@@ -2625,7 +2582,7 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
const struct string desc = STRING_BUILD ("DESCRIPTION");
const int LOWEST = 9;
const int ITEMLINE = *lineno;
- char buf[BUFSIZ], buf_upper[BUFSIZ];
+ char buf_upper[BUFSIZ];
struct {
char *mesg, *note;
int has_priority, priority;
@@ -2634,9 +2591,8 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
bzero (&vtodo, sizeof vtodo);
skip_alarm = 0;
- while (fgets (buf, BUFSIZ, fdi) != NULL)
+ while (ical_readline (fdi, buf, lstore, lineno))
{
- (*lineno)++;
memcpy (buf_upper, buf, strlen (buf));
str_toupper (buf_upper);
if (skip_alarm)
@@ -2685,7 +2641,7 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
}
else if (strncmp (buf_upper, summary.str, summary.len) == 0)
{
- vtodo.mesg = ical_read_summary (buf, fdi, lineno);
+ vtodo.mesg = ical_read_summary (buf);
}
else if (strncmp (buf_upper, alarm.str, alarm.len) == 0)
{
@@ -2693,8 +2649,8 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
}
else if (strncmp (buf_upper, desc.str, desc.len) == 0)
{
- vtodo.note = ical_read_note (buf, fdi, noskipped, lineno,
- ICAL_VTODO, ITEMLINE, log);
+ vtodo.note = ical_read_note (buf, noskipped, ICAL_VTODO,
+ ITEMLINE, log);
}
}
}
@@ -2759,7 +2715,7 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
const struct string vtodo = STRING_BUILD ("BEGIN:VTODO");
char *proc_report = _("Import process report: %04d lines read ");
char stats_str[4][BUFSIZ];
- char buf[BUFSIZ];
+ char buf[BUFSIZ], lstore[BUFSIZ];
FILE *stream = NULL;
struct io_file *log;
float ical_version;
@@ -2788,7 +2744,8 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
return;
bzero (&stats, sizeof stats);
- ical_version = ical_chk_header (stream, &stats.lines);
+ ical_readline_init (stream, buf, lstore, &stats.lines);
+ ical_version = ical_chk_header (stream, buf, lstore, &stats.lines);
RETURN_IF (ical_version < 0,
_("Warning: ical header malformed or wrong version number. "
"Aborting..."));
@@ -2802,19 +2759,19 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
}
ical_log_init (log->fd, ical_version);
- while (fgets (buf, BUFSIZ, stream) != NULL)
+ while (ical_readline (stream, buf, lstore, &stats.lines))
{
stats.lines++;
str_toupper (buf);
if (strncmp (buf, vevent.str, vevent.len) == 0)
{
ical_read_event (stream, log->fd, &stats.events, &stats.apoints,
- &stats.skipped, &stats.lines);
+ &stats.skipped, buf, lstore, &stats.lines);
}
else if (strncmp (buf, vtodo.str, vtodo.len) == 0)
{
ical_read_todo (stream, log->fd, &stats.todos, &stats.skipped,
- &stats.lines);
+ buf, lstore, &stats.lines);
}
}
if (stream != stdin)