Merge pull request #1342 from RaiKoHoff/Dev_ONIGURUMA

TOML Lexer Enhancements
This commit is contained in:
Rainer Kottenhoff 2019-06-13 18:00:50 +02:00 committed by GitHub
commit 6ea2f94ffe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
50 changed files with 1846 additions and 193 deletions

View File

@ -1 +1 @@
2250
2252

View File

@ -1031,6 +1031,7 @@
#define IDS_LEX_STR_63353 63353
#define IDS_LEX_STR_63354 63354
#define IDS_LEX_STR_63355 63355
#define IDS_LEX_STR_63356 63356
#define RICHEDIT_CONTROL_VER "RichEdit50W" // RICHEDIT_CONTROL_VER

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2de In lyn-IME Kleur"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Afrikaans (South Africa) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Belarusian (Belarus) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2te Inline-IME Farbe"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // German (Germany) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // English (United Kingdom) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // English (United States) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Spanish (Spain, International Sort) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // French (France) resources

View File

@ -86,17 +86,17 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Szöve&g keresése:",IDC_STATIC,7,7,66,8
COMBOBOX IDC_FINDTEXT,7,17,192,116,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "&Kisbetû/nagybetû számít",IDC_FINDCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,37,89,10
CONTROL "&Kis-/nagybetû számít",IDC_FINDCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,37,53,10
CONTROL "E&gész szavakra egyezés",IDC_FINDWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,49,89,10
CONTROL "Szókez&detre egyezés",IDC_FINDSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,61,110,10
CONTROL "&Visszaperjel átalakítása",IDC_FINDTRANSFORMBS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,89,10
CONTROL "R&eguláris kifejezés keresése",IDC_FINDREGEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,85,97,10
CONTROL "Pont &mindenre egyezik",IDC_DOT_MATCH_ALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,96,85,10
CONTROL "Szó ele&jére egyezés",IDC_FINDSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,61,110,10
CONTROL "&Backslash átalakítások",IDC_FINDTRANSFORMBS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,85,10
CONTROL "R&eguláris kifejezéssel",IDC_FINDREGEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,85,96,10
CONTROL "Pont &mindenre egyezik",IDC_DOT_MATCH_ALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,96,65,10
CONTROL "&Ne menjen körbe",IDC_NOWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,37,75,10
CONTROL "Cseré&lés után bezár",IDC_FINDCLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,49,80,10
CONTROL "Elõ&fordulások jelölése",IDC_ALL_OCCURRENCES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,61,75,10
CONTROL "&Joker kar. keresés",IDC_WILDCARDSEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,85,63,10
CONTROL "Átlátszó mód, ha nincs fókuszban",IDC_TRANSPARENT,
CONTROL "Ta&lálat után bezárás",IDC_FINDCLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,49,65,10
CONTROL "Találat&ok jelölése",IDC_ALL_OCCURRENCES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,61,73,10
CONTROL "&Joker keresés",IDC_WILDCARDSEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,85,63,10
CONTROL "Átlátszó mód, ha nincs fókuszban ",IDC_TRANSPARENT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,118,124,10
DEFPUSHBUTTON "&Köv. keresése",IDOK,211,7,55,14
PUSHBUTTON "&Elõzõ keresése",IDC_FINDPREV,211,24,55,14
@ -120,16 +120,16 @@ BEGIN
COMBOBOX IDC_FINDTEXT,7,17,192,116,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
LTEXT "Cserélés &erre:",IDC_STATIC,7,36,44,8
COMBOBOX IDC_REPLACETEXT,7,47,192,116,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "Kisbetû/nagybetû számít",IDC_FINDCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,66,89,10
CONTROL "Kis-/nag&ybetû számít",IDC_FINDCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,66,89,10
CONTROL "Egés&z szavakra egyezés",IDC_FINDWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,78,89,10
CONTROL "Szókez&detre egyezés",IDC_FINDSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,90,110,10
CONTROL "&Visszaperjel átalakítása",IDC_FINDTRANSFORMBS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,102,89,10
CONTROL "Back&slash átalakítás",IDC_FINDTRANSFORMBS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,102,89,10
CONTROL "R&eguláris kifejezés keresése",IDC_FINDREGEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,114,97,10
CONTROL "Pont &mindenre egyezik",IDC_DOT_MATCH_ALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,125,85,10
CONTROL "&Ne menjen körbe",IDC_NOWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,66,75,10
CONTROL "Cseré&lés után bezár",IDC_FINDCLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,78,80,10
CONTROL "Csere után bezár",IDC_FINDCLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,78,80,10
CONTROL "Elõ&fordulások jelölése",IDC_ALL_OCCURRENCES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,90,75,10
CONTROL "&Joker kar. keresés",IDC_WILDCARDSEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,114,63,10
CONTROL "&Joker keresés",IDC_WILDCARDSEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,125,114,63,10
CONTROL "Átlátszó mód, ha nincs fókuszban",IDC_TRANSPARENT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,144,124,10
DEFPUSHBUTTON "K&öv. keresése",IDOK,211,7,55,14
@ -256,8 +256,8 @@ CAPTION "F
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "",IDC_FILEMRU,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,7,7,255,97
CONTROL "K&urzor helye megmarad.",IDC_PRESERVECARET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,119,96,10
CONTROL "&Fájl elõzménylista mentése kilépéskor.",IDC_SAVEMRU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,107,125,10
CONTROL "K&urzor helyét megjegyzi",IDC_PRESERVECARET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,119,96,10
CONTROL "&Fájl elõzmények mentése kilépéskor.",IDC_SAVEMRU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,107,96,10
CONTROL "&Keresési minta megjegyzése.",IDC_REMEMBERSEARCHPATTERN,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,130,96,10
PUSHBUTTON "Kihagyás",IDC_REMOVE,212,107,50,14,WS_DISABLED
@ -471,14 +471,14 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,245,98,50,14
PUSHBUTTON "Mégsem",IDCANCEL,184,98,50,14
CONTROL "Új mester kulcs megadása",IDC_PWD_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,60,95,10
CONTROL "Új mesterkulcs megadása",IDC_PWD_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,60,84,10
EDITTEXT IDC_PWD_EDIT1,17,35,276,12,ES_PASSWORD | ES_AUTOHSCROLL | WS_GROUP
EDITTEXT IDC_PWD_EDIT2,17,74,277,12,ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "Nem kötelezõ mester kulcs:",IDC_STATIC,17,61,88,10,NOT WS_GROUP
CONTROL "Kódolás jelmondat segítségével",IDC_PWD_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,21,128,10
CONTROL "Mester kulcs újrafelhasználása",IDC_PWD_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,218,60,76,10
LTEXT "Nem kötelezõ mesterkulcs:",IDC_STATIC,17,61,72,10,NOT WS_GROUP
CONTROL "Kódolás jelmondat segítségével",IDC_PWD_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,21,98,10
CONTROL "Mesterkulcs újrafelhasználása",IDC_PWD_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,218,60,76,10
GROUPBOX "Jelmondat",IDC_STATIC,7,7,297,108
CONTROL "Jelmondatok megjelenítése",IDC_PWD_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,97,98,10
CONTROL "Jelmondat megjelenítése",IDC_PWD_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,97,75,10
END
IDD_MUI_READPW DIALOGEX 0, 0, 299, 81
@ -511,9 +511,9 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSM
CAPTION "Sorok módosítása"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Szöveg a sor &elejére:",IDC_STATIC,7,7,62,8
LTEXT "Sor &elejére:",IDC_STATIC,7,7,62,8
EDITTEXT 100,7,18,98,14,ES_AUTOHSCROLL
LTEXT "Szöveg a sor &végére:",IDC_STATIC,7,37,68,8
LTEXT "Sor &végére:",IDC_STATIC,7,37,68,8
EDITTEXT 101,7,48,98,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,125,7,50,14
PUSHBUTTON "Mégsem",IDCANCEL,125,24,50,14

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Hungarian (Hungary) resources

View File

@ -196,7 +196,7 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Backtick\tCtrl+6", CMD_EMBRACE4
MENUITEM SEPARATOR
MENUITEM "&Ezzel...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
MENUITEM "&Egyéni...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
END
MENUITEM "Sor/Kijelölés &duplikálása\tCtrl+D", IDM_EDIT_DUPLINEORSELECTION
MENUITEM SEPARATOR
@ -310,7 +310,7 @@ BEGIN
MENUITEM "Háttérs&zín", IDM_VIEW_HILITCURLN_BACK
MENUITEM "K&eret", IDM_VIEW_HILITCURLN_FRAME
END
POPUP "Elõ&fordulások jelölése"
POPUP "Elõ&fordulások kiemelése"
BEGIN
MENUITEM "&Aktív\tAlt+A", IDM_VIEW_MARKOCCUR_ONOFF
MENUITEM SEPARATOR

View File

