poe

Уређивач .po фајлова
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување b4dd32975d80b47d0605bc6ef1fef90c44c0c86b
родитељ be4633e3e20bb1ef42448ff9d2356782d45c3276
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Sat,  3 Jul 2021 21:15:45 +0200

Reading #, and #: comments

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
MTODO | 15+++++++++------
Mdraw.c | 14+++++++-------
Mpo.c | 143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
Mpo.h | 13+++++++++----
Mtest/sr.po | 228+++++++++++++++++++++++++++++--------------------------------------------------
Mutil.c | 4++--
измењених датотека: 6, додавања: 236(+), брисања: 181(-)

diff --git a/TODO b/TODO @@ -4,9 +4,9 @@ [x] Line editing with cursor [ ] Previous/next word? - [~] .po file load - [ ] Reading #, comments - [ ] Reading #: comments + [x] .po file load + [x] Reading #, comments + [x] Reading #: comments [ ] .po file save [ ] Edit first msgid's msgstr @@ -16,10 +16,13 @@ [ ] Multiline msgid display [ ] Also msgid_plural [ ] Also Plural-Forms - [ ] Edit dialog overhaul? Don't display as dialog, but - full-screen so more information can be shown + [ ] (Multiline) comment display; ~key binding: "?"~ + [ ] Toggle msgid/msgstr focus with F6; when msgid is focused, + arrow keys scroll the msgid area + [/] ~Edit dialog overhaul? Don't display as dialog, but + full-screen so more information can be shown~ - [ ] (Multiline) comment display; key binding: "?" + [ ] Sort by flag/column? [ ] Text selection? diff --git a/draw.c b/draw.c @@ -14,15 +14,15 @@ static const char* help_title = "poe - .po File Editor"; static const char* help[] = { "Esc - Close dialog, clear error", "Enter - Edit entry", - "H or F1 - Show this screen", - "g or Home - Go to first entry", + "H or F1 - Show this screen", + "g or Home - Go to first entry", "C-B or PgUp - Go to previous page", - "k or \u2191 - Go to previous entry", - "j or \u2193 - Go to next entry", + "k or \u2191 - Go to previous entry", + "j or \u2193 - Go to next entry", "C-F or PgDn - Go to next page", - "G or End - Go to last entry", - "f or C-Z - Toggle fuzzy flag", - "q or C-Q - Quit" + "G or End - Go to last entry", + "f or C-Z - Toggle fuzzy flag", + "q or C-Q - Quit" }; static const char* editbox_title = "Edit translation"; const char* errors[] = { diff --git a/po.c b/po.c @@ -4,6 +4,8 @@ #include "po.h" #include "util.h" +extern const char* flag_strings[]; + char* format_flags(char* buffer, const size_t max, const struct PoEntry* entry) { @@ -17,14 +19,16 @@ format_flags(char* buffer, const size_t max, const struct PoEntry* entry) void init_po_entry(struct PoEntry* entry) { - entry->flags = FL_NONE; - entry->msgid = NULL; - entry->msgid_plural = NULL; - entry->nplural = 0; - entry->msgstr = NULL; - entry->msgstr_count = 0; - entry->comments = NULL; - entry->comment_lines = 0; + entry->flags = FL_NONE; + entry->msgid = NULL; + entry->msgid_plural = NULL; + entry->nplural = 0; + entry->msgstr = NULL; + entry->msgstr_count = 0; + entry->comments = NULL; + entry->comment_lines = 0; + entry->ref_comments = NULL; + entry->ref_comment_lines = 0; } void @@ -49,6 +53,14 @@ free_po_entry(struct PoEntry* entry) free(*comment++); free(entry->comments); } + + if (entry->ref_comments) + { + char** comment = entry->ref_comments; + while (comment < entry->ref_comments + entry->ref_comment_lines) + free(*comment++); + free(entry->ref_comments); + } } struct PoEntry* @@ -143,12 +155,10 @@ u32_add_comment(struct PoEntry* entry, const uint32_t* comment) entry->comment_lines++; if (!entry->comments) - comments = calloc(entry->comment_lines, - sizeof(uint32_t*)); + comments = calloc(entry->comment_lines, sizeof(uint32_t*)); else comments = realloc(entry->comments, - entry->comment_lines * - sizeof(uint32_t*)); + entry->comment_lines * sizeof(uint32_t*)); if (!comments) return NULL; entry->comments = comments; @@ -157,7 +167,35 @@ u32_add_comment(struct PoEntry* entry, const uint32_t* comment) if (!new_line) return NULL; entry->comments[entry->comment_lines-1] = new_line; - u32_strncpy(new_line, comment, MAXBUFLINE); + u32_strncpy(new_line, comment, MAXCOMMENTLINE); + return entry; +} + +struct PoEntry* +add_ref_comment(struct PoEntry* entry, const char* comment) +{ + char** ref_comments = NULL; + char* new_line = NULL; + + if (!entry) + return NULL; + + entry->ref_comment_lines++; + + if (!entry->ref_comments) + ref_comments = calloc(entry->ref_comment_lines, sizeof(char*)); + else + ref_comments = realloc(entry->ref_comments, + entry->ref_comment_lines * sizeof(char*)); + if (!ref_comments) + return NULL; + entry->ref_comments = ref_comments; + + new_line = calloc(MAXCOMMENTLINE, 1); + if (!new_line) + return NULL; + entry->ref_comments[entry->ref_comment_lines-1] = new_line; + strncpy(new_line, comment, MAXCOMMENTLINE); return entry; } @@ -329,6 +367,13 @@ parse_po_line(const char* line, struct PoEntry** entries, size_t* entries_size, *state |= PS_COMMENT_DESC; pline++; (*col)++; + if (*pline == ' ') + { + pline++; + (*col)++; + } + else if (*pline) + return PARSE_ERR_SYNTAX; } else { @@ -336,6 +381,42 @@ parse_po_line(const char* line, struct PoEntry** entries, size_t* entries_size, (*col)++; } break; + case ',': + if (*col == 2 && *state & PS_COMMENT) + { + *state &= ~PS_COMMENT; + *state |= PS_COMMENT_FLAG; + pline++; + (*col)++; + if (*pline == ' ') + { + pline++; + (*col)++; + } + else if (*pline) + return PARSE_ERR_SYNTAX; + } + else + { + *ptoken++ = *pline++; + (*col)++; + } + break; + case ':': + if (*col == 2 && *state & PS_COMMENT) + { + *state &= ~PS_COMMENT; + *state |= PS_COMMENT_REF; + pline++; + (*col)++; + if (*pline == ' ') + { + pline++; + (*col)++; + } + else if (*pline) + return PARSE_ERR_SYNTAX; + } case '"': /* skip beginning and end quote */ if (ptoken == token || *(pline+1) == 0) @@ -389,12 +470,40 @@ parse_po_line(const char* line, struct PoEntry** entries, size_t* entries_size, u8_string_to_unicode(u32_token, token); u32_add_comment(*current_entry, u32_token); } + else if (*state & PS_COMMENT_FLAG) + { + ptoken = token; + while (*ptoken) + { + if (starts_with(ptoken, flag_strings[ + FL_C_FORMAT])) + { + (*current_entry)->flags |= FL_C_FORMAT; + ptoken += strlen(flag_strings[ + FL_C_FORMAT]); + } + else if (starts_with(ptoken, flag_strings[ + FL_FUZZY])) + { + (*current_entry)->flags |= FL_FUZZY; + ptoken += strlen(flag_strings[ + FL_FUZZY]); + } + else if (starts_with(ptoken, ", ")) + ptoken += 2; + else + return PARSE_ERR_SYNTAX; + } + + } + else if (*state & PS_COMMENT_REF) + add_ref_comment(*current_entry, token); *token = 0; } - if (*state & PS_COMMENT) - *state &= ~PS_COMMENT; - if (*state & PS_COMMENT_DESC) - *state &= ~PS_COMMENT_DESC; + + /* one-line states */ + *state &= ~(PS_COMMENT | PS_COMMENT_DESC | PS_COMMENT_FLAG | + PS_COMMENT_REF); return PARSE_ERR_NONE; } diff --git a/po.h b/po.h @@ -36,10 +36,12 @@ typedef enum { PS_NONE = 0, PS_COMMENT = 1, PS_COMMENT_DESC = 1 << 1, - PS_MSGID = 1 << 2, - PS_MSGID_PLURAL = 1 << 3, - PS_MSGSTR = 1 << 4, - PS_MSGSTR_ARRAY = 1 << 5 + PS_COMMENT_FLAG = 1 << 2, + PS_COMMENT_REF = 1 << 3, + PS_MSGID = 1 << 4, + PS_MSGID_PLURAL = 1 << 5, + PS_MSGSTR = 1 << 6, + PS_MSGSTR_ARRAY = 1 << 7 } ParseState; typedef enum { @@ -57,6 +59,8 @@ struct PoEntry { int msgstr_count; uint32_t** comments; size_t comment_lines; + char** ref_comments; + size_t ref_comment_lines; }; char* format_flags(char* buffer, const size_t max, const struct PoEntry* entry); @@ -72,6 +76,7 @@ struct PoEntry* u32_set_msgid(struct PoEntry* entry, const uint32_t* msgid, struct PoEntry* u32_set_msgstr(struct PoEntry* entry, const uint32_t* msgstr, int msgstr_index, int append); struct PoEntry* u32_add_comment(struct PoEntry* entry, const uint32_t* comment); +struct PoEntry* add_ref_comment(struct PoEntry* entry, const char* comment); int load_file(struct PoEntry** entries, size_t* entries_size, size_t* entries_count, const char* filename, long* lineno, long* col); diff --git a/test/sr.po b/test/sr.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: neomutt 20210205\n" "Report-Msgid-Bugs-To: neomutt-devel@neomutt.org\n" "POT-Creation-Date: 2021-06-19 23:57+0100\n" -"PO-Revision-Date: 2021-05-09 12:32+0200\n" +"PO-Revision-Date: 2021-06-21 08:12+0200\n" "Last-Translator: Страхиња Радић <contact@strahinja.org>\n" "Language-Team: Serbian <sr@li.org>\n" "Language: sr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 3.0\n" #. L10N: prompt to add a new alias #: alias/alias.c:397 @@ -37,8 +37,7 @@ msgstr "Упозорење: Овај назив алијаса можда нећ msgid "Address: " msgstr "Адреса: " -#: alias/alias.c:451 commands.c:478 compose/compose.c:491 conn/raw.c:151 -#: conn/raw.c:208 recvcmd.c:228 send/send.c:207 +#: alias/alias.c:451 commands.c:478 compose/compose.c:491 conn/raw.c:151 conn/raw.c:208 recvcmd.c:228 send/send.c:207 #, c-format msgid "Bad IDN: '%s'" msgstr "Лош IDN: „%s“" @@ -55,8 +54,7 @@ msgstr "Коментар: " msgid "Accept?" msgstr "Прихватити?" -#: alias/alias.c:500 recvattach.c:624 recvattach.c:647 recvattach.c:662 -#: recvattach.c:678 recvattach.c:782 +#: alias/alias.c:500 recvattach.c:624 recvattach.c:647 recvattach.c:662 recvattach.c:678 recvattach.c:782 msgid "Save to file: " msgstr "Чување у датотеку: " @@ -90,21 +88,17 @@ msgstr "Упозорење: Лоша адреса „%s“ у алијасу „ msgid "Warning: Bad IDN '%s' in alias '%s'" msgstr "Упозорење: Лош IDN ‘%s’ у алијасу ‘%s’" -#: alias/dlgalias.c:55 alias/dlgquery.c:61 autocrypt/dlgautocrypt.c:60 -#: browser.c:72 browser.c:85 conn/dlgverifycert.c:43 history/dlghistory.c:44 -#: ncrypt/dlggpgme.c:64 ncrypt/dlgpgp.c:59 ncrypt/dlgsmime.c:46 -#: pager/dlg_pager.c:178 pager/dlg_pager.c:189 pager/dlg_pager.c:199 +#: alias/dlgalias.c:55 alias/dlgquery.c:61 autocrypt/dlgautocrypt.c:60 browser.c:72 browser.c:85 conn/dlgverifycert.c:43 history/dlghistory.c:44 +#: ncrypt/dlggpgme.c:64 ncrypt/dlgpgp.c:59 ncrypt/dlgsmime.c:46 pager/dlg_pager.c:178 pager/dlg_pager.c:189 pager/dlg_pager.c:199 #: pager/dlg_pager.c:215 pattern/dlgpattern.c:60 postpone.c:66 recvattach.c:72 msgid "Exit" msgstr "Излаз" -#: alias/dlgalias.c:56 index/dlg_index.c:112 index/dlg_index.c:128 -#: pager/dlg_pager.c:203 pager/dlg_pager.c:220 postpone.c:67 +#: alias/dlgalias.c:56 index/dlg_index.c:112 index/dlg_index.c:128 pager/dlg_pager.c:203 pager/dlg_pager.c:220 postpone.c:67 msgid "Del" msgstr "Бриши" -#: alias/dlgalias.c:57 index/dlg_index.c:113 index/dlg_index.c:129 -#: postpone.c:68 +#: alias/dlgalias.c:57 index/dlg_index.c:113 index/dlg_index.c:129 postpone.c:68 msgid "Undel" msgstr "Од-обриши" @@ -116,17 +110,13 @@ msgstr "Сорт" msgid "Rev-Sort" msgstr "Обр-сорт" -#: alias/dlgalias.c:60 history/dlghistory.c:45 ncrypt/dlggpgme.c:65 -#: ncrypt/dlgpgp.c:60 ncrypt/dlgsmime.c:47 pattern/dlgpattern.c:61 +#: alias/dlgalias.c:60 history/dlghistory.c:45 ncrypt/dlggpgme.c:65 ncrypt/dlgpgp.c:60 ncrypt/dlgsmime.c:47 pattern/dlgpattern.c:61 msgid "Select" msgstr "Избор" -#: alias/dlgalias.c:61 alias/dlgquery.c:68 autocrypt/dlgautocrypt.c:79 -#: browser.c:76 browser.c:91 compose/compose.c:154 compose/compose.c:169 -#: conn/dlgverifycert.c:44 history/dlghistory.c:47 index/dlg_index.c:118 -#: index/dlg_index.c:134 ncrypt/dlggpgme.c:67 ncrypt/dlgpgp.c:62 -#: ncrypt/dlgsmime.c:48 pager/dlg_pager.c:181 pager/dlg_pager.c:206 -#: pager/dlg_pager.c:222 pattern/dlgpattern.c:62 postpone.c:69 recvattach.c:76 +#: alias/dlgalias.c:61 alias/dlgquery.c:68 autocrypt/dlgautocrypt.c:79 browser.c:76 browser.c:91 compose/compose.c:154 compose/compose.c:169 +#: conn/dlgverifycert.c:44 history/dlghistory.c:47 index/dlg_index.c:118 index/dlg_index.c:134 ncrypt/dlggpgme.c:67 ncrypt/dlgpgp.c:62 +#: ncrypt/dlgsmime.c:48 pager/dlg_pager.c:181 pager/dlg_pager.c:206 pager/dlg_pager.c:222 pattern/dlgpattern.c:62 postpone.c:69 recvattach.c:76 msgid "Help" msgstr "Помоћ" @@ -177,8 +167,7 @@ msgstr "Search" msgid "Waiting for response..." msgstr "Чекање на одговор..." -#: alias/dlgquery.c:354 alias/dlgquery.c:396 alias/dlgquery.c:413 -#: alias/dlgquery.c:701 +#: alias/dlgquery.c:354 alias/dlgquery.c:396 alias/dlgquery.c:413 alias/dlgquery.c:701 msgid "Query: " msgstr "Упит: " @@ -226,8 +215,7 @@ msgstr "%s не постоји. Да га креирам?" #. L10N: mkdir() on the directory %s failed. The second %s is the #. error message returned by libc -#: autocrypt/autocrypt.c:82 bcache/bcache.c:228 hcache/hcache.c:233 main.c:821 -#: nntp/newsrc.c:1104 +#: autocrypt/autocrypt.c:82 bcache/bcache.c:228 hcache/hcache.c:233 main.c:821 nntp/newsrc.c:1104 #, c-format msgid "Can't create %s: %s" msgstr "Не могу да креирам %s: %s" @@ -283,8 +271,7 @@ msgstr "Неуспешно креирање налога за аутошифро #. L10N: Error displayed if the user tries to force sending an Autocrypt #. email when the engine is not available. -#: autocrypt/autocrypt.c:594 autocrypt/autocrypt.c:603 -#: autocrypt/autocrypt.c:610 +#: autocrypt/autocrypt.c:594 autocrypt/autocrypt.c:603 autocrypt/autocrypt.c:610 msgid "Autocrypt is not available" msgstr "Аутошифровање није доступно" @@ -662,22 +649,19 @@ msgstr "source: читање прекинуто због превише греш #, c-format msgid "source: %d warning in %s" msgid_plural "source: %d warnings in %s" -msgstr[0] "source: %d грешка у %s" -msgstr[1] "source: %d грешке у %s" -msgstr[2] "source: %d грешака у %s" - -#: command_parse.c:298 command_parse.c:320 command_parse.c:465 -#: command_parse.c:1053 command_parse.c:1137 gui/color.c:736 gui/color.c:899 -#: gui/color.c:1106 gui/color.c:1135 gui/color.c:1159 gui/color.c:1226 -#: gui/color.c:1249 hook.c:112 hook.c:121 hook.c:135 hook.c:390 hook.c:406 +msgstr[0] "source: %d упозорење у %s" +msgstr[1] "source: %d упозорења у %s" +msgstr[2] "source: %d упозорења у %s" + +#: command_parse.c:298 command_parse.c:320 command_parse.c:465 command_parse.c:1053 command_parse.c:1137 gui/color.c:736 gui/color.c:899 +#: gui/color.c:1106 gui/color.c:1135 gui/color.c:1159 gui/color.c:1226 gui/color.c:1249 hook.c:112 hook.c:121 hook.c:135 hook.c:390 hook.c:406 #: keymap.c:1277 score.c:96 subjectrx.c:73 subjectrx.c:101 subjectrx.c:109 #, c-format msgid "%s: too few arguments" msgstr "%s: премало аргумената" -#: command_parse.c:344 command_parse.c:1327 command_parse.c:1657 -#: gui/color.c:1258 gui/color.c:1364 hook.c:142 hook.c:413 keymap.c:1209 -#: keymap.c:1382 keymap.c:1543 keymap.c:1624 mutt_lua.c:498 score.c:104 +#: command_parse.c:344 command_parse.c:1327 command_parse.c:1657 gui/color.c:1258 gui/color.c:1364 hook.c:142 hook.c:413 keymap.c:1209 keymap.c:1382 +#: keymap.c:1543 keymap.c:1624 mutt_lua.c:498 score.c:104 #, c-format msgid "%s: too many arguments" msgstr "%s: превише аргумената" @@ -730,9 +714,8 @@ msgid "Can't set a variable with the '%s' command" msgstr "Не може се поставити променљива наредбом „%s“" #: command_parse.c:795 -#, fuzzy msgid "Can't decrement a my_ variable" -msgstr "Не може се користити префикс при постављању променљиве" +msgstr "Не може се умањити my_ променљива" #: command_parse.c:809 msgid "Can't use prefix when setting a variable" @@ -834,10 +817,8 @@ msgstr "PGP потпис успешно верификован" msgid "PGP signature could NOT be verified" msgstr "PGP потпис није било могуће верификовати" -#: commands.c:404 compmbox/compress.c:338 compose/compose.c:1877 -#: gui/curs_lib.c:389 index/dlg_index.c:1266 index/dlg_index.c:1319 -#: mutt_attach.c:162 mutt_attach.c:296 pager/dlg_pager.c:2662 -#: pager/do_pager.c:136 send/sendlib.c:1062 +#: commands.c:404 compmbox/compress.c:338 compose/compose.c:1877 gui/curs_lib.c:389 index/dlg_index.c:1266 index/dlg_index.c:1319 mutt_attach.c:162 +#: mutt_attach.c:296 pager/dlg_pager.c:2662 pager/do_pager.c:136 send/sendlib.c:1062 #, c-format msgid "Error running \"%s\"" msgstr "Грешка приликом покретања „%s“" @@ -1050,8 +1031,7 @@ msgstr "Скуп знакова промењен у %s; конвертоваће msgid "Can't append without an append-hook or close-hook : %s" msgstr "Не може се дописати на крај без append-hook или close-hook: %s" -#: compmbox/compress.c:454 compmbox/compress.c:518 compmbox/compress.c:594 -#: compmbox/compress.c:632 mbox/mbox.c:1188 +#: compmbox/compress.c:454 compmbox/compress.c:518 compmbox/compress.c:594 compmbox/compress.c:632 mbox/mbox.c:1188 msgid "Unable to lock mailbox" msgstr "Не може се закључати сандуче" @@ -1062,7 +1042,7 @@ msgstr "Декомпресија %s" #: compmbox/compress.c:467 msgid "Can't identify the contents of the compressed file" -msgstr "Не може се идентификовати садежај компресоване датотеке" +msgstr "Не може се идентификовати садржај компресоване датотеке" #: compmbox/compress.c:474 compmbox/compress.c:548 #, c-format @@ -1147,8 +1127,7 @@ msgstr "Безбедност: " #. other compose menu fields. However, if possible, it should not be longer #. than the other compose menu fields. Since it shares the row with "Encrypt #. with:", it should not be longer than 15-20 character cells. -#: compose/compose.c:125 ncrypt/crypt_gpgme.c:4277 ncrypt/pgp.c:1995 -#: ncrypt/smime.c:2220 +#: compose/compose.c:125 ncrypt/crypt_gpgme.c:4277 ncrypt/pgp.c:1995 ncrypt/smime.c:2220 msgid "Sign as: " msgstr "Потписати као: " @@ -1358,8 +1337,7 @@ msgid "Rename to: " msgstr "Преименовати у: " #. L10N: "stat" is a system call. Do "man 2 stat" for more information. -#: compose/compose.c:1683 editmsg.c:99 editmsg.c:133 editmsg.c:152 -#: notmuch/db.c:96 send/sendlib.c:485 +#: compose/compose.c:1683 editmsg.c:99 editmsg.c:133 editmsg.c:152 notmuch/db.c:96 send/sendlib.c:485 #, c-format msgid "Can't stat %s: %s" msgstr "Не може се stat-овати %s: %s" @@ -1527,8 +1505,7 @@ msgstr "Неисправна boolean вредност: %ld" msgid "'charset' must contain exactly one character set name" msgstr "„charset“ мора садржати тачно један назив скупа знакова" -#: config/charset.c:66 hcache/config.c:53 hcache/config.c:72 hcache/config.c:94 -#: mutt_config.c:126 +#: config/charset.c:66 hcache/config.c:53 hcache/config.c:72 hcache/config.c:94 mutt_config.c:126 #, c-format msgid "Invalid value for option %s: %s" msgstr "Неисправна вредност опције %s: %s" @@ -1543,8 +1520,7 @@ msgstr "Неисправна enum вредност: %s" msgid "Invalid enum value: %ld" msgstr "Неисправна enum вредност: %ld" -#: config/long.c:47 config/number.c:48 config/path.c:93 config/path.c:166 -#: config/sort.c:54 config/string.c:65 config/string.c:139 +#: config/long.c:47 config/number.c:48 config/path.c:93 config/path.c:166 config/sort.c:54 config/string.c:65 config/string.c:139 #, c-format msgid "Option %s may not be empty" msgstr "Опција %s не може бити празна" @@ -1554,8 +1530,7 @@ msgstr "Опција %s не може бити празна" msgid "Invalid long: %s" msgstr "Неисправан long: %s" -#: config/long.c:60 config/long.c:112 config/long.c:157 config/long.c:193 -#: config/number.c:67 config/number.c:126 config/number.c:177 +#: config/long.c:60 config/long.c:112 config/long.c:157 config/long.c:193 config/number.c:67 config/number.c:126 config/number.c:177 #: config/number.c:216 #, c-format msgid "Option %s may not be negative" @@ -1596,8 +1571,7 @@ msgstr "Непостојећа променљива: %s" msgid "Variable '%s' has an invalid type %d" msgstr "Променљива „%s“ има неисправан тип %d" -#: config/set.c:401 config/set.c:467 config/set.c:528 config/set.c:604 -#: config/set.c:670 config/set.c:746 config/set.c:926 config/set.c:1009 +#: config/set.c:401 config/set.c:467 config/set.c:528 config/set.c:604 config/set.c:670 config/set.c:746 config/set.c:926 config/set.c:1009 #, c-format msgid "Unknown variable '%s'" msgstr "Непозната променљива „%s“" @@ -2008,9 +1982,8 @@ msgstr "Не може се дописати у фолдер: %s" msgid "multipart message has no boundary parameter" msgstr "порука са више делова нема параметар границе" -#: flags.c:383 index/dlg_index.c:2722 index/dlg_index.c:2767 -#: index/dlg_index.c:3343 index/dlg_index.c:3384 mutt_thread.c:1143 -#: mutt_thread.c:1210 mutt_thread.c:1296 +#: flags.c:383 index/dlg_index.c:2722 index/dlg_index.c:2767 index/dlg_index.c:3343 index/dlg_index.c:3384 mutt_thread.c:1143 mutt_thread.c:1210 +#: mutt_thread.c:1296 msgid "Threading is not enabled" msgstr "Нити нису омогућене" @@ -2120,8 +2093,7 @@ msgstr "[-- Аутопреглед преко %s --]\n" msgid "Invoking autoview command: %s" msgstr "Покретање наредбе за аутопреглед: %s" -#: handler.c:585 mutt_attach.c:546 mutt_attach.c:748 mutt_attach.c:1162 -#: mutt_attach.c:1230 ncrypt/dlgpgp.c:617 ncrypt/pgpkey.c:278 +#: handler.c:585 mutt_attach.c:546 mutt_attach.c:748 mutt_attach.c:1162 mutt_attach.c:1230 ncrypt/dlgpgp.c:617 ncrypt/pgpkey.c:278 msgid "Can't create filter" msgstr "Не може се креирати филтер" @@ -2362,19 +2334,13 @@ msgstr "Историја „%s“" msgid "Bad history file format (line %d)" msgstr "Лош формат датотеке историје (ред %d)" -#: history/history.c:261 ncrypt/crypt_gpgme.c:818 ncrypt/crypt_gpgme.c:2249 -#: ncrypt/crypt_gpgme.c:2269 ncrypt/crypt_gpgme.c:2328 -#: ncrypt/crypt_gpgme.c:2345 ncrypt/crypt_gpgme.c:2377 -#: ncrypt/crypt_gpgme.c:2395 ncrypt/crypt_gpgme.c:2480 -#: ncrypt/crypt_gpgme.c:3071 ncrypt/crypt_gpgme.c:3171 ncrypt/dlggpgme.c:847 -#: ncrypt/dlgpgp.c:600 ncrypt/pgp.c:578 ncrypt/pgp.c:585 ncrypt/pgp.c:901 -#: ncrypt/pgp.c:1019 ncrypt/pgp.c:1168 ncrypt/pgp.c:1188 ncrypt/pgp.c:1222 -#: ncrypt/pgp.c:1581 ncrypt/pgpkey.c:260 ncrypt/pgpmicalg.c:191 -#: ncrypt/smime.c:883 ncrypt/smime.c:891 ncrypt/smime.c:984 ncrypt/smime.c:1096 -#: ncrypt/smime.c:1164 ncrypt/smime.c:1172 ncrypt/smime.c:1380 -#: ncrypt/smime.c:1791 ncrypt/smime.c:1869 ncrypt/smime.c:1876 -#: ncrypt/smime.c:1980 ncrypt/smime.c:2104 ncrypt/smime.c:2120 nntp/nntp.c:1296 -#: nntp/nntp.c:2151 pattern/exec.c:150 pop/pop.c:121 +#: history/history.c:261 ncrypt/crypt_gpgme.c:818 ncrypt/crypt_gpgme.c:2249 ncrypt/crypt_gpgme.c:2269 ncrypt/crypt_gpgme.c:2328 +#: ncrypt/crypt_gpgme.c:2345 ncrypt/crypt_gpgme.c:2377 ncrypt/crypt_gpgme.c:2395 ncrypt/crypt_gpgme.c:2480 ncrypt/crypt_gpgme.c:3071 +#: ncrypt/crypt_gpgme.c:3171 ncrypt/dlggpgme.c:847 ncrypt/dlgpgp.c:600 ncrypt/pgp.c:578 ncrypt/pgp.c:585 ncrypt/pgp.c:901 ncrypt/pgp.c:1019 +#: ncrypt/pgp.c:1168 ncrypt/pgp.c:1188 ncrypt/pgp.c:1222 ncrypt/pgp.c:1581 ncrypt/pgpkey.c:260 ncrypt/pgpmicalg.c:191 ncrypt/smime.c:883 +#: ncrypt/smime.c:891 ncrypt/smime.c:984 ncrypt/smime.c:1096 ncrypt/smime.c:1164 ncrypt/smime.c:1172 ncrypt/smime.c:1380 ncrypt/smime.c:1791 +#: ncrypt/smime.c:1869 ncrypt/smime.c:1876 ncrypt/smime.c:1980 ncrypt/smime.c:2104 ncrypt/smime.c:2120 nntp/nntp.c:1296 nntp/nntp.c:2151 +#: pattern/exec.c:150 pop/pop.c:121 msgid "Can't create temporary file" msgstr "Не може се креирати привремена датотека" @@ -2423,8 +2389,7 @@ msgid "%s: no macros for this menu" msgstr "%s: нема макроа за овај мени" #. L10N: '%s' is the file name of the temporary file -#: icommands.c:285 icommands.c:306 icommands.c:332 icommands.c:370 -#: icommands.c:389 imap/message.c:1115 +#: icommands.c:285 icommands.c:306 icommands.c:332 icommands.c:370 icommands.c:389 imap/message.c:1115 #, c-format msgid "Could not create temporary file %s" msgstr "Не може се креирати привремена датотека %s" @@ -2434,16 +2399,14 @@ msgid "No authenticators available or wrong credentials" msgstr "Нема доступних аутентификатора или су овлашћења погрешна" #. L10N: (%s) is the method name, e.g. Anonymous, CRAM-MD5, GSSAPI, SASL -#: imap/auth_anon.c:56 imap/auth_cram.c:106 imap/auth_gss.c:168 -#: imap/auth_oauth.c:66 imap/auth_sasl.c:125 nntp/nntp.c:503 nntp/nntp.c:569 +#: imap/auth_anon.c:56 imap/auth_cram.c:106 imap/auth_gss.c:168 imap/auth_oauth.c:66 imap/auth_sasl.c:125 nntp/nntp.c:503 nntp/nntp.c:569 #: pop/auth.c:98 pop/auth.c:243 pop/auth.c:339 send/smtp.c:470 send/smtp.c:556 #, c-format msgid "Authenticating (%s)..." msgstr "Аутентификовање (%s)..." #. L10N: %s is the method name, e.g. Anonymous, CRAM-MD5, GSSAPI, SASL -#: imap/auth_anon.c:89 imap/auth_cram.c:180 imap/auth_gss.c:347 -#: imap/auth_oauth.c:99 imap/auth_sasl.c:257 nntp/nntp.c:664 pop/auth.c:196 +#: imap/auth_anon.c:89 imap/auth_cram.c:180 imap/auth_gss.c:347 imap/auth_oauth.c:99 imap/auth_sasl.c:257 nntp/nntp.c:664 pop/auth.c:196 #: pop/auth.c:264 send/smtp.c:621 send/smtp.c:695 send/smtp.c:784 #, c-format msgid "%s authentication failed" @@ -2675,8 +2638,7 @@ msgstr "Добављање поруке..." msgid "The message index is incorrect. Try reopening the mailbox." msgstr "Индекс порука није исправан. Покушајте да поново отворите сандуче." -#: imap/msn.c:47 mutt/memory.c:58 mutt/memory.c:98 mutt/memory.c:134 -#: mutt/string.c:1112 mx.c:1218 +#: imap/msn.c:47 mutt/memory.c:58 mutt/memory.c:98 mutt/memory.c:134 mutt/string.c:1112 mx.c:1218 msgid "Out of memory" msgstr "Нема меморије" @@ -3001,13 +2963,11 @@ msgstr "Нема непрочитаних порука у овом ограни msgid "No unread messages" msgstr "Нема непрочитаних порука" -#: index/dlg_index.c:3086 menu/menu.c:190 pager/dlg_pager.c:2894 -#: pattern/pattern.c:580 pattern/pattern.c:736 +#: index/dlg_index.c:3086 menu/menu.c:190 pager/dlg_pager.c:2894 pattern/pattern.c:580 pattern/pattern.c:736 msgid "Search wrapped to top" msgstr "Претрага се вратила на почетак" -#: index/dlg_index.c:3091 pager/dlg_pager.c:2921 pattern/pattern.c:591 -#: pattern/pattern.c:747 +#: index/dlg_index.c:3091 pager/dlg_pager.c:2921 pattern/pattern.c:591 pattern/pattern.c:747 msgid "Search wrapped to bottom" msgstr "Претрага се вратила на дно" @@ -3099,8 +3059,7 @@ msgstr "Нема Message-ID-а за макро" msgid "Reply by mail as poster prefers?" msgstr "Одговорити мејлом, као што постављач преферира?" -#: index/dlg_index.c:3967 pager/dlg_pager.c:3595 pager/dlg_pager.c:3620 -#: pager/dlg_pager.c:3668 +#: index/dlg_index.c:3967 pager/dlg_pager.c:3595 pager/dlg_pager.c:3620 pager/dlg_pager.c:3668 msgid "Posting to this group not allowed, may be moderated. Continue?" msgstr "Постављање у ову групу није дозвољено, можда је модерисана. Наставити?" @@ -3233,15 +3192,13 @@ msgstr "maildir_commit_message(): не може се поставити врем msgid "Scanning %s..." msgstr "Скенирање %s..." -#: maildir/maildir.c:702 maildir/mh.c:719 mbox/mbox.c:213 mbox/mbox.c:381 -#: mx.c:372 +#: maildir/maildir.c:702 maildir/mh.c:719 mbox/mbox.c:213 mbox/mbox.c:381 mx.c:372 #, c-format msgid "Reading %s..." msgstr "Читање %s..." #. L10N: Displayed before/as a mailbox is being synced -#: maildir/maildir.c:1389 maildir/mh.c:1045 mbox/mbox.c:1257 mx.c:479 -#: notmuch/notmuch.c:2215 +#: maildir/maildir.c:1389 maildir/mh.c:1045 mbox/mbox.c:1257 mx.c:479 notmuch/notmuch.c:2215 #, c-format msgid "Writing %s..." msgstr "Писање %s..." @@ -3573,9 +3530,8 @@ msgstr "Не може се поново отворити сандуче" msgid "Can't write message" msgstr "Не може се исписати порука" -#: menu/menu.c:66 menu/menu.c:481 menu/move.c:51 menu/move.c:105 -#: menu/move.c:177 menu/move.c:195 menu/move.c:213 menu/move.c:229 -#: menu/move.c:262 menu/move.c:277 menu/move.c:310 +#: menu/menu.c:66 menu/menu.c:481 menu/move.c:51 menu/move.c:105 menu/move.c:177 menu/move.c:195 menu/move.c:213 menu/move.c:229 menu/move.c:262 +#: menu/move.c:277 menu/move.c:310 msgid "No entries" msgstr "Нема уноса" @@ -3587,18 +3543,15 @@ msgstr "Скочи на: " msgid "Invalid index number" msgstr "Неисправан број индекса" -#: menu/menu.c:154 pager/dlg_pager.c:2945 pattern/pattern.c:506 -#: pattern/pattern.c:664 +#: menu/menu.c:154 pager/dlg_pager.c:2945 pattern/pattern.c:506 pattern/pattern.c:664 msgid "Search for: " msgstr "Тражи: " -#: menu/menu.c:155 pager/dlg_pager.c:2946 pattern/pattern.c:506 -#: pattern/pattern.c:664 +#: menu/menu.c:155 pager/dlg_pager.c:2946 pattern/pattern.c:506 pattern/pattern.c:664 msgid "Reverse search for: " msgstr "Тражи уназад: " -#: menu/menu.c:209 pager/dlg_pager.c:2891 pager/dlg_pager.c:2918 -#: pager/dlg_pager.c:3055 pattern/pattern.c:638 pattern/pattern.c:794 +#: menu/menu.c:209 pager/dlg_pager.c:2891 pager/dlg_pager.c:2918 pager/dlg_pager.c:3055 pattern/pattern.c:638 pattern/pattern.c:794 msgid "Not found" msgstr "Није пронађено" @@ -3995,8 +3948,7 @@ msgstr "Убачени PGP се не може користити са format=flo msgid "Mail not sent: inline PGP can't be used with format=flowed" msgstr "Порука није послата: убачени PGP се не може користити са format=flowed" -#: ncrypt/crypt.c:220 ncrypt/cryptglue.c:161 ncrypt/dlgpgp.c:606 -#: ncrypt/pgpkey.c:273 +#: ncrypt/crypt.c:220 ncrypt/cryptglue.c:161 ncrypt/dlgpgp.c:606 ncrypt/pgpkey.c:273 msgid "Invoking PGP..." msgstr "Покрећем PGP..." @@ -4080,8 +4032,7 @@ msgstr "грешка приликом омогућавања CMS протоко msgid "error creating GPGME data object: %s" msgstr "грешка приликом креирања GPGME објекта са подацима: %s" -#: ncrypt/crypt_gpgme.c:719 ncrypt/crypt_gpgme.c:746 ncrypt/crypt_gpgme.c:1922 -#: ncrypt/crypt_gpgme.c:2684 +#: ncrypt/crypt_gpgme.c:719 ncrypt/crypt_gpgme.c:746 ncrypt/crypt_gpgme.c:1922 ncrypt/crypt_gpgme.c:2684 #, c-format msgid "error allocating data object: %s" msgstr "грешка приликом алоцирања објекта са подацима: %s" @@ -4240,8 +4191,7 @@ msgstr "Проблематичан потпис од:" msgid " expires: " msgstr " истиче: " -#: ncrypt/crypt_gpgme.c:1929 ncrypt/crypt_gpgme.c:2162 -#: ncrypt/crypt_gpgme.c:2956 +#: ncrypt/crypt_gpgme.c:1929 ncrypt/crypt_gpgme.c:2162 ncrypt/crypt_gpgme.c:2956 msgid "[-- Begin signature information --]\n" msgstr "[-- Почетак информација о потпису --]\n" @@ -4259,8 +4209,7 @@ msgstr "*** Почетак нотације (потпис од: %s) ***\n" msgid "*** End Notation ***\n" msgstr "*** Крај нотације ***\n" -#: ncrypt/crypt_gpgme.c:2018 ncrypt/crypt_gpgme.c:2176 -#: ncrypt/crypt_gpgme.c:2966 +#: ncrypt/crypt_gpgme.c:2018 ncrypt/crypt_gpgme.c:2176 ncrypt/crypt_gpgme.c:2966 msgid "" "[-- End signature information --]\n" "\n" @@ -4287,8 +4236,7 @@ msgstr "Грешка приликом увоза кључа: %s" msgid "Error: decryption/verification failed: %s\n" msgstr "Грешка: неуспешно дешифровање/верификација: %s\n" -#: ncrypt/crypt_gpgme.c:2937 ncrypt/crypt_gpgme.c:3136 ncrypt/pgp.c:731 -#: ncrypt/pgp.c:1281 +#: ncrypt/crypt_gpgme.c:2937 ncrypt/crypt_gpgme.c:3136 ncrypt/pgp.c:731 ncrypt/pgp.c:1281 msgid "PGP message successfully decrypted" msgstr "PGP порука успешно дешифрована" @@ -4364,8 +4312,7 @@ msgstr "[-- Крај података потписаних и шифровани msgid "[-- End of PGP/MIME encrypted data --]\n" msgstr "[-- Крај података шифрованих преко PGP/MIME-а --]\n" -#: ncrypt/crypt_gpgme.c:3144 ncrypt/pgp.c:669 ncrypt/pgp.c:722 -#: ncrypt/pgp.c:1285 postpone.c:687 +#: ncrypt/crypt_gpgme.c:3144 ncrypt/pgp.c:669 ncrypt/pgp.c:722 ncrypt/pgp.c:1285 postpone.c:687 msgid "Could not decrypt PGP message" msgstr "Дешифровање PGP поруке није могуће" @@ -4398,14 +4345,12 @@ msgstr "[-- Крај података шифрованих преко S/MIME-а msgid "gpgme_op_keylist_start failed: %s" msgstr "gpgme_op_keylist_start је неуспешно: %s" -#: ncrypt/crypt_gpgme.c:3460 ncrypt/crypt_gpgme.c:3511 -#: ncrypt/crypt_gpgme.c:4028 +#: ncrypt/crypt_gpgme.c:3460 ncrypt/crypt_gpgme.c:3511 ncrypt/crypt_gpgme.c:4028 #, c-format msgid "gpgme_op_keylist_next failed: %s" msgstr "gpgme_op_keylist_next је неуспешно: %s" -#: ncrypt/crypt_gpgme.c:3578 ncrypt/crypt_gpgme.c:3693 ncrypt/pgpkey.c:377 -#: ncrypt/pgpkey.c:506 +#: ncrypt/crypt_gpgme.c:3578 ncrypt/crypt_gpgme.c:3693 ncrypt/pgpkey.c:377 ncrypt/pgpkey.c:506 #, c-format msgid "Looking for keys matching \"%s\"..." msgstr "Траже се кључеви који одговарају „%s“..." @@ -4420,8 +4365,7 @@ msgstr "Нису пронађени кључеви који одговарају msgid "Use keyID = \"%s\" for %s?" msgstr "Користити keyID = \"%s\" за %s?" -#: ncrypt/crypt_gpgme.c:3910 ncrypt/pgp.c:1517 ncrypt/smime.c:754 -#: ncrypt/smime.c:840 +#: ncrypt/crypt_gpgme.c:3910 ncrypt/pgp.c:1517 ncrypt/smime.c:754 ncrypt/smime.c:840 #, c-format msgid "Enter keyID for %s: " msgstr "Унесите ИБкључа за %s: " @@ -4596,8 +4540,7 @@ msgstr[2] "%s, %lu-битни %s\n" msgid "encryption" msgstr "шифровање" -#: ncrypt/dlggpgme.c:674 ncrypt/dlggpgme.c:680 ncrypt/dlggpgme.c:814 -#: ncrypt/dlggpgme.c:819 +#: ncrypt/dlggpgme.c:674 ncrypt/dlggpgme.c:680 ncrypt/dlggpgme.c:814 ncrypt/dlggpgme.c:819 msgid ", " msgstr ", " @@ -4823,8 +4766,7 @@ msgstr "" "[-- Грешка: не може се креирати PGP потпроцес --]\n" "\n" -#: ncrypt/pgp.c:1078 ncrypt/pgp.c:1105 ncrypt/smime.c:1967 postpone.c:797 -#: postpone.c:825 +#: ncrypt/pgp.c:1078 ncrypt/pgp.c:1105 ncrypt/smime.c:1967 postpone.c:797 postpone.c:825 msgid "Decryption failed" msgstr "Неуспешно дешифровање" @@ -4936,8 +4878,7 @@ msgstr "Унесите ИБкључа: " msgid "No (valid) certificate found for %s" msgstr "Није пронађен (исправан) сертификат за %s" -#: ncrypt/smime.c:901 ncrypt/smime.c:930 ncrypt/smime.c:1004 -#: ncrypt/smime.c:1040 ncrypt/smime.c:1119 ncrypt/smime.c:1204 +#: ncrypt/smime.c:901 ncrypt/smime.c:930 ncrypt/smime.c:1004 ncrypt/smime.c:1040 ncrypt/smime.c:1119 ncrypt/smime.c:1204 msgid "Error: unable to create OpenSSL subprocess" msgstr "Грешка: не може се креирати OpenSSL потпроцес" @@ -6288,13 +6229,11 @@ msgstr "празна операција" msgid "Not available in this menu" msgstr "Није доступно у овом менију" -#: pager/dlg_pager.c:179 pager/dlg_pager.c:190 pager/dlg_pager.c:200 -#: pager/dlg_pager.c:216 +#: pager/dlg_pager.c:179 pager/dlg_pager.c:190 pager/dlg_pager.c:200 pager/dlg_pager.c:216 msgid "PrevPg" msgstr "ПретСтр" -#: pager/dlg_pager.c:180 pager/dlg_pager.c:191 pager/dlg_pager.c:201 -#: pager/dlg_pager.c:217 +#: pager/dlg_pager.c:180 pager/dlg_pager.c:191 pager/dlg_pager.c:201 pager/dlg_pager.c:217 msgid "NextPg" msgstr "СледСтр" @@ -6318,13 +6257,11 @@ msgstr "све" msgid "end" msgstr "крај" -#: pager/dlg_pager.c:2762 pager/dlg_pager.c:2803 pager/dlg_pager.c:2848 -#: pager/dlg_pager.c:3234 +#: pager/dlg_pager.c:2762 pager/dlg_pager.c:2803 pager/dlg_pager.c:2848 pager/dlg_pager.c:3234 msgid "Bottom of message is shown" msgstr "Приказан је крај поруке" -#: pager/dlg_pager.c:2777 pager/dlg_pager.c:2812 pager/dlg_pager.c:2821 -#: pager/dlg_pager.c:2834 +#: pager/dlg_pager.c:2777 pager/dlg_pager.c:2812 pager/dlg_pager.c:2821 pager/dlg_pager.c:2834 msgid "Top of message is shown" msgstr "Приказан је почетак поруке" @@ -6755,8 +6692,7 @@ msgstr "прекинуте нити" msgid "IMAP custom server-side search for STRING" msgstr "Прилагођена IMAP претрага сервера за ниском НИСКА" -#: pattern/pattern.c:260 pattern/pattern.c:366 pattern/pattern.c:533 -#: pattern/pattern.c:689 +#: pattern/pattern.c:260 pattern/pattern.c:366 pattern/pattern.c:533 pattern/pattern.c:689 msgid "Compiling search pattern..." msgstr "Компајлирање шеме за претрагу..." @@ -6913,6 +6849,14 @@ msgstr "Недозвољено крипто заглавље" msgid "Decrypting message..." msgstr "Дешифровање поруке..." +#: question/question.c:194 +msgid "yes" +msgstr "да (y)" + +#: question/question.c:195 +msgid "no" +msgstr "не (n)" + #: recvattach.c:74 msgid "Pipe" msgstr "Проследи" @@ -7463,9 +7407,3 @@ msgstr "Подразумеване опције:" #: version.c:514 msgid "Compile options:" msgstr "Опције за компајлирање:" - -#~ msgid "no" -#~ msgstr "не (n)" - -#~ msgid "yes" -#~ msgstr "да (y)" diff --git a/util.c b/util.c @@ -259,14 +259,14 @@ u32_lines_in_string(const uint32_t* s) int starts_with(const char* s, const char* with) { - while (*s == *with) + while (*s && *s == *with) { if (*s != *with) return 0; s++; with++; } - return *s != 0 && *with == 0; + return *with == 0; } void