123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799 |
- #include <config.h>
- #if HAVE_DIRENT_H
- # include <dirent.h>
- # define NAMLEN(dirent) strlen((dirent)->d_name)
- #else
- # define dirent direct
- # define NAMLEN(dirent) (dirent)->d_namlen
- # if HAVE_SYS_NDIR_H
- # include <sys/ndir.h>
- # endif
- # if HAVE_SYS_DIR_H
- # include <sys/dir.h>
- # endif
- # if HAVE_NDIR_H
- # include <ndir.h>
- # endif
- #endif
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <algorithm>
- #include "io.h"
- #include "pathnames.h"
- #include "menus.h"
- #define STT_AUTOINDENT 1001
- #define STT_AUTOJUSTIFY 1002
- #define STT_ALTKBD 1003
- #define STT_SMRT 1004
- #define STT_ARABICSHAPING 1005
- #define STT_FORMATMARKS 1006
- #define STT_CURSORREPORT 1007
- #define STT_SPELLERLOADED 1008
- #define STT_READONLY 1009
- #define STT_BIGCURSOR 1010
- #define STT_GRAPHBOXES 1011
- #define STT_KEYFORKEYUNDO 1012
- #define STT_BIDI 1013
- #define STT_UNDERLINE 1014
- #define STT_SYNAUTO 1015
- #define STT_EOPUNIX 5001
- #define STT_EOPDOS 5002
- #define STT_EOPMAC 5003
- #define STT_EOPUNICODE 5004
- #define STT_RTLNSMASCII 5010
- #define STT_RTLNSMASIS 5011
- #define STT_RTLNSMHIDE 5012
- #define STT_MQFASCII 5020
- #define STT_MQFHIGHLIGHT 5021
- #define STT_MQFASIS 5022
- #define STT_WRAPWSPACE 5030
- #define STT_WRAPBREAK 5031
- #define STT_WRAPOFF 5032
- #define STT_DIRALGOUNICODE 5040
- #define STT_DIRALGOCTXSTRNG 5041
- #define STT_DIRALGOCTXRTL 5042
- #define STT_DIRALGOFLTR 5043
- #define STT_DIRALGOFRTL 5044
- #define STT_SCRLBRNONE 5060
- #define STT_SCRLBRLEFT 5061
- #define STT_SCRLBRRIGHT 5062
- #define STT_SYNNONE 5070
- #define STT_SYNHTML 5071
- #define STT_SYNEMAIL 5072
- #define STT_CRSVIS 5080
- #define STT_CRSLOG 5081
- #define STT_THEME_START 6000
- #define STT_THEME_END 6999
- #define CMD_CHR 100
- #define CMD_CRSVIS 101
- #define CMD_CRSLOG 102
- #define CMD_SETTHEME 103
- #define CMD_SETFLAG 104
- #define CMD_ENC 105
- #define CMD_INTERACTIVEENC 106
- #define CMD_HELP 120
- #define FLAG_FILE_ENCODING 1
- #define FLAG_DEFAULT_ENCODING 2
- #define HELP_ITEM N_("Get a detailed explanation for the above")
- #define HELP_TOPIC_ALGO_STR "\xD7\x90\xD7\x9C\xD7\x92\xD7\x95\xD7\xA8\xD7\x99\xD7\xAA\xD7\x9D\x20\xD7\x9C\xD7\xA7\xD7\x91\xD7\x99\xD7\xA2\xD7"
- #define HELP_TOPIC_POINTS_STR "\xD7\xA0\xD7\x99\xD7\xA7\xD7\x95\xD7\x93\x20\xD7\xA2\xD7\x91\xD7\xA8\xD7\x99"
- #define HELP_TOPIC_MAQAF_STR "\xD7\x9E\xD7\xA7\xD7\xA3"
- #define HELP_TOPIC_EOL_STR "\xD7\xA1\xD7\x95\xD7\xA4\xD7\x99\x20\xD7\xA9\xD7\x95\xD7\xA8\xD7\x95\xD7\xAA"
- #define HELP_TOPIC_CRSLV_STR "\xD7\xAA\xD7\xA0\xD7\x95\xD7\xA2\xD7\xAA\x20\xD7\xA1\xD7\x9E\xD7\x9F"
- #define HELP_TOPIC_SYNHLT_STR "\xD7\xA6\xD7\x91\xD7\x99\xD7\xA2\xD7\x94\x20\xD7\xAA\xD7\x97\xD7\x91\xD7\x99\xD7\xA8\xD7\x99\xD7\xAA"
- #define HELP_TOPIC_WRAP_STR "\xD7\xA7\xD7\x99\xD7\xA4\xD7\x95\xD7\x9C\x20\xD7\xA4\xD7\xA1\xD7\xA7\xD7\x90\xD7\x95\xD7\xAA"
- #define HELP_TOPIC_COLORS_STR "\xD7\xA2\xD7\xA8\xD7\x9B\xD7\x95\xD7\xAA\x20\xD7\xA6\xD7\x91\xD7\xA2\xD7\x99\xD7\x9D"
- #define HELP_TOPIC_ENCODING_STR "\xD7\xA7\xD7\x99\xD7\x93\xD7\x95\xD7\x93\x20\xD7\x94\xD7\xA7\xD7\x91\xD7\xA6\xD7\x99\xD7\x9D"
- #define HELP_TOPIC_EXTED_STR "\xD7\x94\xD7\xA4\xD7\xA2\xD7\x9C\xD7\xAA\x20\xD7\xA2\xD7\x95\xD7\xA8\xD7\x9A\x20\xD7\x97\xD7\x99\xD7\xA6\xD7\x95\xD7\xA0\xD7\x99"
- PulldownMenu FileMenu = {
- { "load_file", N_("~Open...") },
- { "insert_file", N_("~Insert file...") },
- { "-----------" },
- { "save_file", N_("~Save") },
- { "save_file_as", N_("Save ~As...") },
- { "write_selection_to_file", N_("~Write selection to...") },
- { "-----------" },
- { "external_edit_prompt", N_("Launch external ~editor...") },
- { "external_edit_no_prompt", N_("Launch external editor") },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_EXTED_STR },
- { "-----------" },
- { "change_directory", N_("Ch~dir...") },
- { "quit", N_("~Quit") },
- { NULL }
- };
- PulldownMenu MovementMenu = {
- { "move_beginning_of_buffer", N_("Move to the ~beginning of the buffer") },
- { "move_end_of_buffer", N_("Move to the ~end of the buffer") },
- { "go_to_line", N_("Go to a specific ~line") },
- { "move_last_modification", N_("Jump to the last ~modification point") },
- { "-----------" },
- { "key_left", N_("Move a character left") },
- { "key_right", N_("Move a character right") },
- { "move_previous_line", N_("Move to the previous line") },
- { "move_next_line", N_("Move to the next line") },
- { "move_backward_page", N_("Move to the previous page") },
- { "move_forward_page", N_("Move to the next page") },
- { "move_backward_char", N_("Move back a character") },
- { "move_forward_char", N_("Move forward a character") },
-
- { "key_home", N_("Move to the beginning of the current line") },
- { "move_end_of_line", N_("Move to the end of the current line") },
- { NULL }
- };
- PulldownMenu DeletionMenu = {
- { "delete_backward_char", N_("Delete the previous character") },
- { "delete_forward_char", N_("Delete the character the cursor is on") },
- { "delete_backward_word", N_("Delete to the start of the current or previous word") },
- { "delete_forward_word", N_("Delete to the end of the current or next word") },
- { "delete_paragraph", N_("Delete the current paragraph") },
- { "cut_end_of_paragraph", N_("Cut [to] end of paragraph") },
- { NULL }
- };
- PulldownMenu EditMenu = {
- { "undo", N_("~Undo") },
- { "redo", N_("~Redo") },
- { "toggle_key_for_key_undo", N_("Toggle ~key-for-key undo"), STT_KEYFORKEYUNDO },
- { "-----------" },
- { "copy", N_("~Copy") },
- { "cut", N_("Cu~t") },
- { "paste",N_("~Paste") },
- { "toggle_primary_mark", N_("Start/cancel selection") },
- { "-----------" },
- { "", N_("~Movement"), 0, MovementMenu },
- { "", N_("~Deletion"), 0, DeletionMenu },
- { "toggle_read_only", N_("Toggle read-only status of buffer"), STT_READONLY },
- { "-----------" },
- { "search_forward", N_("~Search...") },
- { "search_forward_next", N_("Search ~next") },
- { "-----------" },
- { "toggle_auto_justify", N_("Toggle auto-~justify"), STT_AUTOJUSTIFY },
- { "justify", N_("Justify the current or next paragraph") },
- { "change_justification_column", N_("Change justify column...") },
- { "-----------" },
- { "toggle_auto_indent", N_("Toggle auto-~indent"), STT_AUTOINDENT },
- { "change_tab_width", N_("Change the TAB character size...") },
- { NULL }
- };
- PulldownMenu EolMenu = {
- { "set_eops_unix", N_("~Unix (LF)"), STT_EOPUNIX },
- { "set_eops_dos", N_("~DOS/Windows (CR,LF)"), STT_EOPDOS },
- { "set_eops_mac", N_("~Macintosh (CR)"), STT_EOPMAC },
- { "set_eops_unicode", N_("U~nicode PS (U+2029)"), STT_EOPUNICODE },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_EOL_STR },
- { NULL }
- };
- #define ICONVREQ N_("(requires iconv)")
- PulldownMenu CyrillicEncodingsMenu = {
- { "xxx", N_("(Cyrillic) ~Windows-1251"), 0, 0, CMD_ENC, 0, "CP1251", ICONVREQ },
- { "xxx", N_("(Cyrillic) ~ISO-8859-5"), 0, 0, CMD_ENC, 0, "ISO-8859-5", ICONVREQ },
- { "xxx", N_("(Cyrillic) KOI8-~R"), 0, 0, CMD_ENC, 0, "KOI8-R", ICONVREQ },
- { "xxx", N_("(Cyrillic) KOI8-~U"), 0, 0, CMD_ENC, 0, "KOI8-U", ICONVREQ },
- { "xxx", N_("(Cyrillic) IBM-866"), 0, 0, CMD_ENC, 0, "CP866", ICONVREQ },
- { "xxx", N_("(Cyrillic) IBM-855"), 0, 0, CMD_ENC, 0, "CP855", ICONVREQ },
- { "xxx", N_("(Cyrillic) ISO-IR-111"), 0, 0, CMD_ENC, 0, "ISO-IR-111", ICONVREQ },
- { "xxx", N_("(Cyrillic) ~MacCyrillic"), 0, 0, CMD_ENC, 0, "MACCYRILLIC", ICONVREQ },
- { NULL }
- };
- PulldownMenu UnicodeEncodingsMenu = {
- { "xxx", N_("UTF-1~6"), 0, 0, CMD_ENC, 0, "UTF-16", ICONVREQ },
- { "xxx", N_("UTF-16 Big Endian"), 0, 0, CMD_ENC, 0, "UTF-16BE", ICONVREQ },
- { "xxx", N_("UTF-16 Little Endian"), 0, 0, CMD_ENC, 0, "UTF-16LE", ICONVREQ },
- { "xxx", N_("UTF-~32"), 0, 0, CMD_ENC, 0, "UTF-32", ICONVREQ },
- { "xxx", N_("UTF-32 Big Endian"), 0, 0, CMD_ENC, 0, "UTF-32BE", ICONVREQ },
- { "xxx", N_("UTF-32 Little Endian"), 0, 0, CMD_ENC, 0, "UTF-32LE", ICONVREQ },
- { "xxx", N_("UTF-~7"), 0, 0, CMD_ENC, 0, "UTF-7", ICONVREQ },
- { "-----------" },
- { "xxx", N_("UCS-2"), 0, 0, CMD_ENC, 0, "UCS-2", ICONVREQ },
- { "xxx", N_("UCS-2 Big Endian"), 0, 0, CMD_ENC, 0, "UCS-2BE", ICONVREQ },
- { "xxx", N_("UCS-2 Little Endian"), 0, 0, CMD_ENC, 0, "UCS-2BE", ICONVREQ },
- { "xxx", N_("UCS-4"), 0, 0, CMD_ENC, 0, "UCS-4", ICONVREQ },
- { "xxx", N_("UCS-4 Big Endian"), 0, 0, CMD_ENC, 0, "UCS-4BE", ICONVREQ },
- { "xxx", N_("UCS-4 Little Endian"), 0, 0, CMD_ENC, 0, "UCS-4LE", ICONVREQ },
- { NULL }
- };
- PulldownMenu EncodingsMenu = {
- { "xxx", N_("~UTF-8"), 0, 0, CMD_ENC, 0, "UTF-8" },
- { "-----------" },
- { "xxx", N_("(Hebrew) ~ISO-8859-8"), 0, 0, CMD_ENC, 0, "ISO-8859-8" },
- { "xxx", N_("(Hebrew) ~Windows-1255"), 0, 0, CMD_ENC, 0, "CP1255", ICONVREQ },
- { "xxx", N_("(Hebrew) MacHebrew"), 0, 0, CMD_ENC, 0, "MACHEBREW", ICONVREQ },
- { "xxx", N_("(Hebrew) IBM-862 (~Dos)"), 0, 0, CMD_ENC, 0, "CP862", ICONVREQ },
- { "-----------" },
- { "xxx", N_("(Arabic) ISO-8859-6"), 0, 0, CMD_ENC, 0, "ISO-8859-6", ICONVREQ },
- { "xxx", N_("(~Arabic) Windows-1256"), 0, 0, CMD_ENC, 0, "CP1256", ICONVREQ },
- { "xxx", N_("(Arabic) MacArabic"), 0, 0, CMD_ENC, 0, "MACARABIC", ICONVREQ },
- { "xxx", N_("(Arabic) IBM-864 (Dos)"), 0, 0, CMD_ENC, 0, "CP864", ICONVREQ },
- { "xxx", N_("(Farsi) MacFarsi"), 0, 0, CMD_ENC, 0, "MACFARSI", ICONVREQ },
- { "xxx", N_("~Cyrillic"), 0, CyrillicEncodingsMenu },
- { "xxx", N_("~More Unicodes"), 0, UnicodeEncodingsMenu },
- { "-----------" },
- { "xxx", N_("Other..."), 0, 0, CMD_INTERACTIVEENC },
- { NULL }
- };
- PulldownMenu CantillationsCharMenu = {
- { "xxx", N_("ETNAHTA (U+0591)"), 0, 0, CMD_CHR, 0x0591 },
- { "xxx", N_("SEGOL (U+0592)"), 0, 0, CMD_CHR, 0x0592 },
- { "xxx", N_("SHALSHELET (U+0593)"), 0, 0, CMD_CHR, 0x0593 },
- { "xxx", N_("ZAQEF QATAN (U+0594)"), 0, 0, CMD_CHR, 0x0594 },
- { "xxx", N_("ZAQEF GADOL (U+0595)"), 0, 0, CMD_CHR, 0x0595 },
- { "xxx", N_("TIPEHA (U+0596)"), 0, 0, CMD_CHR, 0x0596 },
- { "xxx", N_("REVIA (U+0597)"), 0, 0, CMD_CHR, 0x0597 },
- { "xxx", N_("ZARQA (U+0598)"), 0, 0, CMD_CHR, 0x0598 },
- { "xxx", N_("PASHTA (U+0599)"), 0, 0, CMD_CHR, 0x0599 },
- { "xxx", N_("YETIV (U+059A)"), 0, 0, CMD_CHR, 0x059A },
- { "xxx", N_("TEVIR (U+059B)"), 0, 0, CMD_CHR, 0x059B },
- { "xxx", N_("GERESH (U+059C)"), 0, 0, CMD_CHR, 0x059C },
- { "xxx", N_("GERESH MUQDAM (U+059D)"), 0, 0, CMD_CHR, 0x059D },
- { "xxx", N_("GERSHAYIM (U+059E)"), 0, 0, CMD_CHR, 0x059E },
- { "xxx", N_("QARNEY PARA (U+059F)"), 0, 0, CMD_CHR, 0x059F },
- { "xxx", N_("TELISHA GEDOLA (U+05A0)"), 0, 0, CMD_CHR, 0x05A0 },
- { "xxx", N_("PAZER (U+05A1)"), 0, 0, CMD_CHR, 0x05A1 },
- { "xxx", N_("MUNAH (U+05A3)"), 0, 0, CMD_CHR, 0x05A3 },
- { "xxx", N_("MAHAPAKH (U+05A4)"), 0, 0, CMD_CHR, 0x05A4 },
- { "xxx", N_("MERKHA (U+05A5)"), 0, 0, CMD_CHR, 0x05A5 },
- { "xxx", N_("MERKHA KEFULA (U+05A6)"), 0, 0, CMD_CHR, 0x05A6 },
- { "xxx", N_("DARGA (U+05A7)"), 0, 0, CMD_CHR, 0x05A7 },
- { "xxx", N_("QADMA (U+05A8)"), 0, 0, CMD_CHR, 0x05A8 },
- { "xxx", N_("TELISHA QETANA (U+05A9)"), 0, 0, CMD_CHR, 0x05A9 },
- { "xxx", N_("YERAH BEN YOMO (U+05AA)"), 0, 0, CMD_CHR, 0x05AA },
- { "xxx", N_("OLE (U+05AB)"), 0, 0, CMD_CHR, 0x05AB },
- { "xxx", N_("ILUY (U+05AC)"), 0, 0, CMD_CHR, 0x05AC },
- { "xxx", N_("DEHI (U+05AD)"), 0, 0, CMD_CHR, 0x05AD },
- { "xxx", N_("ZINOR (U+05AE)"), 0, 0, CMD_CHR, 0x05AE },
- { "xxx", N_("MASORA CIRCLE (U+05AF)"), 0, 0, CMD_CHR, 0x05AF },
- { "-----------" },
- { "xxx", N_("METEG (U+05BD)"), 0, 0, CMD_CHR, UNI_HEB_METEG },
- { "xxx", N_("PASEQ (U+05C0)"), 0, 0, CMD_CHR, UNI_HEB_PASEQ },
- { "xxx", N_("SOF PASUQ (U+05C3)"), 0, 0, CMD_CHR, UNI_HEB_SOF_PASUQ },
- { NULL }
- };
- PulldownMenu ArabicCharMenu = {
- { "xxx", N_("~FATHATAN (U+064B)"), 0, 0, CMD_CHR, 0x064B },
- { "xxx", N_("DAMMATAN (U+064C)"), 0, 0, CMD_CHR, 0x064C },
- { "xxx", N_("~KASRATAN (U+064D)"), 0, 0, CMD_CHR, 0x064D },
- { "xxx", N_("FATHA (U+064E)"), 0, 0, CMD_CHR, 0x064E },
- { "xxx", N_("~DAMMA (U+064F)"), 0, 0, CMD_CHR, 0x064F },
- { "xxx", N_("KASRA (U+0650)"), 0, 0, CMD_CHR, 0x0650 },
- { "xxx", N_("~SHADDA (U+0651)"), 0, 0, CMD_CHR, 0x0651 },
- { "xxx", N_("SUKUN (U+0652)"), 0, 0, CMD_CHR, 0x0652 },
- { "xxx", N_("SUPERSCRIPT ALEF (U+0670)"), 0, 0, CMD_CHR, 0x0670 },
- { "-----------" },
- { "xxx", N_("ZWJ, ZERO WIDTH JOINER (U+200D)"), 0, 0, CMD_CHR, 0x200D },
- { "xxx", N_("ZWNJ, ZERO WIDTH NON-JOINER (U+200C)"), 0, 0, CMD_CHR, 0x200C },
- { NULL }
- };
- PulldownMenu InsertCharMenu = {
- { "insert_maqaf", N_("Hebrew ~maqaf (U+05BE)") },
- { "-----------" },
- { "xxx", N_("~LRM, LEFT-TO-RIGHT MARK (U+200E)"), 0, 0, CMD_CHR, UNI_LRM },
- { "xxx", N_("~RLM, RIGHT-TO-LEFT MARK (U+200F)"), 0, 0, CMD_CHR, UNI_RLM },
- { "xxx", N_("LRE, LEFT-TO-RIGHT EMBEDDING (U+202A)"), 0, 0, CMD_CHR, UNI_LRE },
- { "xxx", N_("RLE, RIGHT-TO-LEFT EMBEDDING (U+202B)"), 0, 0, CMD_CHR, UNI_RLE },
- { "xxx", N_("PDF, POP DIRECTIONAL FORMATTING (U+202C)"), 0, 0, CMD_CHR, UNI_PDF },
- { "xxx", N_("LRO, LEFT-TO-RIGHT OVERRIDE (U+202D)"), 0, 0, CMD_CHR, UNI_LRO },
- { "xxx", N_("RLO, RIGHT-TO-LEFT OVERRIDE (U+202E)"), 0, 0, CMD_CHR, UNI_RLO },
- { "-----------" },
- { "xxx", N_("~SHEVA (U+05B0)"), 0, 0, CMD_CHR, UNI_HEB_SHEVA },
- { "xxx", N_("HATAF SEGOL (U+05B~1)"), 0, 0, CMD_CHR, UNI_HEB_HATAF_SEGOL },
- { "xxx", N_("HATAF PATAH (U+05B~2)"), 0, 0, CMD_CHR, UNI_HEB_HATAF_PATAH },
- { "xxx", N_("HATAF QAMATS (U+05B~3)"), 0, 0, CMD_CHR, UNI_HEB_HATAF_QAMATS },
- { "xxx", N_("~HIRIQ (U+05B4)"), 0, 0, CMD_CHR, UNI_HEB_HIRIQ },
- { "xxx", N_("TS~ERE (U+05B5)"), 0, 0, CMD_CHR, UNI_HEB_TSERE },
- { "xxx", N_("SE~GOL (U+05B6)"), 0, 0, CMD_CHR, UNI_HEB_SEGOL },
- { "xxx", N_("~PATAH (U+05B7)"), 0, 0, CMD_CHR, UNI_HEB_PATAH },
- { "xxx", N_("~QAMATS (U+05B8)"), 0, 0, CMD_CHR, UNI_HEB_QAMATS },
- { "xxx", N_("H~OLAM (U+05B9)"), 0, 0, CMD_CHR, UNI_HEB_HOLAM },
- { "xxx", N_("Q~UBUTS (U+05BB)"), 0, 0, CMD_CHR, UNI_HEB_QUBUTS },
- { "xxx", N_("~DAGESH OR MAPIQ (U+05BC)"), 0, 0, CMD_CHR, UNI_HEB_DAGESH_OR_MAPIQ },
- { "xxx", N_("~RAFE (U+05BF)"), 0, 0, CMD_CHR, UNI_HEB_RAFE },
- { "xxx", N_("SHIN DOT (U+05C1)"), 0, 0, CMD_CHR, UNI_HEB_SHIN_DOT },
- { "xxx", N_("SIN DOT (U+05C2)"), 0, 0, CMD_CHR, UNI_HEB_SIN_DOT },
- { "-----------" },
- { "xxx", N_("GERESH (U+05F3)"), 0, 0, CMD_CHR, UNI_HEB_GERESH },
- { "xxx", N_("GERSHAYIM (U+05F4)"), 0, 0, CMD_CHR, UNI_HEB_GERSHAYIM },
- { "xxx", N_("NO-BREAK SPACE (U+00A0)"), 0, 0, CMD_CHR, 0x00A0 },
- { "xxx", N_("ZERO WIDTH SPACE(U+200B)"), 0, 0, CMD_CHR, 0x200B },
- { "-----------" },
- { "xxx", N_("~Cantillations"), 0, CantillationsCharMenu },
- { "xxx", N_("~Arabic"), 0, ArabicCharMenu },
- };
- PulldownMenu CharactersUtilsMenu = {
- { "show_character_code", N_("Print ~Unicode and UTF-8 value") },
- { "show_character_info", N_("Print the corresponding Unicode~Data.txt line") },
- { "xxx", N_("~Insert a Unicode character from the list"), 0, InsertCharMenu },
- { "insert_unicode_char", N_("Insert a Unicode character using its ~code") },
- { "-----------" },
- { "xxx", N_("Set the ~encoding used for saving this file"), 0, EncodingsMenu, CMD_SETFLAG, FLAG_FILE_ENCODING },
- { "xxx", N_("Set the de~fault encoding"), 0, EncodingsMenu, CMD_SETFLAG, FLAG_DEFAULT_ENCODING, 0,
- N_("The \"default encoding\" is used when loading files and when creating new files.") },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_ENCODING_STR },
- { "-----------" },
- { "toggle_alt_kbd", N_("Toogle ~Hebrew keyboard emulation"), STT_ALTKBD },
- { "toggle_smart_typing", N_("Toggle ~smart-typing mode"), STT_SMRT },
- { "set_translate_next_char", N_("~Translate next character") },
- { "-----------" },
- { "toggle_eops", N_("Change end-of-~line type"), 0, EolMenu },
- { NULL }
- };
- PulldownMenu DirAlgoMenu = {
- { "set_dir_algo_unicode", N_("~Unicode's TR #9"), STT_DIRALGOUNICODE },
- { "set_dir_algo_context_strong", N_("Contextual-~strong"), STT_DIRALGOCTXSTRNG },
- { "set_dir_algo_context_rtl", N_("~Contextual-rtl"), STT_DIRALGOCTXRTL },
- { "set_dir_algo_force_ltr", N_("Force ~LTR"), STT_DIRALGOFLTR },
- { "set_dir_algo_force_rtl", N_("Force ~RTL"), STT_DIRALGOFRTL },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_ALGO_STR },
- { NULL }
- };
- PulldownMenu CursorMovementMenu = {
- { "toggle_visual_cursor_movement", N_("~Logical"), STT_CRSLOG, 0, CMD_CRSLOG, 0,
- N_("Logical movement: cursor follows the buffer order") },
- { "toggle_visual_cursor_movement", N_("~Visual"), STT_CRSVIS, 0, CMD_CRSVIS, 0,
- N_("Visual movement: cursor follows what you see on screen") },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_CRSLV_STR },
- { NULL }
- };
- PulldownMenu BiDiMenu = {
- { "toggle_bidi", N_("Toggle the ~BiDi algorithm"), STT_BIDI },
- { "toggle_dir_algo", N_("Select base-directionality ~algorithm"), 0, DirAlgoMenu },
- { "toggle_visual_cursor_movement", N_("~Cursor movement"), 0, CursorMovementMenu },
- { NULL }
- };
- PulldownMenu SpellerMenu = {
- { "spell_check_all", N_("Spell check all ~document") },
- { "spell_check_forward", N_("Spell check ~from cursor onward") },
- { "spell_check_word", N_("Spell check ~word under cursor") },
- { "-----------" },
- { "load_unload_speller", N_("Explicitly ~load/unload the speller process..."), STT_SPELLERLOADED },
- { NULL }
- };
- PulldownMenu WrapMenu = {
- { "set_wrap_type_at_white_space",
- N_("Wrap lines, do not break ~words"), STT_WRAPWSPACE },
- { "set_wrap_type_anywhere",
- N_("Wrap lines, ~break words"), STT_WRAPBREAK },
- { "set_wrap_type_off",
- N_("Do ~not wrap lines"), STT_WRAPOFF },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_WRAP_STR },
- { NULL }
- };
- PulldownMenu rtlnsmMenu = {
- { "set_rtl_nsm_transliterated",
- N_("Display Hebrew/Arabic points as highlighted ~ASCII characters"), STT_RTLNSMASCII },
- { "set_rtl_nsm_asis",
- N_("Display Hebrew/Arabic points as-~is (for capable terminals)"), STT_RTLNSMASIS },
- { "set_rtl_nsm_off",
- N_("~Hide Hebrew/Arabic points"), STT_RTLNSMHIDE },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_POINTS_STR },
- { NULL }
- };
- PulldownMenu MaqafMenu = {
- { "set_maqaf_display_transliterated",
- N_("Display the maqaf as ~ASCII dash"), STT_MQFASCII },
- { "set_maqaf_display_asis",
- N_("Display the maqaf as-~is (for capable terminals)"),
- STT_MQFASIS },
- { "set_maqaf_display_highlighted",
- N_("~Highlight the maqaf"), STT_MQFHIGHLIGHT },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_MAQAF_STR },
- { NULL }
- };
- PulldownMenu ScrollbarMenu = {
- { "menu_set_scrollbar_none", N_("~Off"), STT_SCRLBRNONE },
- { "menu_set_scrollbar_left", N_("~Left"), STT_SCRLBRLEFT },
- { "menu_set_scrollbar_right", N_("~Right"), STT_SCRLBRRIGHT },
- { NULL }
- };
- PulldownMenu HighlightMenu = {
- { "toggle_syntax_auto_detection", N_("Syntax ~Auto-Detection"), STT_SYNAUTO },
- { "-----------" },
- { "menu_set_syn_hlt_none", N_("~None"), STT_SYNNONE },
- { "menu_set_syn_hlt_html", N_("~HTML"), STT_SYNHTML },
- { "menu_set_syn_hlt_email", N_("~Email"), STT_SYNEMAIL },
- { "-----------" },
- { "toggle_underline", N_("Highlight *~text* and _text_"), STT_UNDERLINE },
- { "-----------" },
- { "xxx", HELP_ITEM, 0, 0, CMD_HELP, 0, HELP_TOPIC_SYNHLT_STR },
- { NULL }
- };
- #define MAX_COLOR_SCHEMES 100
- MenuItem ColorScheme[MAX_COLOR_SCHEMES] = {
- { "set_default_theme", N_("~Default (transparent)"), STT_THEME_START, 0, 0, 0, "default.thm" },
- { "-----------" },
- };
- PulldownMenu DisplayMenu = {
- { "toggle_formatting_marks", N_("Toggle display of ~formatting marks"), STT_FORMATMARKS },
- { "toggle_arabic_shaping", N_("Toggle ~Arabic shaping"), STT_ARABICSHAPING },
- { "xxx_toggle_rtl_nsm", N_("Change display of Hebrew/Arabic ~points"), 0, rtlnsmMenu },
- { "xxx_toggle_maqaf", N_("Change display of the Hebrew ~maqaf"), 0, MaqafMenu },
- { "-----------" },
- { "toggle_wrap", N_("Change ~wrap style"), 0, WrapMenu },
- { "xxx", N_("~Scrollbar"), 0, ScrollbarMenu },
- { "toggle_cursor_position_report", N_("Toggle display of cursor p~osition"), STT_CURSORREPORT },
- { "change_scroll_step", N_("Change the scroll step...") },
- { "-----------" },
- { "xxx", N_("~Color scheme"), 0, ColorScheme },
- { "-----------" },
- { "xxx", N_("Syntax ~Highlighting"), 0, HighlightMenu },
- { "-----------" },
- { "refresh_and_center", N_("~Repaint the screen and center the line") },
- { "toggle_graphical_boxes", N_("Toggle use of ~graphical characters for frames"), STT_GRAPHBOXES },
- { "toggle_big_cursor", N_("Toggle ~big cursor"), STT_BIGCURSOR },
- { NULL }
- };
- PulldownMenu HelpMenu = {
- { "help", N_("User ~Manual") },
- { "describe_key", N_("~Describe key...") },
- { NULL }
- };
- MenubarMenu mainMenu = {
- { "File", FileMenu },
- { "Edit", EditMenu },
- { "Characters", CharactersUtilsMenu },
- { "Display", DisplayMenu },
- { "BiDi", BiDiMenu },
- { "Speller", SpellerMenu },
- { "Help", HelpMenu },
- { NULL }
- };
- class MMPopupMenu : public PopupMenu {
- Editor *editor;
- EditBox *editbox;
- public:
- MMPopupMenu(Editor *aEditor, EditBox *aEditbox,
- PopupMenu *aParent, PulldownMenu aMnu);
- protected:
- virtual void show_hint(const char *hint);
- virtual void clear_other_popups();
- virtual Dispatcher *get_primary_target();
- virtual Dispatcher *get_secondary_target();
- virtual PopupMenu *create_popupmenu(PopupMenu *aParent, PulldownMenu mnu);
- virtual bool get_item_state(int id);
- virtual void do_command(unsigned long parameter1, unsigned long parameter2,
- const char *parameter3);
- };
- MMPopupMenu::MMPopupMenu(Editor *aEditor, EditBox *aEditbox,
- PopupMenu *aParent, PulldownMenu aMnu)
- : PopupMenu(aParent, NULL)
- {
- editor = aEditor;
- editbox = aEditbox;
- init(aMnu);
- }
- void MMPopupMenu::show_hint(const char *hint)
- {
- editor->show_hint(hint);
- }
- void MMPopupMenu::clear_other_popups()
- {
- editor->refresh(true);
- }
- Dispatcher *MMPopupMenu::get_primary_target()
- {
- return editor;
- }
- Dispatcher *MMPopupMenu::get_secondary_target()
- {
- return editbox;
- }
- PopupMenu *MMPopupMenu::create_popupmenu(PopupMenu *aParent, PulldownMenu mnu)
- {
- return new MMPopupMenu(editor, editbox, aParent, mnu);
- }
- bool MMPopupMenu::get_item_state(int id)
- {
- switch (id) {
- case STT_AUTOINDENT: return editbox->is_auto_indent();
- case STT_AUTOJUSTIFY: return editbox->is_auto_justify();
- case STT_ALTKBD: return editbox->get_alt_kbd();
- case STT_SMRT: return editbox->is_smart_typing();
- case STT_ARABICSHAPING: return terminal::do_arabic_shaping;
- case STT_FORMATMARKS: return editbox->has_formatting_marks();
- case STT_CURSORREPORT: return editor->is_cursor_position_report();
- case STT_READONLY: return editbox->is_read_only();
- case STT_BIGCURSOR: return editor->is_big_cursor();
- case STT_GRAPHBOXES: return terminal::graphical_boxes;
- case STT_KEYFORKEYUNDO: return editbox->is_key_for_key_undo();
- case STT_BIDI: return editbox->is_bidi_enabled();
- case STT_EOPUNIX: return editbox->get_dominant_eop() == eopUnix;
- case STT_EOPDOS: return editbox->get_dominant_eop() == eopDOS;
- case STT_EOPMAC: return editbox->get_dominant_eop() == eopMac;
- case STT_EOPUNICODE: return editbox->get_dominant_eop() == eopUnicode;
- case STT_RTLNSMASCII: return editbox->get_rtl_nsm_display() == EditBox::rtlnsmTransliterated;
- case STT_RTLNSMASIS: return editbox->get_rtl_nsm_display() == EditBox::rtlnsmAsis;
- case STT_RTLNSMHIDE: return editbox->get_rtl_nsm_display() == EditBox::rtlnsmOff;
- case STT_MQFASCII: return editbox->get_maqaf_display() == EditBox::mqfTransliterated;
- case STT_MQFHIGHLIGHT: return editbox->get_maqaf_display() == EditBox::mqfHighlighted;
- case STT_MQFASIS: return editbox->get_maqaf_display() == EditBox::mqfAsis;
- case STT_WRAPOFF: return editbox->get_wrap_type() == EditBox::wrpOff;
- case STT_WRAPBREAK: return editbox->get_wrap_type() == EditBox::wrpAnywhere;
- case STT_WRAPWSPACE: return editbox->get_wrap_type() == EditBox::wrpAtWhiteSpace;
- case STT_DIRALGOUNICODE: return editbox->get_dir_algo() == algoUnicode;
- case STT_DIRALGOCTXSTRNG: return editbox->get_dir_algo() == algoContextStrong;
- case STT_DIRALGOCTXRTL: return editbox->get_dir_algo() == algoContextRTL;
- case STT_DIRALGOFLTR: return editbox->get_dir_algo() == algoForceLTR;
- case STT_DIRALGOFRTL: return editbox->get_dir_algo() == algoForceRTL;
- case STT_SPELLERLOADED: return editor->is_speller_loaded();
- case STT_SCRLBRNONE: return editor->get_scrollbar_pos() == Editor::scrlbrNone;
- case STT_SCRLBRLEFT: return editor->get_scrollbar_pos() == Editor::scrlbrLeft;
- case STT_SCRLBRRIGHT: return editor->get_scrollbar_pos() == Editor::scrlbrRight;
- case STT_SYNNONE: return editbox->get_syn_hlt() == EditBox::synhltOff;
- case STT_SYNHTML: return editbox->get_syn_hlt() == EditBox::synhltHTML;
- case STT_SYNEMAIL: return editbox->get_syn_hlt() == EditBox::synhltEmail;
- case STT_UNDERLINE: return editbox->get_underline();
- case STT_SYNAUTO: return editor->get_syntax_auto_detection();
- case STT_CRSVIS: return editbox->get_visual_cursor_movement();
- case STT_CRSLOG: return !editbox->get_visual_cursor_movement();
- default:
- if (id >= STT_THEME_START && id <= STT_THEME_END) {
- int i = 0;
- while (ColorScheme[i].action) {
- if (ColorScheme[i].state_id == id)
- return STREQ(ColorScheme[i].command_parameter3, editor->get_theme_name());
- i++;
- }
- return false;
- }
- else {
- return false;
- }
- }
- }
- void MMPopupMenu::do_command(unsigned long parameter1, unsigned long parameter2,
- const char *parameter3)
- {
- static int flag;
- switch (parameter1) {
- case CMD_SETTHEME:
- editor->set_theme(parameter3);
- break;
- case CMD_CHR:
- editbox->insert_char((unichar)parameter2);
- break;
- case CMD_CRSVIS:
- editbox->set_visual_cursor_movement(true);
- break;
- case CMD_CRSLOG:
- editbox->set_visual_cursor_movement(false);
- break;
- case CMD_HELP:
- editor->show_help_topic(parameter3);
- break;
- case CMD_ENC:
- if (flag == FLAG_DEFAULT_ENCODING)
- editor->set_default_encoding(parameter3);
- else
- editor->set_encoding(parameter3);
- break;
- case CMD_INTERACTIVEENC:
- editor->menu_set_encoding(flag == FLAG_DEFAULT_ENCODING);
- break;
- case CMD_SETFLAG:
- flag = parameter2;
- break;
- }
- }
- class MMMenubar : public Menubar {
- Editor *editor;
- EditBox *editbox;
- void populate_color_scheme_menu();
- public:
- MMMenubar(Editor *, EditBox *);
- virtual void refresh_screen();
- virtual PopupMenu *create_popupmenu(PulldownMenu mnu);
- };
- MMMenubar::MMMenubar(Editor *aEditor, EditBox *aEditbox)
- : Menubar()
- {
- editor = aEditor;
- editbox = aEditbox;
- populate_color_scheme_menu();
- init(mainMenu);
- }
- void MMMenubar::refresh_screen()
- {
- editor->refresh(true);
- }
- PopupMenu *MMMenubar::create_popupmenu(PulldownMenu mnu)
- {
- return new MMPopupMenu(editor, editbox, NULL, mnu);
- }
- bool operator<(const MenuItem &a, const MenuItem &b)
- {
- u8string as = a.label, bs = b.label;
- return strcmp(as.erase_char('~').toupper_ascii().c_str(),
- bs.erase_char('~').toupper_ascii().c_str()) < 0;
- }
- static u8string get_color_scheme_title(const char *filename)
- {
- #define MAX_LINE_LEN 1024
- FILE *fp;
- if ((fp = fopen(filename, "r")) != NULL) {
- char line[MAX_LINE_LEN];
- int line_no = 0;
- while (fgets(line, MAX_LINE_LEN, fp) && line_no++ < 5) {
- const char *pos;
- if ((pos = strstr(line, "Title:")) != NULL) {
- fclose(fp);
- return u8string(pos + strlen("Title:")).trim();
- }
- }
- fclose(fp);
- }
- return "";
- #undef MAX_LINE_LEN
- }
- static bool theme_already_listed(const char *theme_name)
- {
- int i = 0;
- while (ColorScheme[i].action) {
- if (ColorScheme[i].command_parameter3 &&
- STREQ(ColorScheme[i].command_parameter3, theme_name))
- return true;
- i++;
- }
- return false;
- }
- void MMMenubar::populate_color_scheme_menu()
- {
- int menu_pos = 0;
- while (ColorScheme[menu_pos].action) menu_pos++;
- int menu_start = menu_pos;
- for (int i = 0; i < 2; i++) {
- DIR *dir;
- dirent *ent;
- const char *dirstr = get_cfg_filename((i == 0) ? USER_THEMES_DIR : SYSTEM_THEMES_DIR);
- if ((dir = opendir(dirstr)) == NULL)
- continue;
- while ((ent = readdir(dir)) != NULL) {
- const char *d_name = ent->d_name;
- u8string desc;
- desc.cformat("File: %s%s", dirstr, d_name);
- if (STREQ(d_name, "default.thm") && !ColorScheme[0].desc)
- ColorScheme[0].desc = strdup(desc.c_str());
- if (strstr(d_name, ".thm") && !strchr(d_name, '~')
- && !theme_already_listed(d_name)) {
- ColorScheme[menu_pos].action = "xxx";
- ColorScheme[menu_pos].command_parameter1 = CMD_SETTHEME;
- ColorScheme[menu_pos].command_parameter3 = strdup(d_name);
- ColorScheme[menu_pos].state_id = STT_THEME_START + menu_pos;
- ColorScheme[menu_pos].desc = strdup(desc.c_str());
-
- u8string filepath = dirstr; filepath += d_name;
- u8string title = get_color_scheme_title(filepath.c_str());
- if (title.empty()) {
- char *label = strdup(d_name);
-
- if (strchr(label, '.'))
- *strchr(label, '.') = '\0';
- ColorScheme[menu_pos].label = label;
- } else {
- ColorScheme[menu_pos].label = strdup(title.c_str());
- }
-
- menu_pos++;
- }
- }
- closedir(dir);
- }
- std::sort(&ColorScheme[menu_start], &ColorScheme[menu_pos]);
- ColorScheme[menu_pos++].action = "---";
- ColorScheme[menu_pos].action = "xxx";
- ColorScheme[menu_pos].label = HELP_ITEM;
- ColorScheme[menu_pos].command_parameter1 = CMD_HELP;
- ColorScheme[menu_pos].command_parameter3 = HELP_TOPIC_COLORS_STR;
- }
- Menubar *create_main_menubar(Editor *aEdtr, EditBox *aEdtbx)
- {
- return new MMMenubar(aEdtr, aEdtbx);
- }
|