@ -117,7 +117,7 @@ BEGIN
IDS_MUI_OPENWITH "Válassza ki a mappát, ahol a kedvenc alkamazásaira mutató parancsikonok vannak."
IDS_MUI_FAVORITES "Válassza ki a mappát, ahol a kedvenc fájljaira mutató parancsikonok vannak."
IDS_MUI_BACKSLASHHELP "Backslash átalakítások\n\n\\a\tFigyelmeztetés (BEL, Ascii 7)\n\\b\tBackspace (BS, Ascii 8)\n\\f\tLapdobás (FF, Ascii 12)\n\\n\tÚj sor (LF, Ascii 10)\n\\r\tKocsi vissza (CR, Ascii 13)\n\\t\tVízszintes Tab (HT, Ascii 9)\n\\v\tFüggőleges Tab (VT, Ascii 11)\n\\0oo\tOktális érték\n\\u####\tHexadecimális érték\n\\xhh\tHexadecimal Value\n\\\\\tBackslash"
IDS_MUI_REGEXPHELP "RegExp illeszkedés szintaktika (többsoros)\n\n.\tBármilyen karakterre illeszkedik\n^\tÜres szöveg rögtön új sor után\n$\tÜres szöveg közvetlenül a sorvége előtt\n\\<\tSzó kezdete\n\\>\tSzó vége\n\\b\tSzó határa\n[...]\tKarakterek halmaza ([abc]) vagy intervalluma ([a-z])\n[^...]\tKarakterek, amik NINCSENEK a készletben vagy\n\taz intervallumban\n\\d\t10-es számrendszeri szám\n\\D\tNem szám kar.\n\\s\tÜres hely karakterek\n\\S\tNEM üres hely karakter\n\\w\t""szó"" karakterek\n\\W\t""nem-szó"" karakter\n\\x\tEscape karakter egyébként speciális jelentéssel\n\\xHH\tKarakter HH Hexa kóddal\n?\tElőzőre illeszkedik 0-szor vagy 1-szer\n*\tElőzőre illeszkedik 0-szor vagy többször\n+\tElőzőre illeszkedik egyszer vagy többször\n*? or +?\tIsmétlések illeszkedése lomhán ""?"" and ""+""\n(\tRégió kezdete\n)\tRégió vége\n\\n\tCserénél egy régióra hivatkozik (n = 1-9)\n"
IDS_MUI_REGEXPHELP "RegExp illeszkedés szintaktika (többsoros)\n\n.\tBármilyen karakterre illeszkedik\n^\tÜres szöveg rögtön új sor után\n$\tÜres szöveg közvetlenül a sorvége előtt\n\\<\tSzó kezdete\n\\>\tSzó vége\n\\b\tSzó határa\n[...]\tKarakterek halmaza ([abc]) vagy intervalluma ([a-z])\n[^...]\tKarakterek, amik NINCSENEK a készletben vagy az intervallumban\n\\d\t10-es számrendszeri szám\n\\D\tNem szám karakter\n\\s\tÜres hely karakterek\n\\S\tNEM üres hely karakter\n\\w\t""szó"" karakterek\n\\W\t""nem-szó"" karakter\n\\x\tEscape karakter egyébként speciális jelentéssel\n\\xHH\tKarakter HH Hexa kóddal\n?\tElőzőre illeszkedik 0-szor vagy 1-szer\n*\tElőzőre illeszkedik 0-szor vagy többször\n+\tElőzőre illeszkedik egyszer vagy többször\n*? or +?\tIsmétlések illeszkedése lomhán ""?"" and ""+""\n(\tRégió kezdete\n)\tRégió vége\n\\n\tCserénél egy régióra hivatkozik (n = 1-9)\n"
IDS_MUI_WILDCARDHELP "Joker keresés\n\n*\tNulla vagy több karakterre illeszkedik.\n?\tPontosan egy karakterre illeszkedik. "
END
@ -246,7 +246,7 @@ Haszn
Notepad3 \t[/?] [...[kódolás]] [...[sorvég mód]] [/e] [/g] [/m] [/l]\r\n\
\t[/q] [/s] [/d] [/h] [/x] [/c] [/b] [/n] [/r| [/p] [/t] [/i] [/o]\r\n\
\t[/f] [/u] [/v] [/vd] [/y] [/z] [[meghajtó:][útvonal]fájlnév[...]]\r\n\r\n\
fájl\tAz utolsó paraméter kell legyen, alapból nincsenekidézőjelezett szóközök.\r\n\
fájl\tAz utolsó paraméter kell legyen, alapból nincsenek idézőjelezett szóközök.\r\n\
+\tTöbb fájlt is elfogad (idézőjelezett szóközökkel).\r\n\
-\tEgy fájlt fogad el paraméterként (idézőjelezett szóközök nélkül).\r\n\r\n\
Opciók:\r\n\

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Italian (Italy) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "第2 インライン入力時のIME変換"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Japanese (Japan) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME »ö»ó"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Korean (Korea) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Dutch (Netherlands) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Polish (Poland) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Portuguese (Brazil) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "2nd Inline-IME Color"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Russian (Russia) resources

View File

@ -446,6 +446,7 @@ BEGIN
IDS_LEX_STR_63353 "备选:输入法候选文本颜色"
IDS_LEX_STR_63354 "Multi Edit Indicator"
IDS_LEX_STR_63355 "2nd Multi Edit Indicator"
IDS_LEX_STR_63356 "Date-Time"
END
#endif // Chinese (Simplified, PRC) resources

View File

@ -1 +1 @@
"RC"
"Oniguruma"

View File

@ -3,8 +3,8 @@
<assemblyIdentity
name="Notepad3"
processorArchitecture="*"
version="5.19.611.2250"
version="5.19.613.2252"
type="win32"
/>
<description>Notepad3 RC</description>
<description>Notepad3 Oniguruma</description>
</assembly>

View File

@ -27,17 +27,24 @@ constexpr bool IsLineBreak(const int ch) noexcept {
return ((ch == '\n') || (ch == '\r'));
}
inline int IsNumber(const Scintilla::StyleContext& sc) {
return Scintilla::IsADigit(sc.ch) || (((sc.ch == '+') || (sc.ch == '-')) && Scintilla::IsADigit(sc.chNext));
}
constexpr int IsNumHex(const Scintilla::StyleContext& sc) noexcept {
return (sc.chNext == 'x') || (sc.chNext == 'X');
return (sc.ch == '0') && (sc.chNext == 'x') || (sc.chNext == 'X');
}
constexpr int IsNumBinary(const Scintilla::StyleContext& sc) noexcept {
return (sc.chNext == 'b') || (sc.chNext == 'B');
return (sc.ch == '0') && (sc.chNext == 'b') || (sc.chNext == 'B');
}
inline int IsNumOctal(const Scintilla::StyleContext& sc) {
return Scintilla::IsADigit(sc.chNext) || (sc.chNext == 'o');
return (sc.ch == '0') && (sc.chNext == 'o') || (sc.chNext == 'O');
}
inline int IsNumExponent(const Scintilla::StyleContext& sc) {
return Scintilla::IsADigit(sc.ch) && ((sc.chNext == 'e') || (sc.chNext == 'E'));
}
inline bool IsAIdentifierChar(const int ch) {

View File

@ -54,24 +54,6 @@ namespace {
return SCE_TOML_VALUE;
}
inline bool IsFuncName(const char* str) {
const char* identifiers[] = {
"proc",
"func",
"macro",
"method",
"template",
"iterator",
"converter"
};
for (const char* id : identifiers) {
if (strcmp(str, id) == 0) {
return true;
}
}
return false;
}
struct OptionsTOML {
bool fold;
bool foldCompact;
@ -82,8 +64,8 @@ namespace {
}
};
static const char* const tomlWordListDesc[] = {
"TOML",
static const char* const tomlWordListsDesc[] = {
"Keyword",
nullptr
};
@ -93,34 +75,46 @@ namespace {
DefineProperty("fold", &OptionsTOML::fold, "FOLD COMMENT");
DefineProperty("fold.compact", &OptionsTOML::foldCompact, "FOLDCOMPACT COMMENT");
DefineWordListSets(tomlWordListDesc);
DefineWordListSets(tomlWordListsDesc);
}
};
LexicalClass lexicalClasses[] = {
// Lexer TOML SCLEX_TOML SCE_TOML_:
0, "SCE_TOML_DEFAULT", "default", "Default",
1, "SCE_TOML_COMMENT", "comment", "Comment",
2, "SCE_TOML_KEY", "key", "Key",
1, "SCE_TOML_KEYWORD", "keyword", "Keyword",
2, "SCE_TOML_COMMENT", "comment", "Comment",
3, "SCE_TOML_SECTION", "section", "Section",
4, "SCE_TOML_ASSIGNMENT", "assignment", "Assignment",
5, "SCE_TOML_DEFVAL", "default value", "Default Value",
6, "SCE_TOML_VALUETYPE", "value type", "Value Type",
7, "SCE_TOML_PARSINGERROR", "type error", "Type Error",
4, "SCE_TOML_KEY", "key", "Key",
5, "SCE_TOML_ASSIGNMENT", "assignment", "Assignment",
6, "SCE_TOML_VALUE", "value", "Value",
7, "SCE_TOML_NUMBER", "number", "Number",
8, "SCE_TOML_STR_BASIC", "string_basic", "Basic String",
9, "SCE_TOML_STR_LITERAL", "string_basic", "Literal String",
10, "SCE_TOML_PARSINGERROR", "type_error", "Type Error",
};
} // end of namespace
class LexerTOML : public DefaultLexer {
CharacterSet setWord;
CharacterSet validKey;
//CharacterSet validKeyWord;
CharacterSet validNumberEnd;
CharacterSet chDateTime;
WordList keywords;
OptionsTOML options;
OptionSetTOML osTOML;
public:
LexerTOML()
: DefaultLexer(lexicalClasses, ELEMENTS(lexicalClasses))
, setWord(CharacterSet::setAlphaNum, "_", 0x80, true)
, validKey(CharacterSet::setAlphaNum, R"(-_.)", 0x80, false)
//, validKeyWord(CharacterSet::setAlphaNum, "_", 0x80, false)
, validNumberEnd(CharacterSet::setNone, " \t\n\v\f\r#,)}]", 0x80, false)
, chDateTime(CharacterSet::setNone, "-:TZ", 0x80, false)
{ }
virtual ~LexerTOML() { }
@ -169,11 +163,8 @@ public:
// --------------------------------------------------------------------------
Sci_Position SCI_METHOD PropertySet(const char* key, const char* val) override;
Sci_Position SCI_METHOD WordListSet(int n, const char* wl) override;
void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument* pAccess) override;
void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument* pAccess) override;
};
@ -202,7 +193,6 @@ Sci_Position SCI_METHOD LexerTOML::WordListSet(int n, const char* wl)
if (wordListN) {
WordList wlNew;
wlNew.Set(wl);
if (*wordListN != wlNew) {
wordListN->Set(wl);
firstModification = 0;
@ -225,51 +215,117 @@ constexpr bool IsAssignChar(const int ch) noexcept {
}
// ----------------------------------------------------------------------------
inline bool IsAKeyChar(const int ch) {
return (IsAlphaNumeric(ch) || ch == '_');
}
// ----------------------------------------------------------------------------
static int GetBracketLevel(StyleContext& sc)
static int GetBracketLevel(StyleContext& sc, const bool stopAtLnBreak = false)
{
Sci_Position const posCurrent = static_cast<Sci_Position>(sc.currentPos);
bool ignore = false;
int iBracketLevel = -1;
int inInlTbl = 0;
Sci_Position i = 0;
while ((--i + posCurrent) >= 0)
while (((--i + posCurrent) >= 0))
{
if (sc.GetRelative(i) == '"') {
ignore = !ignore; // toggle string
int const ch = sc.GetRelative(i);
if (stopAtLnBreak && IsLineBreak(ch)) {
break;
}
else if (!ignore) {
if (IsAssignChar(sc.GetRelative(i))) {
break; // must be within assignment
}
else if (sc.GetRelative(i) == ']') {
--iBracketLevel;
}
else if (sc.GetRelative(i) == '[') {
++iBracketLevel;
}
if (ch == '}') {
++inInlTbl;
}
else if (ch == '{') {
--inInlTbl;
}
if (IsAssignChar(ch) && (inInlTbl == 0)) {
break; // must be the assignment begin
}
else if (ch == ']') {
--iBracketLevel;
}
else if (ch == '[') {
++iBracketLevel;
}
}
return iBracketLevel;
}
// ----------------------------------------------------------------------------
static bool IsDateTimeStr(StyleContext& sc, const CharacterSet& validCh, const CharacterSet& valEnd)
{
Sci_Position const posCurrent = static_cast<Sci_Position>(sc.currentPos);
Sci_Position const posEnd = static_cast<Sci_Position>(sc.lineStartNext);
Sci_Position i = 0;
bool bDateTimeFlag = false;
while ((++i + posCurrent) < posEnd)
{
int const ch = sc.GetRelative(i);
if (!Scintilla::IsADigit(ch) && !validCh.Contains(ch) && (ch != '.')) {
if (valEnd.Contains(ch)) {
return bDateTimeFlag;
}
else {
return false;
}
}
if (validCh.Contains(ch)) {
bDateTimeFlag = true;
}
}
return bDateTimeFlag;
}
// ----------------------------------------------------------------------------
static bool IsLookAheadLineEmpty(StyleContext& sc)
{
Sci_Position const posCurrent = static_cast<Sci_Position>(sc.currentPos);
Sci_Position const posEnd = static_cast<Sci_Position>(sc.lineStartNext);
Sci_Position i = 0;
bool bLHLineEmpty = true;
while ((++i + posCurrent) < posEnd)
{
int const ch = sc.GetRelative(i);
if (!Scintilla::IsASpace(ch)) {
if (IsCommentChar(ch)) {
break; // ignore rest of line
}
bLHLineEmpty = false;
break;
}
}
return bLHLineEmpty;
}
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
void SCI_METHOD LexerTOML::Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument* pAccess)
{
Accessor styler(pAccess, nullptr);
StyleContext sc(startPos, length, initStyle, styler);
bool inSQuotedKey = false;
bool inDQuotedKey = false;
bool inInnerQKey = false;
bool inSectionDef = false;
bool inMultiLnString = (sc.state == SCE_TOML_STRING);
bool inMultiLnArrayDef = (sc.state == SCE_TOML_ARRAY);
bool inMultiLnString = (sc.state == SCE_TOML_STR_BASIC) || (sc.state == SCE_TOML_STR_LITERAL);
bool inMultiLnArrayDef = false;
bool inHex = false;
bool inBin = false;
bool inOct = false;
for (; sc.More(); sc.Forward())
{
@ -278,23 +334,26 @@ void SCI_METHOD LexerTOML::Lex(Sci_PositionU startPos, Sci_Position length, int
// check if in the middle of a line continuation ...
// --------------------------------------------------
if (sc.atLineStart) {
inMultiLnArrayDef = (GetBracketLevel(sc) >= 0);
inSQuotedKey = inDQuotedKey = inInnerQKey = false; // clear
switch (sc.state)
{
case SCE_TOML_STRING:
case SCE_TOML_STR_BASIC:
case SCE_TOML_STR_LITERAL:
if (!inMultiLnString) {
sc.SetState(SCE_TOML_PARSINGERROR);
}
break;
case SCE_TOML_ARRAY:
if (!inMultiLnArrayDef) {
sc.SetState(SCE_TOML_PARSINGERROR);
}
case SCE_TOML_ASSIGNMENT:
sc.SetState(SCE_TOML_PARSINGERROR);
break;
case SCE_TOML_PARSINGERROR:
// preserve error
break;
default:
sc.SetState(SCE_TOML_DEFAULT); // reset
if (!inMultiLnArrayDef) {
sc.SetState(SCE_TOML_DEFAULT); // reset
}
break;
}
}
@ -339,21 +398,35 @@ void SCI_METHOD LexerTOML::Lex(Sci_PositionU startPos, Sci_Position length, int
sc.SetState(SCE_TOML_SECTION);
inSectionDef = true;
}
else if (IsAKeyChar(sc.ch)) {
else if (validKey.Contains(sc.ch)) {
sc.SetState(SCE_TOML_KEY);
}
else {
sc.SetState(SCE_TOML_PARSINGERROR);
else { // not valid - maybe quoted
if (sc.ch == '"') {
inDQuotedKey = true;
sc.SetState(SCE_TOML_KEY);
}
else if (sc.ch == '\'') {
inSQuotedKey = true;
sc.SetState(SCE_TOML_KEY);
}
else {
sc.SetState(SCE_TOML_PARSINGERROR);
}
}
break;
case SCE_TOML_COMMENT:
// eat - rest of line is comment
break;
case SCE_TOML_SECTION:
if (sc.ch == ']') {
inSectionDef = false;
if (GetBracketLevel(sc, true) == 0) {
inSectionDef = false;
}
}
else if (IsCommentChar(sc.ch)) {
if (!inSectionDef) {
@ -365,24 +438,65 @@ void SCI_METHOD LexerTOML::Lex(Sci_PositionU startPos, Sci_Position length, int
}
break;
case SCE_TOML_KEY:
if (IsASpaceOrTab(sc.ch)) {
sc.SetState(SCE_TOML_ASSIGNMENT); // end of key
if ((sc.ch == '"') && inDQuotedKey) {
if (inInnerQKey) {
sc.SetState(SCE_TOML_PARSINGERROR);
}
else {
sc.ForwardSetState(SCE_TOML_ASSIGNMENT); // end of key
}
}
else if ((sc.ch == '\'') && inSQuotedKey) {
if (inInnerQKey) {
sc.SetState(SCE_TOML_PARSINGERROR);
}
else {
sc.ForwardSetState(SCE_TOML_ASSIGNMENT); // end of key
}
}
else if (IsASpaceOrTab(sc.ch)) {
if (!(inSQuotedKey || inDQuotedKey || inInnerQKey)) {
sc.SetState(SCE_TOML_ASSIGNMENT); // end of key
}
// else eat
}
else if (IsAssignChar(sc.ch)) {
sc.SetState(SCE_TOML_ASSIGNMENT);
if (!(inSQuotedKey || inDQuotedKey || inInnerQKey)) {
sc.SetState(SCE_TOML_ASSIGNMENT);
}
// else eat
}
else if (!IsAKeyChar(sc.ch)) {
sc.SetState(SCE_TOML_PARSINGERROR);
else if (validKey.Contains(sc.ch)) {
// eat
}
else {
if ((sc.ch == '"') && inSQuotedKey) {
inInnerQKey = !inInnerQKey; //toggle
}
else if ((sc.ch == '\'') && inDQuotedKey) {
inInnerQKey = !inInnerQKey; //toggle
}
else if (!(inSQuotedKey || inDQuotedKey || inInnerQKey)) {
sc.SetState(SCE_TOML_PARSINGERROR);
}
// else eat
}
break;
case SCE_TOML_ASSIGNMENT:
if (IsAssignChar(sc.ch)) {
sc.ForwardSetState(SCE_TOML_VALUE);
if (!IsLookAheadLineEmpty(sc)) {
sc.ForwardSetState(SCE_TOML_VALUE);
}
else {
sc.SetState(SCE_TOML_PARSINGERROR);
}
// fall through case SCE_TOML_VALUE:
}
else if (IsASpaceOrTab(sc.ch)) {
else if (IsASpace(sc.ch)) {
break; // OK
}
else {
@ -393,48 +507,11 @@ void SCI_METHOD LexerTOML::Lex(Sci_PositionU startPos, Sci_Position length, int
case SCE_TOML_VALUE:
if (sc.ch == '[') {
sc.SetState(SCE_TOML_ARRAY);
inMultiLnArrayDef = true;
}
else if (sc.ch == ']') {
sc.SetState(SCE_TOML_PARSINGERROR);
}
else if (sc.ch == '"') {
sc.SetState(SCE_TOML_STRING);
if (sc.Match(R"(""")")) {
inMultiLnString = true;
sc.Forward(2);
}
}
break;
case SCE_TOML_STRING:
if (sc.ch == '\\') {
sc.ForwardSetState(SCE_TOML_STRING);
}
else if (sc.ch == '"') {
if (!inMultiLnString) {
sc.ForwardSetState(SCE_TOML_VALUE);
}
else {
// inMultiLnString
if (sc.Match(R"(""")")) {
sc.Forward(2);
sc.ForwardSetState(SCE_TOML_VALUE);
inMultiLnString = false;
}
else {
sc.SetState(SCE_TOML_PARSINGERROR);
}
}
}
break;
case SCE_TOML_ARRAY:
if (sc.ch == ']') {
int const level = GetBracketLevel(sc);
if (level == 0) {
sc.ForwardSetState(SCE_TOML_VALUE);
inMultiLnArrayDef = false;
}
else if (level < 0) {
@ -442,20 +519,158 @@ void SCI_METHOD LexerTOML::Lex(Sci_PositionU startPos, Sci_Position length, int
inMultiLnArrayDef = false;
}
}
else if (IsNumber(sc)) {
if (IsDateTimeStr(sc, chDateTime, validNumberEnd)) {
sc.SetState(SCE_TOML_DATETIME);
}
else {
sc.SetState(SCE_TOML_NUMBER);
if ((sc.ch == '+') || (sc.ch == '-')) {
sc.Forward();
}
inHex = IsNumHex(sc);
inBin = IsNumBinary(sc);
inOct = IsNumOctal(sc);
if (inHex || inBin || inOct) {
sc.Forward(2);
}
if (IsNumExponent(sc)) {
sc.Forward(2);
if ((sc.ch == '+') || (sc.ch == '-')) {
sc.Forward();
}
}
}
}
else if (sc.ch == '"') {
sc.SetState(SCE_TOML_STR_BASIC);
if (sc.Match(R"(""")")) {
inMultiLnString = true;
sc.Forward(2);
}
}
else if (sc.ch == '\'') {
sc.SetState(SCE_TOML_STR_LITERAL);
if (sc.Match(R"(''')")) {
inMultiLnString = true;
sc.Forward(2);
}
}
break;
case SCE_TOML_PARSINGERROR:
// still parsing error until new line
case SCE_TOML_NUMBER:
if (sc.ch == '_') {
// eat // TODO: only once
}
else if (inHex || inBin || inOct) {
if (validNumberEnd.Contains(sc.ch)) {
sc.SetState(SCE_TOML_VALUE);
inHex = false;
inBin = false;
inOct = false;
}
else {
if ((inHex && !IsADigit(sc.ch, 16)) ||
(inBin && !IsADigit(sc.ch, 2)) ||
(inOct && !IsADigit(sc.ch, 8)))
{
sc.SetState(SCE_TOML_PARSINGERROR);
}
}
}
else if (IsNumExponent(sc)) {
sc.Forward();
if ((sc.chNext == '+') || (sc.chNext == '-')) {
sc.Forward();
}
}
else if (sc.ch == '.') {
// eat // TODO: only once
}
else if (IsADigit(sc.ch)) {
// eat
}
else {
if (validNumberEnd.Contains(sc.ch)) {
sc.SetState(SCE_TOML_VALUE);
inHex = false;
inBin = false;
inOct = false;
}
else {
sc.SetState(SCE_TOML_PARSINGERROR);
}
}
break;
case SCE_TOML_DATETIME:
if (!IsADigit(sc.ch) && !chDateTime.Contains(sc.ch) && (sc.ch != '.')) {
if (validNumberEnd.Contains(sc.ch)) {
sc.SetState(SCE_TOML_VALUE);
}
else {
sc.SetState(SCE_TOML_PARSINGERROR);
}
}
break;
case SCE_TOML_STR_BASIC:
case SCE_TOML_STR_LITERAL:
if (sc.ch == '"') {
if (sc.state == SCE_TOML_STR_BASIC) {
if (sc.chPrev != '\\') {
if (!inMultiLnString) {
sc.ForwardSetState(SCE_TOML_VALUE);
}
else {
// inMultiLnString
if (sc.Match(R"(""")")) {
sc.Forward(2);
sc.ForwardSetState(SCE_TOML_VALUE);
inMultiLnString = false;
}
}
}
}
}
else if (sc.ch == '\'') {
if (sc.state == SCE_TOML_STR_LITERAL) {
if (!inMultiLnString) {
sc.ForwardSetState(SCE_TOML_VALUE);
}
else {
// inMultiLnString
if (sc.Match(R"(''')")) {
sc.Forward(2);
sc.ForwardSetState(SCE_TOML_VALUE);
inMultiLnString = false;
}
}
}
}
break;
case SCE_TOML_PARSINGERROR:
// keep parsing error until new line
break;
default:
sc.SetState(SCE_TOML_PARSINGERROR); // unknown
break;
}
//if (sc.atLineEnd) {
// // ---
//}
//~if (sc.atLineEnd) {
//~ if (!inMultiLnArrayDef && !inMultiLnString) {
//~ if (sc.state == SCE_TOML_VALUE) {
//~ sc.ForwardSetState(SCE_TOML_DEFAULT);
//~ }
//~ }
//~}
}
sc.Complete();
@ -550,7 +765,7 @@ void SCI_METHOD LexerTOML::Fold(Sci_PositionU startPos, Sci_Position length, int
}
// ----------------------------------------------------------------------------
LexerModule lmTOML(SCLEX_TOML, LexerTOML::LexerFactoryTOML, "toml", tomlWordListDesc);
LexerModule lmTOML(SCLEX_TOML, LexerTOML::LexerFactoryTOML, "toml", tomlWordListsDesc);
// ----------------------------------------------------------------------------

View File

@ -43,14 +43,17 @@
#define SCE_TOML_DEFAULT 0
#define SCE_TOML_COMMENT 1
#define SCE_TOML_SECTION 2
#define SCE_TOML_KEY 3
#define SCE_TOML_ASSIGNMENT 4
#define SCE_TOML_VALUE 5
#define SCE_TOML_STRING 6
#define SCE_TOML_ARRAY 7
#define SCE_TOML_PARSINGERROR 8
#define SCE_TOML_KEYWORD 1
#define SCE_TOML_COMMENT 2
#define SCE_TOML_SECTION 3
#define SCE_TOML_KEY 4
#define SCE_TOML_ASSIGNMENT 5
#define SCE_TOML_VALUE 6
#define SCE_TOML_NUMBER 7
#define SCE_TOML_DATETIME 8
#define SCE_TOML_STR_BASIC 9
#define SCE_TOML_STR_LITERAL 10
#define SCE_TOML_PARSINGERROR 11
#endif //_SCIXLEXER_H_

View File

@ -8326,7 +8326,6 @@ void EditFoldPerformAction(DocLn ln, int mode, FOLD_ACTION action)
else {
fToggled = _FoldToggleNode(ln, action);
}
if (fToggled) { SciCall_ScrollCaret(); }
}

View File

@ -3163,7 +3163,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
i == SCLEX_SQL || i == SCLEX_PERL || i == SCLEX_PYTHON || i == SCLEX_PROPERTIES ||i == SCLEX_CONF ||
i == SCLEX_POWERSHELL || i == SCLEX_BATCH || i == SCLEX_DIFF || i == SCLEX_BASH || i == SCLEX_TCL ||
i == SCLEX_AU3 || i == SCLEX_LATEX || i == SCLEX_AHKL || i == SCLEX_RUBY || i == SCLEX_CMAKE || i == SCLEX_MARKDOWN ||
i == SCLEX_YAML || i == SCLEX_REGISTRY || i == SCLEX_NIMROD) && !ro);
i == SCLEX_YAML || i == SCLEX_REGISTRY || i == SCLEX_NIMROD || i == SCLEX_TOML) && !ro);
EnableCmd(hmenu, CMD_CTRLENTER, !ro);
EnableCmd(hmenu, IDM_EDIT_INSERT_TAG, !ro);
@ -4573,6 +4573,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case SCLEX_YAML:
case SCLEX_COFFEESCRIPT:
case SCLEX_NIMROD:
case SCLEX_TOML:
EditToggleLineComments(Globals.hwndEdit, L"#", true);
break;
case SCLEX_ASM:
@ -4636,6 +4637,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case SCLEX_JSON:
case SCLEX_REGISTRY:
case SCLEX_NIMROD:
case SCLEX_TOML:
break;
case SCLEX_HTML:
case SCLEX_XML:

View File

@ -4,7 +4,7 @@
//KEYWORDLIST KeyWords_TOML = EMPTY_KEYWORDLIST;
KEYWORDLIST KeyWords_TOML = {
"Keyword",
"false inf nan table true", // Keyword
"", "", "", "", "", "", "", "" };
@ -13,11 +13,14 @@ SCLEX_TOML, IDS_LEX_TOML_CFG, L"TOML Config", L"toml", L"",
&KeyWords_TOML,{
{ {STYLE_DEFAULT}, IDS_LEX_STR_63126, L"Default", L"", L"" },
//{ {SCE_TOML_DEFAULT}, IDS_LEX_STR_63126, L"Default", L"", L"" },
{ {SCE_TOML_KEYWORD}, IDS_LEX_STR_63128, L"Keyword", L"fore:#E00000", L"" },
{ {SCE_TOML_COMMENT}, IDS_LEX_STR_63127, L"Comment", L"fore:#008000", L"" },
{ {SCE_TOML_SECTION}, IDS_LEX_STR_63232, L"Section", L"bold; fore:#000000; back:#FFF1A8; eolfilled", L"" },
{ {SCE_TOML_KEY}, IDS_LEX_STR_63348, L"Key", L"bold; fore:#5E608F", L"" },
{ {SCE_TOML_ASSIGNMENT}, IDS_LEX_STR_63233, L"Assignment", L"bold; fore:#FF2020", L"" },
{ {SCE_TOML_VALUE}, IDS_LEX_STR_63201, L"Value", L"fore:#202020", L"" },
{ {SCE_TOML_STRING}, IDS_LEX_STR_63131, L"String", L"italic; fore:#800000", L"" },
{ {SCE_TOML_NUMBER}, IDS_LEX_STR_63130, L"Number", L"fore:#0000E0", L"" },
{ {SCE_TOML_DATETIME}, IDS_LEX_STR_63356, L"Date-Time", L"fore:#950095", L"" },
{ {MULTI_STYLE(SCE_TOML_STR_BASIC, SCE_TOML_STR_LITERAL,0,0)}, IDS_LEX_STR_63131, L"String", L"italic; fore:#800000", L"" },
{ {SCE_TOML_PARSINGERROR}, IDS_LEX_STR_63252, L"Parsing Error", L"fore:#FFFF00; back:#A00000", L"" },
EDITLEXER_SENTINEL } };

View File

@ -68,7 +68,7 @@
#if defined(_MSC_VER)
#if (_MSC_VER >= 1920)
#if(_MSC_FULL_VER >= 192127702)
#define VER_CPL MS Visual C++ 2019 v16.1.(0-2)
#define VER_CPL MS Visual C++ 2019 v16.1.(0-3)
#elif(_MSC_FULL_VER >= 192027508)
#define VER_CPL MS Visual C++ 2019 v16.0.(0-4)
#elif(_MSC_FULL_VER >= 192027027)

View File

@ -7,8 +7,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
#define VERSION_REV 611
#define VERSION_BUILD 2250
#define VERSION_REV 613
#define VERSION_BUILD 2252
#define SCINTILLA_VER 416
#define ONIGMO_REGEX_VER 6.2.0
#define VERSION_PATCH RC
#define ONIGURUMA_REGEX_VER 6.9.2
#define VERSION_PATCH Oniguruma

142
test/txtfiles/AHKL.ahk Normal file
View File

@ -0,0 +1,142 @@
; =============================================================================
; Regression Tests Notepad3 Gui
; Needs files in a Test Directory:
; Notepad3.exe and Notepad3.ini (from distrib)
; Execute: AutoHotkeyU32.exe "TestAhkNotepad3.ahk"
; =============================================================================
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetBatchLines, -1
StringCaseSense, Off
CoordMode, Pixel, Screen
; =============================================================================
v_NP3Name = Notepad3
v_NP3TestDir = %A_WorkingDir%\_TESTDIR
v_NP3IniFile = %v_NP3Name%.ini
stdout := FileOpen("*", "w")
v_ExitCode := 0
; =============================================================================
Run, %v_NP3TestDir%/%v_NP3Name%.exe %v_NP3TestDir%/%v_NP3IniFile%, , UseErrorLevel, v_Notepad3_PID
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
{
stdout.WriteLine("*** ERROR: " . v_NP3Name . "could not be launched.")
v_ExitCode := 1
Goto LABEL_END
}
; -----------------------------------------------------------------------------
GoSub CHECK_NP3_STARTS
Sleep, 500
GoSub CHECK_WIN_TITLE
Sleep, 500
GoSub CHECK_ABOUT_BOX
Goto LABEL_END
; =============================================================================
; =============================================================================
CHECK_NP3_STARTS:
; check that NP3 starts up
WinWait ahk_pid %v_Notepad3_PID%, , 10
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
{
stdout.WriteLine("*** ERROR: " . v_NP3Name . "'s seems not to start in time ???")
v_ExitCode := 2
Goto LABEL_END
}
Return
; =============================================================================
; =============================================================================
CHECK_WIN_TITLE:
; check Main Window Title
WinGetTitle, v_NP3Title, ahk_pid %v_Notepad3_PID%
IfNotInString, v_NP3Title, %v_NP3Name%
{
v_ExitCode := 3
stdout.WriteLine("*** ERROR: " . v_NP3Name . " missing in Title: " . v_NP3Title)
}
IfNotInString, v_NP3Title, %v_NP3IniFile%
{
v_ExitCode := 3
stdout.WriteLine("*** ERROR: " . v_NP3IniFile . " missing in Title: " . v_NP3Title)
}
IfNotInString, v_NP3Title, %v_NP3TestDir%
{
v_ExitCode := 3
stdout.WriteLine("*** ERROR: " . v_NP3TestDir . " missing in Title: " . v_NP3Title)
}
If (v_ExitCode != 0)
{
Goto LABEL_END
}
Return
; =============================================================================
; =============================================================================
CHECK_ABOUT_BOX:
; check About DlgBox
WinActivate, ahk_pid %v_Notepad3_PID%
; This will select File->Open in Notepad:
WinMenuSelectItem, ahk_pid %v_Notepad3_PID%, , Help, About...
WinWait, About %v_NP3Name%, , 3
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
{
v_ExitCode := 4
stdout.WriteLine("*** ERROR: " . v_NP3Name . "'s About Box is not displayed!")
Goto LABEL_END
}
WinActivate ; About Box
;ControlFocus, OK, About %v_NP3Name%
ControlClick, OK, About %v_NP3Name%
;Send {Enter}
WinWaitClose, About %v_NP3Name%, , 2
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
{
v_ExitCode := 5
stdout.WriteLine("*** ERROR: " . v_NP3Name . "'s About Box can not be closed!")
Goto LABEL_END
}
Return
; =============================================================================
; =============================================================================
LABEL_END:
WinClose ahk_pid %v_Notepad3_PID%, , 2
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
{
v_ExitCode := 99
stdout.WriteLine("*** ERROR: " . v_NP3Name . "can not be closed!")
}
; -------------------------------------
WinWaitClose ahk_pid %v_Notepad3_PID%
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
{
v_ExitCode := 111
; FORCED Kill / HANGUP
}
; -------------------------------------
if (v_ExitCode != 0)
{
stdout.WriteLine("*** ERROR: Testing " . v_NP3Name . " exit with: " . v_ExitCode)
ExitApp, %v_ExitCode%
}
stdout.WriteLine("Testing " . v_NP3Name . ": All tests PASSED.")
ExitApp, 0
; =============================================================================

View File

@ -0,0 +1,12 @@
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
있을 것이다. 우선 인력 물적교류가 없이 기술교류가 Ю
있을 것이다. 우선 인력 물적교류가 없이 기술교류가 Ю
있을 것이다. 우선 인력 물적교류가 없이 기술교류가 Ю
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
п я р с т у Я ж в ь ы з ш э щ ч ъ Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О

View File

@ -0,0 +1,12 @@
привет
и
го
ко
ск
ст
привет
привет
привет
привет
привет
привет

View File

View File

@ -0,0 +1,41 @@
ワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワワ
ロロロロロロロ ロロロロロロ ロロロロロロロロロ ロロロロロロロワ ロロロロ ロロロ ロロロロ ロロロロ ロロロロロロ
ロロロロロロロロワ ロロロロロロ ロロロロロロロロロ ロロロロロロロロワ ロロロロ ロイ ロロロロ ロロロロ ロロロロロロ
ロロロロロロロロロ ロロロロロロ ゚゚゚゚゚ロロロロ ロロロロロロロロロ ロロロロ ロア ロ ロロロロロ ロロロロ ロロロロロロ
ロロロロ ロロロロ ロロロロ ロロロロ ロロロロ ロロロロ ロロロロ ゚ ゚゚ ロロロロロロロロロロ ロロロロ
ロロロロ ロロロロ ロロロロ ロロロロ ロイロロ ロロロロ ロロロロ ロロロロ ロロロロ ロロロロロロロロロロ ロロロロ
ロロロロ ロロロロ ロロイロ ロロロロ ロアイロ ロロロロ ロロイロ ロロロロ ロロロロ ロロロロロロロロロロ ロロロロ
ロロイロ ロロイロ ロロイロ ロロロロ ローイロ ロロイロ ロロイロ ロイイロ ロロロロ ロロイロロロイイイロ ロイイロ
ロイイロ ロイイロ ロイイロロロ ロロイロワローイロ ロイイロ ロイアロ ロイイロ ロイロロ ロイイロ ロイアイロ ロイイロロロ
ロイイロ ロイアロ ロイアアロロ ロロイイイイイイロ ロイイロ ロイアロ ロイイロ ロイロロ ロイイロ イアイロ ロイアアロロ
ロイアロ ロイアロ ロアアロ゚゚ ロイイロ゚ロロイロ ロイアロ ロイアロ ロアアロ ロアイロ ロイアロ イーアロ ロアアロ゚゚
ロアアロ ロアアロ ロアアロ ロイアロ ロロアロ ロアアロ ロアーロ ロアアロ ロアアロ ロアアロ ロイアロ ロアアロ
ロアアロ ロアーロ ロアアロ ロアアロ ロイアロ ロアアロ ロアーロ ロアーロ ローアロ ロアーロ ロイーロ ロアアロ
ロアーロ ロアーロ ローーロ ロアアロ ロアアロ ロアーロ ロアーロ ロアーロ ローーロ ロアーロ ロアーロ ローーロ
ローーロ ローーロ ローーロ ロアーロ ローーロ ローーロ ローーロ ローーロ ロ ーロ ローーロ ロアーロ ローーロ
ローーロ ローーロ ローーロ ローーロ ローーロ ローーロ ロー ロ ローーロ ゚゚゚゚ ローーロ ローーロ ローーロ
ローーロワローーロ ローーロワワ ローーロ ロ ーロ ローーロワロー ロ ローー゚゚゚゚゚ロ ローーロ ローーロ ロ ーロワワ
ロー ロ゚ ロ ーアロロ ロ ーロ ロ ーロ ロー ワ゚ ロ ロ ロー ロ ロー ロ ロ ーアロロ
゚゚゚゚゚゚゚ ゚゚゚゚゚゚ ゚゚゚゚ ゚゚゚゚ ゚゚゚゚゚゚゚゚ ゚゚゚゚゚゚゚゚゚ ゚゚゚゚ ゚゚゚゚ ゚゚゚゚゚゚
D E A D L i N E
NODE I : 416-xxx-xxxx (USR. 28.8k Dual Standard)
NODE II : 416-xxx-xxxx (USR. 28.8k Dual Standard)
NODE III : 416-xxx-xxxx (USR. 28.8k Dual Standard)
0-2 Days OnLy, 4.8 GIG ONLINE!
PCB V15.1 CUSTOMIZED!
Sysop : Lover Boy
Management Sysop : Violent Soldier
File-Co-Sysop : Urlord; Maverick; John Lennon
File-Support : Sidewinder
PPe/Hacker Co. : The File Pullutor
AnSi Artist : Wolffy Boy
Distribution Sites : (CAN.) TVB, CAE, CIA, TSC, DEATH
(H.K.) SAMUEL WORKS!, NICE BBS!
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚

View File

@ -0,0 +1,23 @@
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
*RiNgDoWn* DOMINATORS WHQ +45 39-660-609! *RiNgDoWn*
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
ノヘヘヘヘヘヘヘサ ノヘヘヘヘヘヘヘサ ノヘヘヘヘヘヘヘヘサ ノヘヘヘヘヘヘヘヘサ ノヘヘサ ノヘヘサ ノヘヘサ ノヘヘヘヘヘヘヘヘヘヘヘヘサ
ネヘヘヘヘサ コ ネヘヘヘヘヘヘヘシ ネヘヘヘヘヘサ コ ネヘヘヘヘヘヘヘヘシ ネヘヘシ コ コ コ コ コ ノヘヘヘヘヘヘサ コ
ノヘヘサ コ コ ノヘヘヘヘヘヘサ ノヘヘサ コ コ ノヘヘサ ノヘヘサ コ コ コ コ コ コ ノヘヘサ コ コ
コ ネヘシ コ コ ノヘヘヘシ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ
コ ノヘヘヘヘシ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ コ
コ コ コ ネヘヘヘヘサ コ コ コ コ コ コ コ コ コ ネヘヘシ コ コ コ コ コ コ コ
ネヘヘシ ネヘヘヘヘヘヘヘシ ネヘヘシ ネヘヘシ ネヘヘシ ネヘヘシ ネヘヘヘヘヘヘヘヘシ ネヘヘシ ネヘヘシ ネヘヘシ
The Next Generation of WareZ!
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
*RiNgDoWn* DOMINATORS WHQ +45 39-660-609! *RiNgDoWn*
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Sysop: MAGIC
Node 1 - 16K8 Dual! --^^RINGDOWN^^-- Node 2 - 16K8 Dual!
Node 3 - Dominators PRIVATE
DOMINATORS WORLD HQ!
TRSI/FAITH DANISH HQ
Nup: SHITFACE

189
test/txtfiles/NFO/jerry.nfo Normal file
View File

@ -0,0 +1,189 @@
ÜÜÜÛÛÛÛÛÛÛÛÛÜÜÜÜÜÜÜ
ÜÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜ
ÜÜÛÛÛÛÛÜß ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜ
ÜÛÛÛÛÛÛÛÛ ÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ
ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ
ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ßßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßßßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ßÛÛÛÛÛÛÛÛÛÛÛÛß ßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÜÛÛÛ Ý ÛÛÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßÜÜÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÜÜÛÛÛÛ Þ ÛÛÛÛÛÛÛÛÜÜ ÜÛÛÛÛÛÛÛÛÛÛÛÛßßÛÜÛÛÛÛÛÞÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÝ Þ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßÜÛÛÜßÛÛÛÛÝÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÜÛÜÛÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÞÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛß ßÛÛÛÛÛÛÛÛÛß ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÞÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜ ßßÛÛÛß ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÝÛÛÛßÛÛÛÛÛÛÞÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÜßÛÛÛÛÛÛÛÛÛÛ ÜÜÜÜ
ÞÛß ßÛÝßÛÛÝÛÛÛÛÛß ÛÛÝÛÛÛÛÝ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛß ÜÛÛÛÛÛß ÜÜÛ
ß ß ß ßß ßÛß ÜÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛß ÜÛÛÛÛß ÜÛÛÛÛ
Üßß ÜÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛßßÜÜÛÛÛÛÛß ÜÛÛÛÛßß
ß ÜÛÛÛÛÛÛÛÛÛÛÛÛÛ ßßßÜÜÛÛÛÛÛÛßß ÜÜÛÛÛÛß
ÜÛÛÜÛÛÜ ÜÛÝÜÜ Ü ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜÛÛÛÛÛÛß ÜÜÛ
ßÛÛÞÛÛÛÝÞÛÛÞÛÛÝ ÛÛÞÜ ÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛß ßßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÛÛÛÛÛ
ßÛÛÛÛÛÛÜÛÛÛÛÛÜÞÛÜÛÛÛÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßß ßß ßÛÛÛÛÛÛÛßÛÛÛÛÛÛÛÛÛÛÛ
ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛß ÜÜÜßßÜßÛÛÛÛÛÛßÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛß ÜÛÛÛÛÛÛß ßß ßÛÛßÜ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßß ÜÛÛÛÛÛÛß ÜÛÜÜÛÜ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßßß ÛÛÛÛÛÛÛ ÜÛÛÛÛÛÛß
ßÛÛßßÛÛÛÛÛÛÛÛÛÛÛßß ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ
ßßÛÛÛßß ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ
-ZED NITRO/DEAD WEIGHT-
°°°°±±²²Ü °°°°±±²²Û °°°°±±²²Ü °°°°±±²²Ü
°°±±²² ÛÛ °°±±²²ÜÜ °°±±²²ÜÛÛ °°±±²² ÛÛ
±±²²ÛÛ ÛÛ ±±²²ÛÛ ±±²²ÛÛ ÛÛ ±±²²ÛÛ ÛÛ
Ä ÄÄ ÄÄÄ Ä²²ÛÛÛÛÄÛÛIJ²ÛÛÛÛÄÄÄIJ²ÛÛÛÛÄÛÛIJ²ÛÛÛÛÄÛÛÄ ÄÄÄ ÄÄ Ä
Ä ÄÍ ÍÍ ÛÛÛÛÛÛÍÛÛÍÛÛÛÛÛÛÍÍÍÍÛÛÛÛÛÛÍÛÛÍÛÛÛÛÛÛÍÛÛ ÍÍ ÍÄ Ä
ÛÛÛÛÛÛÛÛß ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛ ÛÛÛÛÛÛÛÛß
ÜÜÜÜ ÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜ
²ÛÛ² ²ÛÛ² ²ÛÛÛÛÛÛÛÛ² ²ÛÛ² ²ÛÛÛÛÛÛÛÛÛ ²ÛÛ² ²ÛÛ² ²ÛÛÛÛÛÛÛÛ²
±²²± ±²²± ±²²±ßßßßßß ±²²± ±²²±ßßßßßß ±²²± ±²²± ßßß±²²±ßßß
°±±° °±±° °±±° °±±° °±±° °±±° °±±° °±±°
°°°° °°°° °°°°ÜÜÜÜ °°°° °°°° ÜÜÜÜÜ °°°°Üܰ°°° °°°°
° ° ° ° ° Û ° ° ° ° Û Û ° ° ° ° ° °
ÛÛ ÛÛ ÛÛ ßßßß ÛÛ ÛÛ ßßÛÛ ÛÛ ßß ÛÛ ÛÛ
°²²°ÜÛܰ²²° °²²° °²²° °²²° °²²° °²²° °²²° °²²°
±±±±±±±±±±± ±±±±ÜÜÜÜÜÜ ±±±± ±±±±Üܱ±±± ±±±± ±±±± ±±±±
²°°°°ß°°°°² ²°°°°°°°°² ²°°² ²°°°°°°°°² ²°°² ²°°² ²°°²
ßßßß ßßßß ßßßßßßßßßß ßßßß ßßßßßßßßßß ßßßß ßßßß ßßßß
Ü ° Ü Ü ÜÜ ÜÜÜ ÜÜÜÜÜÜÜÜÜÜÛ DEAD WEIGHT Present ÛÜÜÜÜÜÜÜÜÜÜ ÜÜÜ ÜÜ Ü Ü ° Ü
± ±
² Product...< Tom and Jerry Arcade From Hi Tech Expression > ²
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Released..< 6/29/93 > Rating....< 4/10 > Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Supplier..< Parity Error > Packaged..< Parity Error > Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Disk/Kb...< 1 Disk / 200 K > Cracker...< None Needed > Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û GrafX Support: [x] EGA [x] VGA [ ] SVGA [ ] Windows [ ] None Û
Û Sound Support: [x] Beeper [x] Adlib [x] Sblaster [x] Roland [ ] None Û
Û Û
ß ßßß ß ß ßß ßßß ßßßßß ßßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßß ßßßß ßßß ßß ß ß ßßß ß
² ²
± ±
° °
ÚİÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[ Release Note ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ± ³
³ ² From the makers of Rollerblade Racer. It is an arcade game based ³
³ Û upon the Tom and Jerry cartoon series. It is a nintendo like ° ³
³ Û horizontal movement game where you collect hearts and all that, ± ³
³ Û just like all those nintendo games. Anyway, will put out docs for it ² ³
³ Û shortly. ² ³
³ Û ² ³
ÀÄÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛÄÙ
ßßßÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛßßß
Û Greetings goes to: FaCeLeSS, Dr. Detergent Û
: ² Group Greets to: Razor 1911, THG, TDT, Skillion, Public Enemy ² :
| ± Courier Groups: SWAT, United couriers, Exodus, Malice ± |
ÀİÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄİÄÙ
Ü ° Ü Ü ÜÜ ÜÜÜ ÜÜÜÜÜÜÜÛ D.E.A.D W.E.I.G.H.T ÛÜÜÜÜÜÜÜÜÜ ÜÜÜ ÜÜ Ü Ü ° Ü
± ±
² Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[ SR.STAFF ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä ²
Û Û
Û Capt Bligh , Parity Error Û
Û Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[ MEMBERS ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Û
Û Boba Fett , Dark Spectre , Fletch , Neuro Basher Û
Û Sir Real , Stingray , Tank , Zed Nitro Û
Û Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄ[ Courier Coordinator ]ÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Û
Û General Protocol, CyberChrist Û
Û Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[ COURIERS ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Û
Û Dark Spyre, Loki, Lord Cyric, The Invid, Blackie Û
Û Dealer, Kinky o Nepal, Keef Steel, Black Widow Û
Û NightShade, StormBlade, Weapon X, The Cardinal Û
Û Der Schatten, MEGA, The Plague, Maniac, Sonic, Sox Û
Û Û
ß ßßß ß ß ßß ßßß ßßßßß ßßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßß ßßßß ßßß ßß ß ß ßßß ß
² ²
± ±
° °
ÚİÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[ DEAD WEIGHT BOARDS ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄİĿ
³ ± Name Number w/Nodes Sysop(s) Position ± ³
ÀIJÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄIJÄÙ
ßßßÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛßßß
Û [ All HQs ] Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ ÄÄÄ ÄÄ Ä Ä Û
Û THE BOUNTY ³ XXX-XXX-XXXX ³ 1 ³ Capt Bligh ³ WORLD HQ Û
: ² METAL ADDICTION ³ 514-XXX-XXXX ³ 1 ³ Zed Nitro ³ CANADIAN HQ ² :
| ± STREET SPYDRS ³ 713-XXX-XXXX ³ 4 ³ Maverick ³ COURIER HQ ± |
| ± UNDERGROUND PUB ³ +358-X-XXXXXX ³ 1 ³ Kinky o Nepal ³ FINLAND HQ ± |
ÃİÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄİĴ
³ [ MEMBER BOARDS ] ³
ÃÄ Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄ ÄÄÄ ÄÄ Ä Ä´
³ Distant Lands ³ 613-XXX-XXXX ³ 1 ³ General Prot. ³ Member Board ³
³ Ride The Ligntening ³ 713-852-2928 ³ 1 ³ Stingray ³ Member Board ³
³ Bad Medicine ³ 604-XXX-XXXX ³ 2 ³ Boba Fett ³ Member Board ³
ÃÄ Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄ ÄÄÄ ÄÄ Ä Ä´
³ [ SITES ] ³
ÃÄ Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄ ÄÄÄ ÄÄ Ä Ä´
³ Alien Nation ³ 813-493-1871 ³ 1 ³ Evil Enforcer ³ Dist. Site ³
³ Bedlam ³ 313-699-2718 ³ 3 ³ Mr.Bill ³ Dist. Site ³
³ Enchanted Grove ³ 502-893-7414 ³ 1 ³ Draken ³ Dist. Site ³
³ Jurassic Park ³ 619-756-5229 ³ 1 ³ Targa ³ Dist. Site ³
³ Outland BBS ³ 509-468-9808 ³ 1 ³ Gadget ³ Dist. Site ³
³ The Trash Heap ³ 405-751-1604 ³ 1 ³ Greaser ³ Dist. Site ³
³ Underground Oasis ³ 201-818-4894 ³ 3 ³ Mister Twister ³ Dist. Site ³
³ Vanishing Point ³ 604-599-5711 ³ 1 ³ Kodiak ³ Dist. Site ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ü ° Ü Ü ÜÜ ÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÛ PLEASE NOTE ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜ ÜÜ Ü Ü ° Ü
± ±
² We are now accepting applications, please pick up an appcliation at ²
Û any DEAD WEIGHT HQ , or contact us at our P.O.Box Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Û
Û DEAD WEIGHT Û
Û P.O Box 6623 Û
Û Katy, TX 77491-6623 Û
Û Û
Û Û
Û Or Call: Û
Û Û
Û Ride The Lightning Û
Û (713)852-2928 Û
Û V32bis Only Û
Û Û
Û Name: Guest Û
Û Password: Wannabe Û
Û Û
Û Û
Û Or Call: Û
Û Û
Û 1-800-333-4876 Extension 301 Û
Û and leave a message on our VMB Û
Û Be sure to leave a voice number Û
Û where you can be reached. Û
Û Û
Û Û
Û Ä Ä ÄÄ ÄÄÄ ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄ ÄÄÄ ÄÄ Ä Ä Û
Û Û
ß ßßß ß ß ßß ßßß ßßßßß ßßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßß ßßßß ßßß ßß ß ß ßßß ß
² ²
± ±
° °

View File

@ -0,0 +1,26 @@
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º º
ÌÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍ͹
º º º º
º º º º
º º Test º º
º º º º
º º º º
ÌÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍ͹
º º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua.
At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua.
At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est
Lorem ipsum dolor sit amet.

148
test/txtfiles/NFO/wwc94.nfo Normal file
View File

@ -0,0 +1,148 @@
ÛÛßßßß± ÛÛßßßß²ÛÛßßßß± ÛÛßßßß²± ÜÜÜÛßßßßßß°ÜÜ
ÛÛ °± ÞÛÛ °ÛÛ °± ÞÛÛ °² ÜÜÛß ß±Ü
ÛÛ Û² ÞÛÛ ÛÛÛ Û² ÞÛÛ Û²ÜÛÛ ÜÜÜÜ ²Û
ÞÛÝ ÞÛÝÜÜÜÜÜÜÜÜÞÛÝ ÞÛÞÛÝ ÞÛÝÜÜÜÜÜÜÜÜÞÛÝ ÞÛÝÛÛ ° ÜÛÛß ßÛܰ ÛÛ
ÞÛݰ°°ÞÛÝÛ² ° ±°ÞÛݰ°°ÞÛÞÛݰ°°ÞÛÝÛ² ° ±°ÞÛݰ°°ÞÛÝÛÝ °°ÞÛÛ ÞÛݰ° ÞÛÝ
ÞÛÛ ±± ÛÛ²² ±± ²ÛÛ² ±±°ÛÛ ÛÛ ±± ÛÛ²² ±± ²ÛÛ² ±±°ÛÛÛÛ ±± ÛÛÝ ßßßßß
ÛÛ ²²ÝÛ۱ݲ²²²ÞÛ²±Þ²²±ÛÛ ÛÛ ²²ÝÛ۱ݲ²²²ÞÛ²±Þ²²±ÛÛÛÛ ²²Ý²ÛÝ
ÞÛÝ ÞÛ±Ý ÞÛ°Ý ÞÛÝ ÞÛÝ ÞÛ±Ý ÞÛ°Ý ÞÛÝÛÛÞ Ý±²Ý ÜÜÜÜÜ
ÞÛݰ°°Þ²²Þ°°°°Ý۲ݰ°°ÞÛ ÞÛݰ°°Þ²²Þ°°°°Ý۲ݰ°°ÞÛÝÝÛݰ°°Þ°Ý ÜÜÞ°°ÞÛÝ
ÞÛÛÞ±±Üßܱ±ßß±±Üßܱ±ÝÛÛ ÞÛÛÞ±±Üßܱ±ßß±±Üßܱ±ÝÛÛ ²²Þ±±±ßÛÜ Üß±±±±ÝÛÛ
Û²Þ²²²²²²ÝÛÛÞ²²²²²²ÝÛÛ Û²Þ²²²²²²ÝÛÛÞ²²²²²²ÝÛÛ ±±Þ²²²Üßßßßܲ²²ÝÛß
Þ±ÝßÛÛÛÛßÞÛÛÝßÛÛÛÛßÞÛÝ Þ±ÝßÛÛÛÛßÞÛÛÝßÛÛÛÛßÞÛÝ ß°ÜßßÛÛÛÛÛÛßßÜß ED
±ÜÜÜÜÜÜÛßßÛÜÜÜÜÜÜÛÛ ±ÜÜÜÜÜÜÛßßÛÜÜÜÜÜÜÛÛ ßßß²ÜÜÜÜÜÜÛß iCE
ù -Ä ÄÄÄÄ] W O R L D ù W I D E ù C O U R I E R S [ÄÄÄÄ -Ä ù
" Join the rising force in PC Couriering "
** WORLD WIDE **
ÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜ
ÜÜÜÜ ÛÛÛÛÞÛÝ Û ÛÛÛÛÞ ÜÜÜÜ
ÜÜÜ ÜÜ Û±²Ûܰ±²ÛÛÛ ÛÛÛÛÞÛÝ Û ÛÛÛÛÞ E M B E R S ÛÛÛ²±°ÜÛ²±Û ÜÜ ÜÜÜ
ßß ßßß ßßß ßßß²ÛÛÛß ÛÛÛÛ ÛÛ ÞÛ ÛÛÛÛ ßÛÛÛ²ßßß ßßß ßßß ßß
Û ÛÛÛÛ ÛÛ ÛÛ ÛÛÛÛ Û
Û ßßßßßß ÞÛÛÛÛ ßßßß Û
ÛÛ°° ±±²²
²²±± °°ÛÛ
±±²² S E N I O R S T A F F ±±²²
°°ÛÛ ßßßßßßßßßßßßßßßßßßßßßßßßßß\ ²²±±
±±²² SHADOWKEEPER þ COOKIE MONSTER þ EXTRA CREDIT ÛÛ°°
²²±± ²²±±
±±²² ±±²²
Û ÜÜÜÜ ÜÜÜÜ Û
Û ÜÜÜ ÜÜ Û±²Ûܰ±²ÛÛÛùWORLD WIDE COURIERS '94ùÛÛÛ²±°ÜÛ²±Û ÜÜ ÜÜÜ Û
ßß ßßß ßßß ßßß²ÛÛÛß ßÛÛÛ²ßßß ßßß ßßß ßß ß
ÜÜÛÛÛÜ
ÜÛÛÛÛÛÛÛÛÛ
ÜÜÜÜ ÛÛÛßßßÛÛÛÛß ÜÜÜÜ
ÜÜÜ ÜÜ Û±²Ûܰ±²ÛÛÛ ÛÛÛ ß ÛÛÛ²±°ÜÛ²±Û ÜÜ ÜÜÜ
ßß ßßß ßßß ßßß²ÛÛÛß ÛÛÛ O U R I E R S ßÛÛÛ²ßßß ßßß ßßß ßßþ
Û ÛÛÛÛÜÜ Ü Û
Û ßÛÛÛÛÛÛÛÛÛ Û
±±²² ßßÛÛÛÛÛ ²²±±
°°ÛÛ ÛÛ°°
²²±± ì KRYPTON þ POLARIS þ BUSTER HYMAN þ MYXLPLIX þ THE HOBBIT ì ²²±±
±±²² ì DR. STUPID þ MR. EMT þ iMAGE þ THE PROWLER þ RAVEN þ AGENT-X ì ÛÛ°°
°°ÛÛ ì ZONE MASTER þ CASTOR þ SOUL LEADER þ KNIGHT SABER ì ²²±±
²²±± ±±²²
ÛÛ°° °°ÛÛ
²²±± C O U R I E R C O O R D I N A T O R S ±±²²
±±²² ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß\ ²²±±
°°ÛÛ þ WORLD þ WIDE þ COURIERING '94 CREW þ ÛÛ°°
²²±± ²²±±
±±²² S I T E C O O R D I N A T O R S ±±²²
°°ÛÛ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß\ °°ÛÛ
²²±± ±±²²
ÛÛ°° ²²±±
²²±± ÛÛ°°
Û ÜÜÜÜ ÜÜÜÜ Û
Û ÜÜÜ ÜÜ Û±²Ûܰ±²ÛÛÛùWORLD WIDE COURIERS '94ùÛÛÛ²±°ÜÛ²±Û ÜÜ ÜÜÜ Û
ßß ßßß ßßß ßßß²ÛÛÛß ßÛÛÛ²ßßß ßßß ßßß ßß ß
Ü ú Ü ú
ÞÝ Üþ H E A D Q U A R T E R S ÞÝ Üþ
ÛÜ Üß ÛÜ Üß
ÞÝ Ü ú ÞÝ Ü ú
þÜ ÛÜßÜ Ü THE GRAVE YARD (World) (xXx)XxX-xXxX ShadowKeeper þÜ ÛÜßÜ Ü
þßßÜ ÜÝÜÜß THE BACK ROOM (Eastern) (xXx)XxX-xXxX Nomadd ßÜ ÜÝÜÜß
Ü Þ Þ²ÛÝß SHADOW REALM (Canadian) (xXx)XxX-xXxX Shadow Hunter Ü Þ Þ²ÛÝß
ú Üß ±ÝßÜ ß ±ÝßÜ
ß Þ °Ý ß Þ °Ý
Üß ÝÛÛÛ Üß ÝÛÛÛ
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ H E A D Q U A R T E R S ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ THE GRAVEYARD (World) 2 NODES XXX.XXX.XXXX ShadowKeeper ÛÜßÜß
ÜßÜßÛ THE BACK ROOM (Eastern) 2 NODES XXX.XXX.XXXX Nomadd ÛÜßÜß
ÜßÜßÛ SHADOW REALM (Canadian) XXX.XXX.XXXX Shadow Hunter ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ U S ì D I S T R I B U T I O N ì S I T E S ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ 11TH HOUR BBS 7 NODES 313.XXX.XXXX Marco Polo ÛÜßÜß
ÜßÜßÛ FADE TO BLACK 2 NODES 612.XXX.XXXX Ningauble ÛÜßÜß
ÜßÜßÛ LEGATO TIMES 2 NODES 702.XXX.XXXX Sonny ÛÜßÜß
ÜßÜßÛ X MARKS THE SPOT 909.XXX.XXXX The Armored Saint ÛÜßÜß
ÜßÜßÛ DEAD MAN'S BLUFF 310.XXX.XXXX The Overlord ÛÜßÜß
ÜßÜßÛ SEA OF HATE 319.XXX.XXXX Toilet Bowl ÛÜßÜß
ÜßÜßÛ CABLE ACCESS CHANNEL 10 513.XXX.XXXX Wayne ÛÜßÜß
ÜßÜßÛ INTOXIFORNICATION 713.XXX.XXXX Hi Fi Del ÛÜßÜß
ÜßÜßÛ KISS OF DEATH 518.XXX.XXXX Rogue ÛÜßÜß
ÜßÜßÛ OPTICAL XEROX 314.XXX.XXXX Druidic Priest ÛÜßÜß
ÜßÜßÛ GROUND ZERO 4 NODES 707.XXX.XXXX Tagger ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ C A N A D I A N ì D I S T R I B U T I O N ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ BOILING NITROGEN 416.XXX.XXXX Hoodlem ÛÜßÜß
ÜßÜßÛ HYDROGEN PLACE 613.XXX.XXXX Lord Nuke ÛÜßÜß
ÜßÜßÛ THE GARDEN 705.XXX.XXXX Death Carnage ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ E U R O ì D I S T R I B U T I O N ÛÜßÜß
ÜßÜßÛ Information Not Avilable ÛÜßÜß
ÜßÜßÛ ÛÜßÜß
ÜßÜßÛ M O R E S I T E S - C O M I N G S O O N! ÛÜßÜß
ÜßÜßÛ ù ù ù ù ù ÛÜßÜß
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß
ÛÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜ
R e a c h i n g O u t A c r o s s T h e W o r l d !
ÜÜßßßÛÜ
ÜÛßÜß ßÜÛßÜ ÜÜÜÜÛ
ÜÜÛÛß ÜÜÜÜÜßßßßßß
ÜÜßßÜÜßÜÛßßßßßÜÜßß ÜÜ
ßÛßßßßÜ Ü ÜÜÛßÜÜÛßßßÜßÜß ÜÜ ÜÛÛÛß
ßßÜßßÛÜÜ Ü ÜÜ ÜÜÜÛÛÛÛßßßßÜÜÜÜßÜßßßßßßÛßßÜß ßß
ßÛßßÛ ÛÛÛÛÛÛÛÛÛÛÛÜßßßßßßÜßßßß
Ü ÜÜÛÛÛÜÜ ÜÜÜÛÛÛÜ ÜÜÜÛÛÛÜÜÜ ßßÜÛßßÛÛÛÛÛÛÛÛßÛßÜÜÜÜÜÜÛÛßÜÛÜÜÜÜ ÜÜÜ ÜÜÛÛÛ
ÛÛÜ ßßßßÛÛÜÜÛÛÛßßß ÜÜÛÛÛßßß úÞÝ ÜßßÜÜÜßÜÜÜÜß ßßßßßßßß ßßßßßßßßÜßßßßÛÜÜß
ßßÛÛÜ ÜÜÛÛßÜ ÜÜÛÛß ÜßßßÜÜß ÞÞßßÜÜÜßLogaN/iCE
Û²ÛÛ ÛÛ ÛÛÛÛÛ²ÛÛ ÛÛ ÛÛÛÛß ÞÝ ÝÝ ÞÞÛ Ý
Û±ÛÛÞÛÝÛÛÛ Û±ÛÛÞÛÝÛÛÛÞÝú ßÜ ÜÝ Þ ÝÛÝ
Û°ÛÛÛÛÛÛ Û°ÛÛÛÛÛÛ ßÜÜú ßßßÛßß Þ ÝÛÛÝ
ßß ßß ßß ßß ßßßßß ÞÝ ÝÛÛÛ
W o r l d W i d e C o u r i e r sÞÝ ÛÜÛÛÝ
ÜÛÝ ÞÛÛÛÛ
NEWS/INFORMATION ÜÛÛÜÛ ÞßÛÛÛÛÛÛÜ
ÜÛÛÛÛÛÛÛÛÛÛÛßßßßßßßÛßßßßßßÛÛÛÛßßßßßßßßßÜß ßÜßßßßßÛÛÛßßßßßÛÛÛßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ
Ûßßßßßßßß ßßßßßßßßÛ
Þ
Interested in becoming a Site or a Courier for WWC;
Contact Extra Credit on any of the WWC HQ's. If you can't
get onto these boards then your not worthy of becoming a courier
or a site. You can leave Extra Credit E-mail at 714-999-5556,
leave him mail at the matrix prompt.
Greets: UC, SpectruM, QuantuM, CrimsoN, RiSC
THG, iNC, TDT, TRSI, PTG, RZR, FLT, PiL, PE, NX, MGK, RGB, and you!
(c) WWC '94
<Updated: 01/07/93>

BIN
test/txtfiles/Registry.reg Normal file

Binary file not shown.

BIN
test/txtfiles/Rust.rs Normal file

Binary file not shown.

339
test/txtfiles/TOML.toml Normal file
View File

@ -0,0 +1,339 @@
# This is a TOML document. - encoding:UTF-8
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
# Indentation (tabs and/or spaces) is allowed but not required
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
[keys]
key = "value"
key = # INVALID
key = "value"
bare_key = "value"
bare-key = "value"
1234 = "value"
"127.0.0.1" = "value"
"character encoding" = "value"
"ʎǝʞ" = "value"
'key2' = "value"
'quoted "value"' = "value"
[strings]
str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
str1 = """
Roses are red
Violets are blue"""
# On a Unix system, the above multi-line string will most likely be the same as:
str2 = "Roses are red\nViolets are blue"
# On a Windows system, it will most likely be equivalent to:
str3 = "Roses are red\r\nViolets are blue"
# The following strings are byte-for-byte equivalent:
str1 = "The quick brown fox jumps over the lazy dog."
str2 = """
The quick brown \
fox jumps over \
the lazy dog."""
str3 = """\
The quick brown \
fox jumps over \
the lazy dog.\
"""
### String Literals ###
regex2 = '''I [dw]on't need \d{2} apples'''
lines = '''
The first newline is
trimmed in raw strings.
All other whitespace
is preserved.
'''
# What you see is what you get.
winpath = 'C:\Users\nodejs\templates'
winpath2 = '\\ServerX\admin$\system32\'
quoted = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'
str4 = """
Roses are red
Violets are blue"""
[numbers]
int1 = +99
int2 = 42
int3 = 0
int4 = -17
int5 = 1_000
int6 = 5_349_221
int7 = 1_2_3_4_5 # VALID but discouraged
# hexadecimal with prefix `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef
# octal with prefix `0o`
oct1 = 0o01234567
oct2 = 0o755 # useful for Unix file permissions
# binary with prefix `0b`
bin1 = 0b11010110
# fractional
flt1 = +1.0
flt2 = 3.1415
flt3 = -0.01
# exponent
flt4 = 5e+22
flt5 = 1e6
flt6 = -2E-2
# both
flt7 = 6.626e-34
flt8 = 224_617.445_991_228
# infinity
sf1 = inf # positive infinity
sf2 = +inf # positive infinity
sf3 = -inf # negative infinity
# not a number
sf4 = nan # actual sNaN/qNaN encoding is implementation specific
sf5 = +nan # same as `nan`
sf6 = -nan # valid, actual encoding is implementation specific
# boolean
bool1 = true
bool2 = false
[date time]
# Offset Date-Time ( RFC 3339 : http://tools.ietf.org/html/rfc3339 )
odt1 = 1979-05-27T07:32:00Z
odt2 = 1979-05-27T00:32:00-07:00
odt3 = 1979-05-27T00:32:00.999999-07:00
# readability
odt4 = 1979-05-27 07:32:00Z
# Local Date-Time (
ldt1 = 1979-05-27T07:32:00
ldt2 = 1979-05-27T00:32:00.999999
# Local Date
ld1 = 1979-05-27
# Local Time
lt1 = 07:32:00
lt2 = 00:32:00.999999
[array]
arr1 = [ 1, 2, 3 ]
arr2 = [ "red", "yellow", "green" ]
arr3 = [ [ 1, 2 ], [3, 4, 5] ]
arr4 = [ "all", 'strings', """are the same""", '''type''']
arr5 = [ [ 1, 2 ], ["a", "b", "c"] ]
arr6 = [ 1, 2.0 ] # INVALID
arr7 = [
1, 2, 3
]
# Line breaks are OK when inside arrays
hosts = [
"alpha",
"omega",
"echo" # Comments at evry time
]
arr8 = [
1,
2, # this is ok
]
# This is a special Section [table] definitions
[table]
# Under that, and until the next table or EOF are the key/values of that table.
# Key/value pairs within tables are not guaranteed to be in any specific order.
[table-1]
key1 = "some string"
key2 = 123
[table-2]
key1 = "another string"
key2 = 456
[dog."tater.man"]
type.name = "pug"
# In JSON land, that would give you the following structure:
# { "dog": { "tater.man": { "type": { "name": "pug" } } } }
[a.b.c] # this is best practice
[ d.e.f ] # same as [d.e.f]
[ g . h . i ] # same as [g.h.i]
[ j . "ʞ" . 'l' ] # same as [j."ʞ".'l']
# [x] you
# [x.y] don't
# [x.y.z] need these
[x.y.z.w] # for this to work
# DO NOT DO THIS
[a]
b = 1
[a]
c = 2
# DO NOT DO THIS EITHER
[a]
b = 1
[a.b]
c = 2
# Inline Table
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }
[name]
first = "Tom"
last = "Preston-Werner"
[point]
x = 1
y = 2
[animal]
type.name = "pug"
# Array of Tables
[[products]]
name = "Hammer"
sku = 738594937
[[products]]
[[products]]
name = "Nail"
sku = 284758393
color = "gray"
# In JSON land, that would give you the following structure:
# {
# "products": [
# { "name": "Hammer", "sku": 738594937 },
# { },
# { "name": "Nail", "sku": 284758393, "color": "gray" }
# ]
# }
#
#
[[fruit]]
name = "apple"
[fruit.physical]
color = "red"
shape = "round"
[[fruit.variety]]
name = "red delicious"
[[fruit.variety]]
name = "granny smith"
[[fruit]]
name = "banana"
[[fruit.variety]]
name = "plantain"
# In JSON land, that would give you the following structure:
# {
# "fruit": [
# {
# "name": "apple",
# "physical": {
# "color": "red",
# "shape": "round"
# },
# "variety": [
# { "name": "red delicious" },
# { "name": "granny smith" }
# ]
# },
# {
# "name": "banana",
# "variety": [
# { "name": "plantain" }
# ]
# }
# ]
# }
#
# INVALID TOML DOC
fruit = []
[[fruit]] # Not allowed
# INVALID TOML DOC
[[fruit]]
name = "apple"
[[fruit.variety]]
name = "red delicious"
# This table conflicts with the previous table
[fruit.variety]
name = "granny smith"
points = [ { x = 1, y = 2, z = 3 },
{ x = 7, y = 8, z = 9 },
{ x = 2, y = 4, z = 8 } ]

View File

@ -0,0 +1,71 @@
Notepad3 and MiniPath Copyright © 2008-2016 Rizonesoft, All rights reserved.
https://www.rizonesoft.com
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. Neither the name of Florian Balmer nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
01 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
02 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
03 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
04 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
05 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
06 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
07 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
08 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
09 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
10 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
==================================================
License for Scintilla and SciTE
==================================================
Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting documentation.
NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NEIL
HODGSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGESWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
==================================================
License for Onigmo (Oniguruma-mod) RegEx Engine
==================================================
Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.

View File

@ -0,0 +1,5 @@
\u0D19\u0D4d\u0D19
\u0D19\u0D4d\u0D19
ങ്ങ
ങ്ങ
ങ്ങ

View File

@ -0,0 +1,24 @@
# =======================================================
# Manual Test
# -----------------------------------------------------------------------------------------------
# In "Find Text" / "Replace Text" Dialog and RegEx chosen:
# RegEx: "(\d\d)\s\1" ( w/o the double quotes)
# => "can't "Find Previous" this string"
# Remark: but, "Find Next" is working.
# =======================================================
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09

401
test/txtfiles/python.py Normal file
View File

@ -0,0 +1,401 @@
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
"""
Utilities and Helpers for General Tasks
"""
import sys
import os
import stat
import getpass
import shutil
import tempfile
import logging
from datetime import datetime
# =============================================================================
WRITE_TO_LOGFILE = False
DEFAULT_LOG_LEVEL = logging.INFO
LOG_DIR_CONFIG_FILENAME = "_DBMIG_TMP_DIR_CFG.ini"
# =============================================================================
# TODO: unique keys should not be empty
_NOT_NULL_EXCEPTION_LIST = [('deductions', 'imrestype_ref'),
('queue lengths', 'imrestype_ref'),
('neighbour networkpoint distances', 'traffic network'),
('occupations', 'day'),
('tb_loc_prop', 'internal_id')]
#('flighttypes', 'bgcolor_ref'),
#('managedstations', 'routings_ref'),
#('routings', 'classification_ref'),
#('routings', 'timezone_ref')]
# force FK references to be not null
_NOT_NULL_FK_REF_LIST = ['managedstations']
# =============================================================================
def eprint(strg):
""" print to stderr """
print(strg, file=sys.stderr)
sys.stderr.flush()
# =============================================================================
def is_ascii(strg):
""" is_ascii() """
#~return all(ord(c) < 128 for c in strg)
try:
strg.encode('ascii')
except UnicodeEncodeError:
return False
return True
def is_mbcs(strg):
""" is_ascii() """
try:
strg.encode('mbcs')
except UnicodeEncodeError:
return False
return True
# =============================================================================
def check_read_access(input_file):
""" check_read_access """
if not os.path.isfile(input_file):
eprint("Input file ({}) not found!".format(input_file))
return False
if not os.access(input_file, os.R_OK):
eprint("Input file ({}) is not readable!".format(input_file))
return False
return True
# =============================================================================
def check_write_access(output_path):
""" check_write_access """
from tempfile import NamedTemporaryFile
# check if file exists
if os.path.isfile(output_path):
if not os.access(output_path, os.W_OK):
eprint("Output file ({}) is not writable!".format(output_path))
return False
try:
os.rename(output_path, output_path) # hack alert
except OSError as err:
eprint("Error on write access: {}".format(err))
return False
else: # check if directory is writable
try:
out_dir = os.path.dirname(output_path)
with NamedTemporaryFile(dir=out_dir, delete=True) as tmpfile:
tmpfile.write(b'blahblub')
tmpfile.flush()
except OSError as err:
eprint("Error on write access: {}".format(err))
return False
return True
# =============================================================================
def compose_log_file_path(db_path=None,aprefix="PY"):
""" compose_log_file_path() """
global WRITE_TO_LOGFILE
log_file_dir = None
log_file_path = None
try:
# assuming this is deterministic
cfg_log_path = os.path.join(tempfile.gettempdir(), LOG_DIR_CONFIG_FILENAME)
if os.path.isfile(cfg_log_path):
with open(cfg_log_path, 'r') as file:
log_file_dir = file.readline()
except OSError as err:
eprint("Error on reading file '{file}' : {err}".format(file=cfg_log_path, err=err))
log_file_dir = None
except: # pylint: disable=bare-except
eprint("Error on composing logfile path!")
log_file_dir = None
finally:
if log_file_dir:
WRITE_TO_LOGFILE = True
if db_path and not log_file_dir:
log_file_dir = os.path.dirname(db_path)
if not (log_file_dir and os.path.isdir(log_file_dir)):
return None
if not check_write_access(log_file_dir):
eprint("No write access to: '{dir}!'".format(dir=log_file_dir))
return None
if db_path:
base_name = "_".join([aprefix, os.path.basename(db_path)])
else:
# no logfile specified, but log_file_dir given: make temp name
tmp_path = tempfile.NamedTemporaryFile(prefix=aprefix, suffix="")
base_name = os.path.basename(tmp_path.name)
time_stamp = datetime.now().strftime("%Y-%m-%d_%H%M%S.%f")[:-3]
pid_str = "{}".format(os.getpid())
log_file_name = ".".join([base_name[:16], getpass.getuser(), pid_str, time_stamp, "log"])
return os.path.join(log_file_dir, log_file_name)
# =============================================================================
MAIN_LOGGER = "thePLPythonMainLogger"
def create_logger(log_file_path=None):
""" create_logger() """
if WRITE_TO_LOGFILE and log_file_path:
have_write_access = check_write_access(log_file_path)
else:
have_write_access = False
# create logger
logger = logging.getLogger(MAIN_LOGGER)
# create file handler which logs even debug messages
if have_write_access:
try:
if os.path.isfile(log_file_path):
os.remove(log_file_path)
file_handler = logging.FileHandler(log_file_path, 'w', encoding='UTF-8')
file_handler.setLevel(logging.NOTSET)
except OSError as err:
# don't use eprint() cause this will trigger error meassage in Planning
print("Exception: Can not remove old logfile {}!".format(log_file_path))
have_write_access = false
# create console handler with a higher log level
con_stdout_handler = logging.StreamHandler(stream=sys.stdout)
con_stdout_handler.setLevel(logging.NOTSET)
con_stderr_handler = logging.StreamHandler(stream=sys.stderr)
con_stderr_handler.setLevel(logging.ERROR)
# create formatter and add it to the handlers
#formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
if have_write_access:
file_handler.setFormatter(formatter)
con_stdout_handler.setFormatter(formatter)
con_stderr_handler.setFormatter(formatter)
# add the handlers to the logger
if have_write_access:
logger.addHandler(file_handler)
logger.addHandler(con_stdout_handler)
logger.addHandler(con_stderr_handler)
# set default loglevel
logger.setLevel(DEFAULT_LOG_LEVEL)
return logger
# -----------------------------------------------------------------------------
def get_main_logger():
""" get_main_logger() """
return logging.getLogger(MAIN_LOGGER)
# -----------------------------------------------------------------------------
def flush_logger():
""" flush_logger() """
logger = get_main_logger()
for handler in logger.handlers:
handler.flush()
# =============================================================================
def add_read_permission(pathname, who='u'):
"""Add "read" permission to specified path.
"""
mode = os.stat(pathname).st_mode
mode_map = {
'u': stat.S_IRUSR,
'g': stat.S_IRGRP,
'o': stat.S_IROTH,
'a': stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH,
}
for w in who:
mode |= mode_map[w]
os.chmod(pathname, mode)
# -----------------------------------------------------------------------------
def add_write_permission(pathname, who='u'):
"""Add "write" permission to specified path.
"""
mode = os.stat(pathname).st_mode
mode_map = {
'u': stat.S_IWUSR,
'g': stat.S_IWGRP,
'o': stat.S_IWOTH,
'a': stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH,
}
for w in who:
mode |= mode_map[w]
os.chmod(pathname, mode)
# -----------------------------------------------------------------------------
def add_execute_permission(pathname, who='u'):
"""Add "write" permission to specified path.
"""
mode = os.stat(pathname).st_mode
mode_map = {
'u': stat.S_IXUSR,
'g': stat.S_IXGRP,
'o': stat.S_IXOTH,
'a': stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH,
}
for w in who:
mode |= mode_map[w]
os.chmod(pathname, mode)
# =============================================================================
def get_ordered_unique_list(seq, rev=False):
""" get_ordered_unique_list() """
return sorted(set(seq), reverse=rev)
# -----------------------------------------------------------------------------
def get_missing_elements(sorted_list_of_int, start=None, end=None):
""" get_missing_elements()
call: list(migutils.get_missing_elements(migutils.get_ordered_unique_list(seq)))
"""
if not start:
start = 0
if not end:
end = len(sorted_list_of_int) - 1
if (end - start) <= 1:
if (sorted_list_of_int[end] - sorted_list_of_int[start]) > 1:
yield from range(sorted_list_of_int[start] + 1, sorted_list_of_int[end])
return
index = start + (end - start) // 2
# is the lower half consecutive?
consecutive_low = sorted_list_of_int[index] == (sorted_list_of_int[start] + (index - start))
if not consecutive_low:
yield from get_missing_elements(sorted_list_of_int, start, index)
# is the upper part consecutive?
consecutive_high = sorted_list_of_int[index] == (sorted_list_of_int[end] - (end - index))
if not consecutive_high:
yield from get_missing_elements(sorted_list_of_int, index, end)
# -----------------------------------------------------------------------------
def create_temp_filecopy(logger, fpath, fprefix="py_", fsuffix=".tmp"):
""" create_temp_filecopy
"""
#~tmp_file_name = db_path + ".tmp_{0}.mdb".format(os.getlogin())
tmp_file = tempfile.NamedTemporaryFile(prefix=fprefix, suffix=fsuffix)
tmp_file_name = tmp_file.name
tmp_file.close() # deletes tmp file
logger.info("Creating temporary copy %r.", tmp_file_name)
copy_path = shutil.copy2(fpath, tmp_file_name)
if not os.path.isfile(copy_path):
logger.error("Can not create a temp. copy of '%r'.", fpath)
return None
add_read_permission(copy_path, 'a')
add_write_permission(copy_path, 'a')
return copy_path
# -----------------------------------------------------------------------------
# =============================================================================
class CiDict(dict):
""" Case-Insensitive dictionary
"""
class Key(str):
""" Key """
def __init__(self, key):
""" __init__"""
str.__init__(key)
def __hash__(self):
""" __hash__"""
return hash(self.lower())
def __eq__(self, other):
""" __eq__"""
return self.lower() == other.lower()
# ------------------------------------------------
def __init__(self, data=None):
""" C'tor of CiDict """
super(CiDict, self).__init__()
if data is None:
data = {}
for (key, val) in data.items():
self[key] = val
def __contains__(self, key):
""" __contains__ """
key = self.Key(key)
return super(CiDict, self).__contains__(key)
def __delitem__(self, key):
""" __delitem__ """
key = self.Key(key)
return super(CiDict, self).__delitem__(key)
def __setitem__(self, key, value):
""" __setitem__ """
key = self.Key(key)
super(CiDict, self).__setitem__(key, value)
def __getitem__(self, key):
""" __getitem__ """
key = self.Key(key)
return super(CiDict, self).__getitem__(key)
# =========================================================================
def indent_xml(elem, level=0, last=False):
""" indent_xml(): <a> text </a> tail """
_tab = "\t"
_tail = "\n" + (level * _tab)
_text = _tail + _tab
if elem:
if not elem.text or not elem.text.strip(): elem.text = _text
# recursion
for el in elem[:-1]: indent_xml(el, level+1)
# last item
if level:
for el in elem[-1:]: indent_xml(el, level, True)
else:
for el in elem[-1:]: indent_xml(el, 1, True)
if not elem.tail or not elem.tail.strip(): elem.tail = "\n" if last else _tail
else:
if not elem.tail or not elem.tail.strip(): elem.tail = _tail
# =============================================================================
# =============================================================================

View File

@ -1,26 +0,0 @@
In "Find Text" dialog (or "Replace Text" and Regular expression search box ticked),
I can't "Find Previous" this string
(\d\d)\s\1
on this text (for example):
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
03 03 04 05 06 07 08 09
but, "Find Next" is working.
In Notepad2 and Notepad2BE works fine.