summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntti-Juhani Kaijanaho <ajk@debian.org>2006-01-28 21:39:32 +0100
committerAntti-Juhani Kaijanaho <ajk@debian.org>2006-01-28 21:39:32 +0100
commitd76fd6cc7053df6d3727b813c4f16db34b79616c (patch)
tree9ee652551942d92a1965ef76c832eefbb5e74ad1
parent5e27f2bf391714de0cb0b3a629ef72ee6fbc90cf (diff)
downloaddctrl-tools-d76fd6cc7053df6d3727b813c4f16db34b79616c.tar.gz
Import 2.1.1
-rw-r--r--Makefile2
-rw-r--r--debian/changelog13
-rw-r--r--grep-dctrl.c15
-rw-r--r--langs.mk2
-rw-r--r--po/README.Translators2
-rw-r--r--po/ca.po83
-rw-r--r--po/de.po264
-rw-r--r--po/fi.po40
-rw-r--r--predicate.c21
-rw-r--r--predicate.h2
10 files changed, 399 insertions, 45 deletions
diff --git a/Makefile b/Makefile
index f370ff3..36549b5 100644
--- a/Makefile
+++ b/Makefile
@@ -55,7 +55,7 @@ po/grep-dctrl.pot : $(src)
fsaf.test : fsaf.test.o msg.o
clean :
- $(RM) core grep-dctrl grep-dctrl.1 *.o po/*.mo TAGS
+ $(RM) core grep-dctrl grep-dctrl.1 *.o po/*.mo po/*.pot TAGS
tags :
etags *.[hc]
diff --git a/debian/changelog b/debian/changelog
index 9d5ca6d..5ab69e7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,16 @@
+grep-dctrl (2.1.1) unstable; urgency=low
+
+ * New German translation by Gerfried Fuchs.
+ * grep-dctrl.c: Fix help message inconsistent punctuation and other
+ minor message errors
+ Closes: #229821 (some minor nitpicks with the po files)
+ * Makefile (clean): Remove also *.pot
+ * predicate.[ch], grep-dctrl.c: Check for malformed predicates.
+ This is a kluge, but gets rid of certain assertion failures.
+ * Update Catalan translation by Jordi Mallach.
+
+ -- Antti-Juhani Kaijanaho <ajk@debian.org> Sat, 7 Feb 2004 10:29:44 +0200
+
grep-dctrl (2.1.0) unstable; urgency=low
* Creating a 2.1 maintenance branch - patchlevel added to version number.
diff --git a/grep-dctrl.c b/grep-dctrl.c
index 3fbeffe..1048d89 100644
--- a/grep-dctrl.c
+++ b/grep-dctrl.c
@@ -122,8 +122,8 @@ static struct argp_option options[] = {
{ "banner", 'B', 0, 0, N_("Show the testing banner.") },
#endif
{ "errorlevel", 'l', N_("LEVEL"), 0, N_("Set debugging level to LEVEL.") },
- { "field", 'F', N_("FIELD,FIELD,..."), 0, N_("Restrict pattern matching to the FIELDs given.") },
- { 0, 'P', 0, 0, N_("Shorthand for -FPackage") },
+ { "field", 'F', N_("FIELD,FIELD,..."), 0, N_("Restrict pattern matching to the FIELDs given.") },
+ { 0, 'P', 0, 0, N_("This is a shorthand for -FPackage.") },
{ "show-field", 's', N_("FIELD,FIELD,..."), 0, N_("Show only the body of these fields from the matching paragraphs.") },
{ 0, 'd', 0, 0, N_("Show only the first line of the \"Description\" field from the matching paragraphs.") },
{ "no-field-names", 'n', 0, 0, N_("Suppress field names when showing specified fields.") },
@@ -139,8 +139,8 @@ static struct argp_option options[] = {
{ "or", 'o', 0, 0, N_("Disjunct predicates.") },
{ "not", '!', 0, 0, N_("Negate the following predicate.") },
{ "debug-optparse", OPT_OPTPARSE, 0, 0, N_("Debug option parsing.") },
- { "quiet", 'q', 0, 0, N_("No output to stdout") },
- { "silent", OPT_SILENT, 0, 0, N_("No output to stdout") },
+ { "quiet", 'q', 0, 0, N_("Do no output to stdout.") },
+ { "silent", OPT_SILENT, 0, 0, N_("Do no output to stdout.") },
{ 0 }
};
@@ -236,7 +236,7 @@ static void finish_atom(struct arguments * args)
{
struct atom * atom = get_current_atom(&args->p);
if (atom->pat == 0) {
- message(L_FATAL, _("A pattern is mandatory."), 0);
+ message(L_FATAL, _("A pattern is mandatory"), 0);
fail();
}
for (size_t i = 0; i < args->num_search_fields; i++) {
@@ -600,6 +600,11 @@ int main (int argc, char * argv[])
fail();
}
+ if (!check_predicate(&args.p)) {
+ message(L_FATAL, _("malformed predicate"), 0);
+ fail();
+ }
+
if (args.short_descr && !args.description_selected) {
if (args.num_show_fields >= MAX_FIELDS) {
message(L_FATAL, _("too many output fields"), 0);
diff --git a/langs.mk b/langs.mk
index 86072b1..27d01b0 100644
--- a/langs.mk
+++ b/langs.mk
@@ -1 +1 @@
-langs = ca fi
+langs = ca fi de
diff --git a/po/README.Translators b/po/README.Translators
index 1fea312..9bb1ea7 100644
--- a/po/README.Translators
+++ b/po/README.Translators
@@ -36,6 +36,6 @@ generated file and thus does not belong under version control).
You need to add your language to ../langs.mk for the makefile magic to
work.
-Do not touch the C sources without consulting AJK first.
+Please, do not touch the C sources without consulting AJK first.
diff --git a/po/ca.po b/po/ca.po
index 89ef8e5..736b663 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: dctrl-tools\n"
"Report-Msgid-Bugs-To: ajk@debian.org\n"
-"POT-Creation-Date: 2004-01-13 00:47+0200\n"
-"PO-Revision-Date: 2004-01-13 13:31+0100\n"
+"POT-Creation-Date: 2004-02-09 10:18+0100\n"
+"PO-Revision-Date: 2004-02-09 10:20+0100\n"
"Last-Translator: Jordi Mallach <jordi@debian.org>\n"
"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
"MIME-Version: 1.0\n"
@@ -36,12 +36,12 @@ msgid "FIELD,FIELD,..."
msgstr "CAMP,CAMP,..."
#: grep-dctrl.c:125
-msgid "Restrict pattern matching to the FIELDs given."
+msgid "Restrict pattern matching to the FIELDs given."
msgstr "Restringeix la coincidència de patrons als CAMPs donats."
#: grep-dctrl.c:126
-msgid "Shorthand for -FPackage"
-msgstr "Forma curta per a -FPackage"
+msgid "This is a shorthand for -FPackage."
+msgstr "Forma curta per a -FPackage."
#: grep-dctrl.c:127
msgid "Show only the body of these fields from the matching paragraphs."
@@ -113,16 +113,16 @@ msgid "Debug option parsing."
msgstr "Depura l'anàlisi d'opcions."
#: grep-dctrl.c:142 grep-dctrl.c:143
-msgid "No output to stdout"
-msgstr "No mostra res a l'eixida estàndard"
+msgid "Do no output to stdout."
+msgstr "No mostra res a l'eixida estàndard."
#: grep-dctrl.c:207 grep-dctrl.c:277 grep-dctrl.c:343 predicate.c:39
msgid "predicate is too complex"
msgstr "el predicat és massa complex"
#: grep-dctrl.c:239
-msgid "A pattern is mandatory."
-msgstr "Es necessita un patró."
+msgid "A pattern is mandatory"
+msgstr "Es necessita un patró"
#: grep-dctrl.c:298
msgid "syntax error in command line"
@@ -134,7 +134,9 @@ msgstr "manca un «)» en la línia d'ordres"
#: grep-dctrl.c:333
msgid "Unexpected atom in command line. Did you forget to use a connective?"
-msgstr "S'ha trobat un àtom inesperat en la línia d'ordres. Heu oblidat utilitzar un connector?"
+msgstr ""
+"S'ha trobat un àtom inesperat en la línia d'ordres. Heu oblidat utilitzar un "
+"connector?"
#: grep-dctrl.c:410
msgid "no such log level"
@@ -156,41 +158,45 @@ msgstr "hi ha massa noms de fitxers"
msgid "a predicate is required"
msgstr "es requereix un predicat"
-#: grep-dctrl.c:605
+#: grep-dctrl.c:604
+msgid "malformed predicate"
+msgstr "el predicat és malformat"
+
+#: grep-dctrl.c:610
msgid "too many output fields"
msgstr "hi ha massa camps d'eixida"
-#: grep-dctrl.c:609
+#: grep-dctrl.c:614
msgid "Adding \"Description\" to selected output fields because of -d"
msgstr ""
"S'està afegint «Description» als camps d'eixida seleccionats a causa de -d"
-#: grep-dctrl.c:618
+#: grep-dctrl.c:623
msgid "cannot suppress field names when showing whole paragraphs"
msgstr "no es pot suprimir els noms de camp quan es mostren paràgrafs sencers"
-#: grep-dctrl.c:658
+#: grep-dctrl.c:663
#, c-format
msgid "%s: %s: cannot stat: %s\n"
msgstr "%s: %s: no es pot fer stat(): %s\n"
-#: grep-dctrl.c:667
+#: grep-dctrl.c:672
msgid "is a directory, skipping"
msgstr "és un directori, s'està ometent"
-#: grep-dctrl.c:668
+#: grep-dctrl.c:673
msgid "is a block device, skipping"
msgstr "és un dispositiu de bloc, s'està ometent"
-#: grep-dctrl.c:669
+#: grep-dctrl.c:674
msgid "internal error"
msgstr "s'ha produït un error intern"
-#: grep-dctrl.c:670
+#: grep-dctrl.c:675
msgid "is a socket, skipping"
msgstr "és un sòcol, s'està ometent"
-#: grep-dctrl.c:671
+#: grep-dctrl.c:676
msgid "unknown file type, skipping"
msgstr "el tipus de fitxer és desconegut, s'està ometent"
@@ -230,5 +236,44 @@ msgstr "sí, s'utilitzarà el nom d'executable"
msgid "default input file"
msgstr "fitxer d'entrada per defecte"
+#~ msgid "Test for numerical equality."
+#~ msgstr "Comprova l'igualtat numèrica."
+
+#~ msgid "Numerical test: <."
+#~ msgstr "Comprovació numèrica: <."
+
+#~ msgid "Numerical test: <=."
+#~ msgstr "Comprovació numèrica: <=."
+
+#~ msgid "Numerical test: >."
+#~ msgstr "Comprovació numèrica: >."
+
+#~ msgid "Numerical test: >=."
+#~ msgstr "Comprovació numèrica: >=."
+
+#~ msgid "%s: command (%s) failed (exit status %d)\n"
+#~ msgstr "%s: l'ordre (%s) ha fallat (estat d'eixida %d)\n"
+
+#~ msgid "%s: command (%s) was killed by signal %d\n"
+#~ msgstr "%s: l'ordre (%s) ha estat terminada pel senyal %d\n"
+
+#~ msgid "%s (child): failed to exec /bin/sh: %s\n"
+#~ msgstr "%s (fill): no s'ha pogut executar /bin/sh: %s\n"
+
+#~ msgid "invalid numeric pattern"
+#~ msgstr "el patró numèric és invàlid"
+
+#~ msgid "parse of a numeric field failed"
+#~ msgstr "no s'ha pogut analitzar el camp numèric"
+
+#~ msgid "Malformed default input file name"
+#~ msgstr "El fitxer d'entrada per defecte és malformat"
+
+#~ msgid "not owned by you or root, ignoring"
+#~ msgstr "el proprietari no sou vosaltres o el superusuari, s'omet"
+
+#~ msgid "write permissions for group or others, ignoring"
+#~ msgstr "té permisos d'escriptura per al grup o altres, s'omet"
+
#~ msgid "%s: %s: %s\n"
#~ msgstr "%s: %s: %s\n"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..ee3a6eb
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,264 @@
+# German translation of dctrl-tools
+# Copyright © 2004 Gerfried Fuchs
+# This file is distributed under the same license as the dctrl-tools package.
+# Gerfried Fuchs <alfie@debian.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dctrl-tools\n"
+"Report-Msgid-Bugs-To: ajk@debian.org\n"
+"POT-Creation-Date: 2004-02-07 10:32+0200\n"
+"PO-Revision-Date: 2004-02-09 09:58+0100\n"
+"Last-Translator: Gerfried Fuchs <alfie@debian.org>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: grep-dctrl.c:43
+msgid "grep-dctrl -- grep Debian control files"
+msgstr "grep-dctrl -- grep Debian-Control-Dateien"
+
+#: grep-dctrl.c:122
+msgid "Show the testing banner."
+msgstr "Zeigt den Testing-Banner."
+
+#: grep-dctrl.c:124
+msgid "LEVEL"
+msgstr "EBENE"
+
+#: grep-dctrl.c:124
+msgid "Set debugging level to LEVEL."
+msgstr "Setzt Debugging-Ebene auf EBENE."
+
+#: grep-dctrl.c:125 grep-dctrl.c:127
+msgid "FIELD,FIELD,..."
+msgstr "FELD,FELD,..."
+
+#: grep-dctrl.c:125
+msgid "Restrict pattern matching to the FIELDs given."
+msgstr "Beschränkt die Musterprüfung auf die angegebenen FELDer."
+
+#: grep-dctrl.c:126
+msgid "This is a shorthand for -FPackage."
+msgstr "Dies ist eine Kurzform für -FPackage."
+
+#: grep-dctrl.c:127
+msgid "Show only the body of these fields from the matching paragraphs."
+msgstr "Zeigt nur den Inhalt dieser Felder aus dem passenden Abschnitt."
+
+#: grep-dctrl.c:128
+msgid ""
+"Show only the first line of the \"Description\" field from the matching "
+"paragraphs."
+msgstr ""
+"Zeigt nur die erste Zeile des »Description«-Feldes des passenden Abschnitts."
+
+#: grep-dctrl.c:129
+msgid "Suppress field names when showing specified fields."
+msgstr "Unterdrückt die Feldnamen beim Anzeigen der angegebenen Felder."
+
+#: grep-dctrl.c:130
+msgid "Regard the pattern as an extended POSIX regular expression."
+msgstr "Behandelt das Muster als erweiterten POSIX-regulären Ausdruck."
+
+#: grep-dctrl.c:131
+msgid "The pattern is a standard POSIX regular expression."
+msgstr "Das Muster ist ein Standard-POSIX regulärer Ausdruck."
+
+#: grep-dctrl.c:132
+msgid "Ignore case when looking for a match."
+msgstr "Ignoriert die Groß-/Kleinschreibung beim Suchen eines Treffers."
+
+#: grep-dctrl.c:133
+msgid "Show only paragraphs that do not match."
+msgstr "Zeigt nur die Abschnitte, die nicht passen."
+
+#: grep-dctrl.c:134
+msgid "Show only the count of matching paragraphs."
+msgstr "Zeigt nur die Anzahl der passenden Abschnitte."
+
+#: grep-dctrl.c:135
+msgid "FNAME"
+msgstr "FNAME"
+
+#: grep-dctrl.c:135
+msgid "Use FNAME as the config file."
+msgstr "Verwendet FNAME als Konfigurationsdatei."
+
+#: grep-dctrl.c:136
+msgid "Do an exact match."
+msgstr "Führt eine exakte Übereinstimmung durch."
+
+#: grep-dctrl.c:137
+msgid "Print out the copyright license."
+msgstr "Gibt die Copyright-Lizenz aus."
+
+#: grep-dctrl.c:138
+msgid "Conjunct predicates."
+msgstr "UND-verknüpfte Eigenschaften."
+
+#: grep-dctrl.c:139
+msgid "Disjunct predicates."
+msgstr "ODER-verknüpfte Eigenschaften."
+
+#: grep-dctrl.c:140
+msgid "Negate the following predicate."
+msgstr "Negiert die folgende Eigenschaft."
+
+#: grep-dctrl.c:141
+msgid "Debug option parsing."
+msgstr "Optionenverarbeitung debuggen."
+
+#: grep-dctrl.c:142 grep-dctrl.c:143
+msgid "Do no output to stdout."
+msgstr "Keine Ausgabe auf die Standardausgabe."
+
+#: grep-dctrl.c:207 grep-dctrl.c:277 grep-dctrl.c:343 predicate.c:39
+msgid "predicate is too complex"
+msgstr "Eigenschaft ist zu komplex"
+
+#: grep-dctrl.c:239
+msgid "A pattern is mandatory"
+msgstr "Ein Muster wird benötigt"
+
+#: grep-dctrl.c:298
+msgid "syntax error in command line"
+msgstr "Syntax-Fehler in der Befehlszeile"
+
+#: grep-dctrl.c:315
+msgid "missing ')' in command line"
+msgstr "Fehlende »)« in der Befehlszeile"
+
+#: grep-dctrl.c:333
+msgid "Unexpected atom in command line. Did you forget to use a connective?"
+msgstr ""
+"Unerwartetes Atom in der Befehlszeile. Haben Sie einen Verbinder vergessen?"
+
+#: grep-dctrl.c:410
+msgid "no such log level"
+msgstr "Keine solche Log-Ebene"
+
+#: grep-dctrl.c:449 grep-dctrl.c:458
+msgid "inconsistent atom modifiers"
+msgstr "Inkonsistener Atom-Modifikator"
+
+#: grep-dctrl.c:499
+msgid "unexpected ')' in command line"
+msgstr "Unerwartete »)« in der Befehlszeile"
+
+#: grep-dctrl.c:511
+msgid "too many file names"
+msgstr "Zu viele Dateinamen"
+
+#: grep-dctrl.c:599
+msgid "a predicate is required"
+msgstr "Eine Eigenschaft wird benötigt"
+
+#: grep-dctrl.c:604
+msgid "malformed predicate"
+msgstr "Missgebildete Eigenschaft"
+
+#: grep-dctrl.c:610
+msgid "too many output fields"
+msgstr "Zu viele Ausgabefelder"
+
+#: grep-dctrl.c:614
+msgid "Adding \"Description\" to selected output fields because of -d"
+msgstr "Füge »Description« wegen -d zu den gewählten Ausgabefeldern hinzu"
+
+#: grep-dctrl.c:623
+msgid "cannot suppress field names when showing whole paragraphs"
+msgstr ""
+"Kann keine Feldnamen unterdrücken, wenn komplette Abschnitte angezeigt werden"
+
+#: grep-dctrl.c:663
+#, c-format
+msgid "%s: %s: cannot stat: %s\n"
+msgstr "%s: %s: stat kann nicht durchgeführt werden: %s\n"
+
+#: grep-dctrl.c:672
+msgid "is a directory, skipping"
+msgstr "ist ein Verzeichnis, wird übersprungen"
+
+#: grep-dctrl.c:673
+msgid "is a block device, skipping"
+msgstr "ist ein Block-Gerät, wird übersprungen"
+
+#: grep-dctrl.c:674
+msgid "internal error"
+msgstr "interner Fehler"
+
+#: grep-dctrl.c:675
+msgid "is a socket, skipping"
+msgstr "ist ein Socket, wird übersprungen"
+
+#: grep-dctrl.c:676
+msgid "unknown file type, skipping"
+msgstr "unbekannter Dateityp, wird übersprungen"
+
+#: paragraph.c:73 paragraph.c:98
+msgid "unexpected end of file"
+msgstr "unerwartetes Dateiende"
+
+#: paragraph.c:91
+msgid "unexpected end of line"
+msgstr "unerwartetes Zeilenende"
+
+#: rc.c:75
+msgid "reading config file"
+msgstr "lese Konfigurationsdatei"
+
+#: rc.c:96
+msgid "read failure or out of memory"
+msgstr "Lesefehler oder zuwenig Speicher verfügbar"
+
+#: rc.c:116
+msgid "syntax error: need a executable name"
+msgstr "Syntax-Fehler: Benötige einen Programmnamen"
+
+#: rc.c:124
+msgid "syntax error: need an input file name"
+msgstr "Syntax-Fehler: Benötige einen Eingabe-Dateinamen"
+
+#: rc.c:129
+msgid "considering executable name"
+msgstr "Programmname wird in Betracht gezogen"
+
+#: rc.c:131
+msgid "yes, will use executable name"
+msgstr "Ja, Programmname wird verwendet"
+
+#: rc.c:133
+msgid "default input file"
+msgstr "Default-Eingabedatei"
+
+#~ msgid "Test for numerical equality."
+#~ msgstr "Test auf numerische Übereinstimmung."
+
+#~ msgid "Numerical test: <."
+#~ msgstr "Numerischer Test: <."
+
+#~ msgid "Numerical test: <=."
+#~ msgstr "Numerischer Test: <=."
+
+#~ msgid "Numerical test: >."
+#~ msgstr "Numerischer Test: >."
+
+#~ msgid "Numerical test: >=."
+#~ msgstr "Numerischer Test: >=."
+
+#~ msgid "%s: command (%s) failed (exit status %d)\n"
+#~ msgstr "%s: Befehl (%s) fehlgeschlagen (Rückgabewert %d)\n"
+
+#~ msgid "%s: command (%s) was killed by signal %d\n"
+#~ msgstr "%s: Befehl (%s) wurde von Signal %d abgebrochen\n"
+
+#~ msgid "%s (child): failed to exec /bin/sh: %s\n"
+#~ msgstr "%s (Kindprozess): Konnte /bin/sh nicht ausführen: %s\n"
+
+#~ msgid "not owned by you or root, ignoring"
+#~ msgstr "gehört nicht Ihnen oder root, wird ignoriert"
+
+#~ msgid "write permissions for group or others, ignoring"
+#~ msgstr "Schreibberechtigungen für die Gruppe oder andere, wird ignoriert"
diff --git a/po/fi.po b/po/fi.po
index 9410731..85ecebc 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: dctrl-tools\n"
"Report-Msgid-Bugs-To: ajk@debian.org\n"
-"POT-Creation-Date: 2004-01-13 00:47+0200\n"
-"PO-Revision-Date: 2004-01-13 00:50+0200\n"
+"POT-Creation-Date: 2004-02-07 10:27+0200\n"
+"PO-Revision-Date: 2004-02-07 10:13+0200\n"
"Last-Translator: Antti-Juhani Kaijanaho <ajk@debian.org>\n"
"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
"MIME-Version: 1.0\n"
@@ -36,12 +36,12 @@ msgid "FIELD,FIELD,..."
msgstr "KENTTÄ,KENTT�,..."
#: grep-dctrl.c:125
-msgid "Restrict pattern matching to the FIELDs given."
+msgid "Restrict pattern matching to the FIELDs given."
msgstr "Rajoita haku annettuihin KENTTIIN."
#: grep-dctrl.c:126
-msgid "Shorthand for -FPackage"
-msgstr "Lyhyt muoto vivulle -FPackage"
+msgid "This is a shorthand for -FPackage."
+msgstr "Lyhyt muoto vivulle -FPackage."
#: grep-dctrl.c:127
msgid "Show only the body of these fields from the matching paragraphs."
@@ -111,16 +111,16 @@ msgid "Debug option parsing."
msgstr "Testaa valitsimien jäsennyst�."
#: grep-dctrl.c:142 grep-dctrl.c:143
-msgid "No output to stdout"
-msgstr "Älä tulosta mitään vakiotulostevirtaan"
+msgid "Do no output to stdout."
+msgstr "Älä tulosta mitään vakiotulostevirtaan."
#: grep-dctrl.c:207 grep-dctrl.c:277 grep-dctrl.c:343 predicate.c:39
msgid "predicate is too complex"
msgstr "predikaatti on liian monimutkainen"
#: grep-dctrl.c:239
-msgid "A pattern is mandatory."
-msgstr "Hakuehto on välttämätön."
+msgid "A pattern is mandatory"
+msgstr "Hakuehto on välttämätön"
#: grep-dctrl.c:298
msgid "syntax error in command line"
@@ -154,41 +154,45 @@ msgstr "liikaa tiedostonimiä"
msgid "a predicate is required"
msgstr "predikaatti on välttämätön"
-#: grep-dctrl.c:605
+#: grep-dctrl.c:604
+msgid "malformed predicate"
+msgstr ""
+
+#: grep-dctrl.c:610
msgid "too many output fields"
msgstr "liikaa tulostettavia kenttiä"
-#: grep-dctrl.c:609
+#: grep-dctrl.c:614
msgid "Adding \"Description\" to selected output fields because of -d"
msgstr "Merkitsen \"Description\"-kentän tulostettavaksi -d-valitsimen takia"
-#: grep-dctrl.c:618
+#: grep-dctrl.c:623
msgid "cannot suppress field names when showing whole paragraphs"
msgstr ""
"en voi jättää näyttämättä kenttien nimiä, kun näytän kokonaisia tietueita"
-#: grep-dctrl.c:658
+#: grep-dctrl.c:663
#, c-format
msgid "%s: %s: cannot stat: %s\n"
msgstr "%s: %s: stat-kutsu epäonnistui: %s\n"
-#: grep-dctrl.c:667
+#: grep-dctrl.c:672
msgid "is a directory, skipping"
msgstr "on hakemisto, jätän huomiotta"
-#: grep-dctrl.c:668
+#: grep-dctrl.c:673
msgid "is a block device, skipping"
msgstr "on lohkolaite, jätän huomiotta"
-#: grep-dctrl.c:669
+#: grep-dctrl.c:674
msgid "internal error"
msgstr "ohjelman oma virhe"
-#: grep-dctrl.c:670
+#: grep-dctrl.c:675
msgid "is a socket, skipping"
msgstr "on pistoke, jätän huomiotta"
-#: grep-dctrl.c:671
+#: grep-dctrl.c:676
msgid "unknown file type, skipping"
msgstr "tuntematon tiedostotyyppi, jätän huomiotta"
diff --git a/predicate.c b/predicate.c
index 006ac42..6ac2d10 100644
--- a/predicate.c
+++ b/predicate.c
@@ -129,6 +129,27 @@ static bool verify_atom(struct atom * atom, para_t * para)
assert(0);
}
+bool check_predicate(struct predicate * p)
+{
+ size_t sp = 0;
+ /* Run the program. */
+ for (size_t i = 0; i < p->proglen; i++) {
+ switch (p->program[i]) {
+ case I_NOP: break;
+ case I_NEG:
+ if (sp == 0) return false;
+ break;
+ case I_AND: case I_OR:
+ if (sp < 2) return false;
+ --sp;
+ break;
+ default:
+ ++sp;
+ }
+ }
+ return true;
+}
+
bool does_para_satisfy(struct predicate * p, para_t * para)
{
assert(para->trie == & p->trie);
diff --git a/predicate.h b/predicate.h
index 24f154a..79dd447 100644
--- a/predicate.h
+++ b/predicate.h
@@ -85,4 +85,6 @@ void addinsn(struct predicate * p, int insn);
bool does_para_satisfy(struct predicate * p, para_t *);
+bool check_predicate(struct predicate * p);
+
#endif /* PREDICATE_H */