diff --git a/bin/unit_tests/assets/textfiles/test-chinese.uext b/bin/unit_tests/assets/textfiles/test-chinese.uext new file mode 100644 index 000000000..38be961f9 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-chinese.uext @@ -0,0 +1,24 @@ +Hello: 你好 +Good morning: 早上好 +Good night: 晚安 +Thank you: 谢谢 +You're welcome: 不客气 +Yes / No: 是 / 不是 +Please: 请 +Excuse me / Sorry: 不好意思 / 对不起 +How are you?: 你好吗? +I'm fine. And you?: 我很好,你呢? +What's your name?: 你叫什么名字? +My name is...: 我叫…… +Nice to meet you: 很高兴认识你 +Where are you from?: 你从哪里来? +I'm from...: 我来自…… +Do you speak English?: 你会说英语吗? +I don't understand: 我不明白 +Please speak more slowly: 请说慢一点 +Please write it down: 请写下来 +How much is this?: 这个多少钱? +Where is the bathroom?: 洗手间在哪里? +Help!: 救命! +Stop!: 停! +Call the police!: 报警! diff --git a/bin/unit_tests/assets/textfiles/test-devanagari.uext b/bin/unit_tests/assets/textfiles/test-devanagari.uext new file mode 100644 index 000000000..876d75595 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-devanagari.uext @@ -0,0 +1,24 @@ +Hello: नमस्ते / नमस्कार +Good morning: सुप्रभात +Good night: शुभ रात्रि +Thank you: धन्यवाद +You're welcome: आपका स्वागत है +Yes / No: हाँ / नहीं +Please: कृपया +Excuse me / Sorry: माफ कीजिए / क्षमा कीजिए +How are you?: आप कैसे हैं? +I'm fine. And you?: मैं ठीक हूँ। और आप? +What's your name?: आपका नाम क्या है? +My name is...: मेरा नाम ... है +Nice to meet you: आप से मिलकर खुशी हुई +Where are you from?: आप कहाँ से हैं? +I'm from...: मैं ... से हूँ +Do you speak English?: क्या आप अंग्रेज़ी बोलते हैं? +I don't understand: मुझे समझ नहीं आया +Please speak more slowly: कृपया धीरे बोलिए +Please write it down: कृपया इसे लिख दीजिए +How much is this?: यह कितने का है? +Where is the bathroom?: शौچालय कहाँ है? +Help!: बचाओ! / मदद! +Stop!: रुको! / रुकिए! +Call the police!: पुलिस को बुलाइए! diff --git a/bin/unit_tests/assets/textfiles/test-j.uext b/bin/unit_tests/assets/textfiles/test-j.uext deleted file mode 100644 index fb4c13543..000000000 --- a/bin/unit_tests/assets/textfiles/test-j.uext +++ /dev/null @@ -1,6 +0,0 @@ -ニャーニャー, にゃん -ワンワン / わんわん -コンコン / こんこん - -こんにちは、私の名前はマーティンです。 あなたの名前は何ですか? -私はアルゼンチンに住んでおり、コンピューター プログラマーです。 職業はなんですか? diff --git a/bin/unit_tests/assets/textfiles/test-japanese.uext b/bin/unit_tests/assets/textfiles/test-japanese.uext new file mode 100644 index 000000000..af03adf69 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-japanese.uext @@ -0,0 +1,24 @@ +Hello: こんにちは +Good morning: おはようございます +Good night: おやすみなさい +Thank you: ありがとうございます +You're welcome: どういたしまして +Yes / No: はい / いいえ +Please: お願いします / ください +Excuse me / Sorry: すみません / ごめんなさい +How are you?: お元気ですか? +I'm fine. And you?: 元気です。あなたは? +What's your name?: お名前は何ですか? +My name is...: 私の名前は…です +Nice to meet you: はじめまして +Where are you from?: どこから来ましたか? +I'm from...: 私は…から来ました +Do you speak English?: 英語を話せますか? +I don't understand: わかりません +Please speak more slowly: もう少しゆっくり話してください +Please write it down: 書いてください +How much is this?: これはいくらですか? +Where is the bathroom?: トイレはどこですか? +Help!: 助けて! +Stop!: やめて! / 止まって! +Call the police!: 警察を呼んでください! diff --git a/bin/unit_tests/assets/textfiles/test-k.uext b/bin/unit_tests/assets/textfiles/test-k.uext deleted file mode 100644 index ae833ab57..000000000 --- a/bin/unit_tests/assets/textfiles/test-k.uext +++ /dev/null @@ -1,2 +0,0 @@ -안녕하세요 오늘 강의해 드릴 내용은 12 안마당 빌드입니다. 12 안마당의 종류와 장단점들 그리고 빌드 오더를 간단하지만 자세하게 알려드리려고 합니다. 토스전에서는 가장 부유하게 시작하고 싶을 때 사용하는 빌드고요. 테란전에서는 12 안마당으로 할 수 있는 빌드가 여러가지가 있습니다. 그래서 가장 많이 사용하는 빌드들을 몇가지 알려드리려고 합니다. 첫 번째로 투에처리 빌드인데 12 안마당으로 시작하는 빌드입니다. 12 안마당 11 스포닝풀 10가스 이제 빠른 가스를 활용한 빌드인데요. 이 빌드는 투에처리 빌드를 하실때 3에처리를 빠르게 3가스 멀티에 가져가면서 플레이를 할 때 많이 사용을 하고요. 두번째로 12압 12풀 12가스 적당히 빠른 테크트리와 적당히 빠른 3에처리 빌드입니다. 12압 12가스 적당히 빠른 테크트리와 적당히 빠른 3에처리 빌드입니다. 이 빌드 같은 경우는 흔히들 말하는 안 3에처리라고 많이들 얘기를 하는데 뮤탈리스크도 빠르고 3에처리도 빠른 그런 빌드라고 생각하시면 되요. - diff --git a/bin/unit_tests/assets/textfiles/test-korean.uext b/bin/unit_tests/assets/textfiles/test-korean.uext new file mode 100644 index 000000000..f6c035d87 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-korean.uext @@ -0,0 +1,24 @@ +Hello: 안녕하세요 +Good morning: 좋은 아침 +Good night: 안녕히 주무세요 +Thank you: 감사합니다 +You're welcome: 천만에요 +Yes / No: 네 / 아니요 +Please: 부탁합니다 / 제발 +Excuse me / Sorry: 실례합니다 / 미안합니다 +How are you?: 잘 지내세요? +I'm fine. And you?: 저는 잘 지내요. 당신은요? +What's your name?: 이름이 뭐예요? +My name is...: 제 이름은 ... 입니다 +Nice to meet you: 만나서 반갑습니다 +Where are you from?: 어디에서 오셨어요? +I'm from...: 저는 ...에서 왔어요 +Do you speak English?: 영어 할 수 있어요? +I don't understand: 이해하지 못했어요 +Please speak more slowly: 천천히 말해 주세요 +Please write it down: 적어 주세요 +How much is this?: 이거 얼마예요? +Where is the bathroom?: 화장실이 어디예요? +Help!: 도와주세요! +Stop!: 멈춰! +Call the police!: 경찰을 불러 주세요! diff --git a/bin/unit_tests/assets/textfiles/test-russian.uext b/bin/unit_tests/assets/textfiles/test-russian.uext new file mode 100644 index 000000000..ae3e52632 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-russian.uext @@ -0,0 +1,24 @@ +Hello: Здравствуйте / Привет +Good morning: Доброе утро +Good night: Спокойной ночи +Thank you: Спасибо +You're welcome: Пожалуйста / Не за что +Yes / No: Да / Нет +Please: Пожалуйста +Excuse me / Sorry: Извините / Простите +How are you?: Как дела? / Как вы поживаете? +I'm fine. And you?: У меня всё хорошо. А у вас? +What's your name?: Как вас зовут? +My name is...: Меня зовут… +Nice to meet you: Приятно познакомиться +Where are you from?: Откуда вы? +I'm from...: Я из… +Do you speak English?: Вы говорите по-английски? +I don't understand: Я не понимаю +Please speak more slowly: Пожалуйста, говорите медленнее +Please write it down: Пожалуйста, запишите +How much is this?: Сколько это стоит? +Where is the bathroom?: Где находится туалет? +Help!: Помогите! +Stop!: Стойте! / Остановитесь! +Call the police!: Позовите полицию! diff --git a/bin/unit_tests/assets/textfiles/test-tamil.uext b/bin/unit_tests/assets/textfiles/test-tamil.uext new file mode 100644 index 000000000..7678cd1d0 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-tamil.uext @@ -0,0 +1,24 @@ +Hello: வணக்கம் +Good morning: காலை வணக்கம் +Good night: இனிய இரவு வணக்கம் +Thank you: நன்றி +You're welcome: வரவேற்கிறேன் +Yes / No: ஆம் / இல்லை +Please: தயவு செய்து +Excuse me / Sorry: மன்னிக்கவும் +How are you?: நீங்கள் எப்படி இருக்கிறீர்கள்? +I'm fine. And you?: நான் நன்றாக இருக்கிறேன். நீங்கள்? +What's your name?: உங்கள் பெயர் என்ன? +My name is...: என் பெயர்... +Nice to meet you: உங்களை சந்தித்ததில் மகிழ்ச்சி +Where are you from?: நீங்கள் எங்கு இருந்து வந்தீர்கள்? +I'm from...: நான் ... இருந்து வந்தேன் +Do you speak English?: நீங்கள் ஆங்கிலம் பேசுவீர்களா? +I don't understand: எனக்கு புரியவில்லை +Please speak more slowly: தயவு செய்து மெதுவாக பேசுங்கள் +Please write it down: தயவு செய்து அதை எழுதுங்கள் +How much is this?: இதன் விலை என்ன? +Where is the bathroom?: கழிவறை எங்கு உள்ளது? +Help!: உதவுங்கள்! +Stop!: நிறுத்துங்கள்! +Call the police!: காவல்துறையை அழைக்கவும்! diff --git a/bin/unit_tests/assets/textfiles/test-thai.utext b/bin/unit_tests/assets/textfiles/test-thai.utext new file mode 100644 index 000000000..5ea9f3d16 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-thai.utext @@ -0,0 +1,24 @@ +Hello: สวัสดี +Good morning: สวัสดีตอนเช้า +Good night: ราตรีสวัสดิ์ +Thank you: ขอบคุณ +You're welcome: ยินดีครับ/ค่ะ +Yes / No: ใช่ / ไม่ใช่ +Please: กรุณา / โปรด +Excuse me / Sorry: ขอโทษ / ขออภัย +How are you?: คุณสบายดีไหม +I'm fine. And you?: ผม/ฉันสบายดี แล้วคุณล่ะ +What's your name?: คุณชื่ออะไร +My name is...: ผม/ฉันชื่อ... +Nice to meet you: ยินดีที่ได้รู้จัก +Where are you from?: คุณมาจากที่ไหน +I'm from...: ผม/ฉันมาจาก... +Do you speak English?: คุณพูดภาษาอังกฤษได้ไหม +I don't understand: ผม/ฉันไม่เข้าใจ +Please speak more slowly: กรุณาพูดช้าลงหน่อย +Please write it down: กรุณาเขียนให้หน่อย +How much is this?: อันนี้ราคาเท่าไหร่ +Where is the bathroom?: ห้องน้ำอยู่ที่ไหน +Help!: ช่วยด้วย! +Stop!: หยุด! +Call the police!: เรียกตำรวจ! diff --git a/bin/unit_tests/assets/textfiles/test-vietnamese.utext b/bin/unit_tests/assets/textfiles/test-vietnamese.utext new file mode 100644 index 000000000..5ca1d5399 --- /dev/null +++ b/bin/unit_tests/assets/textfiles/test-vietnamese.utext @@ -0,0 +1,24 @@ +Hello: Xin chào / Xin chào (trang trọng) +Good morning: Chào buổi sáng +Good night: Chúc ngủ ngon +Thank you: Cảm ơn +You're welcome: Không có gì +Yes / No: Vâng / Không +Please: Làm ơn +Excuse me / Sorry: Xin lỗi / Xin lỗi +How are you?: Bạn khỏe không? +I'm fine. And you?: Tôi khỏe. Còn bạn? +What's your name?: Tên bạn là gì? +My name is...: Tên tôi là... +Nice to meet you: Rất vui được gặp bạn +Where are you from?: Bạn đến từ đâu? +I'm from...: Tôi đến từ... +Do you speak English?: Bạn có nói tiếng Anh không? +I don't understand: Tôi không hiểu +Please speak more slowly: Làm ơn nói chậm hơn +Please write it down: Làm ơn viết ra +How much is this?: Cái này giá bao nhiêu? +Where is the bathroom?: Nhà vệ sinh ở đâu? +Help!: Cứu với! +Stop!: Dừng lại! +Call the police!: Gọi cảnh sát! diff --git a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp index 1e294f65c..5115637a5 100644 --- a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp +++ b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp @@ -545,6 +545,13 @@ namespace EE { namespace UI { namespace Doc { namespace Language { SyntaxDefinition& SyntaxDefinitionManager::add( SyntaxDefinition&& syntaxStyle ) { Lock l( mMutex ); + auto existsIt = + std::find_if( mDefinitions.begin(), mDefinitions.end(), + [&syntaxStyle]( const std::shared_ptr& def ) { + return def->getLanguageName() == syntaxStyle.getLanguageName(); + } ); + if ( existsIt != mDefinitions.end() ) + return **existsIt; syntaxStyle.mLanguageIndex = mDefinitions.size(); syntaxStyle.compile(); mDefinitions.emplace_back( std::make_shared( std::move( syntaxStyle ) ) ); diff --git a/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/freebasic.cpp b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/freebasic.cpp new file mode 100644 index 000000000..abc24491e --- /dev/null +++ b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/freebasic.cpp @@ -0,0 +1,463 @@ +#include +#include + +namespace EE { namespace UI { namespace Doc { namespace Language { + +SyntaxDefinition& addFreeBASIC() { + + auto& sd = SyntaxDefinitionManager::instance()->add( + + { "FreeBASIC", + { "%.bas$", "%.bi$" }, + { + { { "'.*" }, "comment" }, + { { "rem%s.*" }, "comment" }, + { { "\"", "\"" }, "string" }, + { { "-?&H%x+" }, "number" }, + { { "-?%d+[%d%.eE]*" }, "number" }, + { { "-?%.?%d+f?" }, "number" }, + { { "[%a_][%w_]*%s*%f[(]" }, "function" }, + { { "[=><%+%-%*%^&:%.,_%(%)]" }, "operator" }, + { { "#?[%a_][%w_]*" }, "symbol" }, + + }, + { + + { "abs", "keyword" }, + { "access", "keyword" }, + { "acos", "keyword" }, + { "alias", "keyword" }, + { "allocate", "keyword" }, + { "alpha", "keyword" }, + { "and", "keyword" }, + { "andalso", "keyword" }, + { "any", "keyword" }, + { "append", "keyword" }, + { "as", "keyword" }, + { "asc", "keyword" }, + { "asin", "keyword" }, + { "asm", "keyword" }, + { "assert", "keyword" }, + { "assertwarn", "keyword" }, + { "atan2", "keyword" }, + { "atn", "keyword" }, + { "base", "keyword" }, + { "beep", "keyword" }, + { "bin", "keyword" }, + { "binary", "keyword" }, + { "bit", "keyword" }, + { "bitreset", "keyword" }, + { "bitset", "keyword" }, + { "bload", "keyword" }, + { "boolean", "keyword" }, + { "bsave", "keyword" }, + { "byref", "keyword" }, + { "byte", "keyword" }, + { "byval", "keyword" }, + { "call", "keyword" }, + { "callocate", "keyword" }, + { "case", "keyword" }, + { "cast", "keyword" }, + { "cbyte", "keyword" }, + { "cdbl", "keyword" }, + { "cdecl", "keyword" }, + { "chain", "keyword" }, + { "chdir", "keyword" }, + { "chr", "keyword" }, + { "cint", "keyword" }, + { "circle", "keyword" }, + { "class", "keyword" }, + { "clear", "keyword" }, + { "clng", "keyword" }, + { "clngint", "keyword" }, + { "close", "keyword" }, + { "cls", "keyword" }, + { "color", "keyword" }, + { "com", "keyword" }, + { "command", "keyword" }, + { "common", "keyword" }, + { "condbroadcast", "keyword" }, + { "condcreate", "keyword" }, + { "conddestroy", "keyword" }, + { "condsignal", "keyword" }, + { "condwait", "keyword" }, + { "cons", "keyword" }, + { "const", "keyword" }, + { "constructor", "keyword" }, + { "continue", "keyword" }, + { "cos", "keyword" }, + { "cptr", "keyword" }, + { "cshort", "keyword" }, + { "csign", "keyword" }, + { "csng", "keyword" }, + { "csrlin", "keyword" }, + { "cubyte", "keyword" }, + { "cuint", "keyword" }, + { "culng", "keyword" }, + { "culngint", "keyword" }, + { "cunsg", "keyword" }, + { "curdir", "keyword" }, + { "cushort", "keyword" }, + { "custom", "keyword" }, + { "cvd", "keyword" }, + { "cvi", "keyword" }, + { "cvl", "keyword" }, + { "cvlongint", "keyword" }, + { "cvs", "keyword" }, + { "cvshort", "keyword" }, + { "data", "keyword" }, + { "date", "keyword" }, + { "dateadd", "keyword" }, + { "datediff", "keyword" }, + { "datepart", "keyword" }, + { "dateserial", "keyword" }, + { "datevalue", "keyword" }, + { "day", "keyword" }, + { "deallocate", "keyword" }, + { "declare", "keyword" }, + { "defbyte", "keyword" }, + { "defdbl", "keyword" }, + { "define", "keyword" }, + { "defined", "keyword" }, + { "defint", "keyword" }, + { "deflng", "keyword" }, + { "deflngint", "keyword" }, + { "defshort", "keyword" }, + { "defsng", "keyword" }, + { "defstr", "keyword" }, + { "defubyte", "keyword" }, + { "defuint", "keyword" }, + { "defulngint", "keyword" }, + { "defushort", "keyword" }, + { "delete", "keyword" }, + { "destructor", "keyword" }, + { "dim", "keyword" }, + { "dir", "keyword" }, + { "do", "keyword" }, + { "double", "keyword" }, + { "draw", "keyword" }, + { "dylibfree", "keyword" }, + { "dylibload", "keyword" }, + { "dylibsymbol", "keyword" }, + { "dynamic", "keyword" }, + { "else", "keyword" }, + { "elseif", "keyword" }, + { "encoding", "keyword" }, + { "end", "keyword" }, + { "endif", "keyword" }, + { "endmacro", "keyword" }, + { "enum", "keyword" }, + { "environ", "keyword" }, + { "eof", "keyword" }, + { "eqv", "keyword" }, + { "erase", "keyword" }, + { "erfn", "keyword" }, + { "erl", "keyword" }, + { "ermn", "keyword" }, + { "err", "keyword" }, + { "error", "keyword" }, + { "escape", "keyword" }, + { "exec", "keyword" }, + { "exepath", "keyword" }, + { "exit", "keyword" }, + { "exp", "keyword" }, + { "explicit", "keyword" }, + { "export", "keyword" }, + { "extends", "keyword" }, + { "extern", "keyword" }, + { "false", "keyword" }, + { "fboolean", "keyword" }, + { "field", "keyword" }, + { "fileattr", "keyword" }, + { "filecopy", "keyword" }, + { "filedatetime", "keyword" }, + { "fileexists", "keyword" }, + { "filelen", "keyword" }, + { "fix", "keyword" }, + { "flip", "keyword" }, + { "for", "keyword" }, + { "format", "keyword" }, + { "frac", "keyword" }, + { "fre", "keyword" }, + { "freefile", "keyword" }, + { "function", "keyword" }, + { "get", "keyword" }, + { "getjoystick", "keyword" }, + { "getkey", "keyword" }, + { "getmouse", "keyword" }, + { "gosub", "keyword" }, + { "goto", "keyword" }, + { "hex", "keyword" }, + { "hibyte", "keyword" }, + { "hiword", "keyword" }, + { "hour", "keyword" }, + { "if", "keyword" }, + { "ifdef", "keyword" }, + { "ifndef", "keyword" }, + { "iif", "keyword" }, + { "imageconvertrow", "keyword" }, + { "imagecreate", "keyword" }, + { "imagedestroy", "keyword" }, + { "imp", "keyword" }, + { "import", "keyword" }, + { "inclib", "keyword" }, + { "include", "keyword" }, + { "inkey", "keyword" }, + { "inp", "keyword" }, + { "input", "keyword" }, + { "instr", "keyword" }, + { "instrrev", "keyword" }, + { "int", "keyword" }, + { "integer", "keyword" }, + { "interface", "keyword" }, + { "is", "keyword" }, + { "isdate", "keyword" }, + { "kill", "keyword" }, + { "lang", "keyword" }, + { "lbound", "keyword" }, + { "lcase", "keyword" }, + { "left", "keyword" }, + { "len", "keyword" }, + { "let", "keyword" }, + { "lib", "keyword" }, + { "libpath", "keyword" }, + { "line", "keyword" }, + { "lobyte", "keyword" }, + { "loc", "keyword" }, + { "local", "keyword" }, + { "locate", "keyword" }, + { "lock", "keyword" }, + { "lof", "keyword" }, + { "log", "keyword" }, + { "long", "keyword" }, + { "longint", "keyword" }, + { "loop", "keyword" }, + { "loword", "keyword" }, + { "lpos", "keyword" }, + { "lprint", "keyword" }, + { "lpt", "keyword" }, + { "lset", "keyword" }, + { "ltrim", "keyword" }, + { "macro", "keyword" }, + { "mid", "keyword" }, + { "minute", "keyword" }, + { "mkd", "keyword" }, + { "mkdir", "keyword" }, + { "mki", "keyword" }, + { "mkl", "keyword" }, + { "mklongint", "keyword" }, + { "mks", "keyword" }, + { "mkshort", "keyword" }, + { "mod", "keyword" }, + { "month", "keyword" }, + { "monthname", "keyword" }, + { "multikey", "keyword" }, + { "mutexcreate", "keyword" }, + { "mutexdestroy", "keyword" }, + { "mutexlock", "keyword" }, + { "mutexunlock", "keyword" }, + { "name", "keyword" }, + { "namespace", "keyword" }, + { "new", "keyword" }, + { "next", "keyword" }, + { "nokeyword", "keyword" }, + { "not", "keyword" }, + { "now", "keyword" }, + { "object", "keyword" }, + { "oct", "keyword" }, + { "offsetof", "keyword" }, + { "on", "keyword" }, + { "once", "keyword" }, + { "open", "keyword" }, + { "operator", "keyword" }, + { "option", "keyword" }, + { "or", "keyword" }, + { "orelse", "keyword" }, + { "out", "keyword" }, + { "output", "keyword" }, + { "overload", "keyword" }, + { "paint", "keyword" }, + { "palette", "keyword" }, + { "pascal", "keyword" }, + { "pcopy", "keyword" }, + { "peek", "keyword" }, + { "pipe", "keyword" }, + { "pmap", "keyword" }, + { "point", "keyword" }, + { "pointer", "keyword" }, + { "poke", "keyword" }, + { "pos", "keyword" }, + { "pragma", "keyword" }, + { "preserve", "keyword" }, + { "preset", "keyword" }, + { "print", "keyword" }, + { "private", "keyword" }, + { "procptr", "keyword" }, + { "property", "keyword" }, + { "protected", "keyword" }, + { "pset", "keyword" }, + { "ptr", "keyword" }, + { "public", "keyword" }, + { "put", "keyword" }, + { "random", "keyword" }, + { "randomize", "keyword" }, + { "read", "keyword" }, + { "reallocate", "keyword" }, + { "redim", "keyword" }, + { "reset", "keyword" }, + { "restore", "keyword" }, + { "resume", "keyword" }, + { "return", "keyword" }, + { "rgb", "keyword" }, + { "rgba", "keyword" }, + { "right", "keyword" }, + { "rmdir", "keyword" }, + { "rnd", "keyword" }, + { "rset", "keyword" }, + { "rtrim", "keyword" }, + { "run", "keyword" }, + { "sadd", "keyword" }, + { "scope", "keyword" }, + { "screen", "keyword" }, + { "screencontrol", "keyword" }, + { "screencopy", "keyword" }, + { "screenevent", "keyword" }, + { "screenglproc", "keyword" }, + { "screeninfo", "keyword" }, + { "screenlist", "keyword" }, + { "screenlock", "keyword" }, + { "screenptr", "keyword" }, + { "screenres", "keyword" }, + { "screenset", "keyword" }, + { "screensync", "keyword" }, + { "screenunlock", "keyword" }, + { "scrn", "keyword" }, + { "second", "keyword" }, + { "seek", "keyword" }, + { "select", "keyword" }, + { "setdate", "keyword" }, + { "setenviron", "keyword" }, + { "setmouse", "keyword" }, + { "settime", "keyword" }, + { "sgn", "keyword" }, + { "shared", "keyword" }, + { "shell", "keyword" }, + { "shl", "keyword" }, + { "short", "keyword" }, + { "shr", "keyword" }, + { "sin", "keyword" }, + { "single", "keyword" }, + { "sizeof", "keyword" }, + { "sleep", "keyword" }, + { "space", "keyword" }, + { "spc", "keyword" }, + { "sqr", "keyword" }, + { "static", "keyword" }, + { "stdcall", "keyword" }, + { "step", "keyword" }, + { "stop", "keyword" }, + { "str", "keyword" }, + { "string", "keyword" }, + { "strptr", "keyword" }, + { "sub", "keyword" }, + { "swap", "keyword" }, + { "system", "keyword" }, + { "tab", "keyword" }, + { "tan", "keyword" }, + { "then", "keyword" }, + { "this", "keyword" }, + { "threadcreate", "keyword" }, + { "threadwait", "keyword" }, + { "time", "keyword" }, + { "timer", "keyword" }, + { "timeserial", "keyword" }, + { "timevalue", "keyword" }, + { "to", "keyword" }, + { "trans", "keyword" }, + { "trim", "keyword" }, + { "true", "keyword" }, + { "type", "keyword" }, + { "typeof", "keyword" }, + { "ubound", "keyword" }, + { "ubyte", "keyword" }, + { "ucase", "keyword" }, + { "uinteger", "keyword" }, + { "ulong", "keyword" }, + { "ulongint", "keyword" }, + { "undef", "keyword" }, + { "union", "keyword" }, + { "unlock", "keyword" }, + { "unsigned", "keyword" }, + { "until", "keyword" }, + { "ushort", "keyword" }, + { "using", "keyword" }, + { "va_arg", "keyword" }, + { "va_first", "keyword" }, + { "va_next", "keyword" }, + { "val", "keyword" }, + { "valint", "keyword" }, + { "vallng", "keyword" }, + { "valuint", "keyword" }, + { "valulng", "keyword" }, + { "var", "keyword" }, + { "varptr", "keyword" }, + { "view", "keyword" }, + { "virtual", "keyword" }, + { "wait", "keyword" }, + { "wbin", "keyword" }, + { "wchr", "keyword" }, + { "weekday", "keyword" }, + { "weekdayname", "keyword" }, + { "wend", "keyword" }, + { "whex", "keyword" }, + { "while", "keyword" }, + { "width", "keyword" }, + { "window", "keyword" }, + { "windowtitle", "keyword" }, + { "winput", "keyword" }, + { "with", "keyword" }, + { "woct", "keyword" }, + { "write", "keyword" }, + { "wspace", "keyword" }, + { "wstr", "keyword" }, + { "wstring", "keyword" }, + { "xor", "keyword" }, + { "year", "keyword" }, + { "zstring", "keyword" }, + + { "#if", "keyword" }, + { "#ifdef", "keyword" }, + { "#ifndef", "keyword" }, + { "#elseif", "keyword" }, + { "#elseifdef", "keyword" }, + { "#elseifndef", "keyword" }, + { "#else", "keyword" }, + { "#endif", "keyword" }, + { "#define", "keyword" }, + { "#macro", "keyword" }, + { "#endmacro", "keyword" }, + { "#undef", "keyword" }, + { "#include", "keyword" }, + { "#include once", "keyword" }, + { "#inclib", "keyword" }, + { "#libpath", "keyword" }, + { "#pragma", "keyword" }, + { "#pragma reserve", "keyword" }, + { "#cmdline", "keyword" }, + { "#lang", "keyword" }, + { "#print", "keyword" }, + { "#error", "keyword" }, + { "#assert", "keyword" }, + { "#line", "keyword" }, + + }, + "'", + {} + + } ); + + sd.setCaseInsensitive( true ); + return sd; +} + +}}}} // namespace EE::UI::Doc::Language diff --git a/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/freebasic.hpp b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/freebasic.hpp new file mode 100644 index 000000000..dfde6b7a3 --- /dev/null +++ b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/freebasic.hpp @@ -0,0 +1,12 @@ +#ifndef EE_UI_DOC_FREEBASIC +#define EE_UI_DOC_FREEBASIC + +#include + +namespace EE { namespace UI { namespace Doc { namespace Language { + +extern SyntaxDefinition& addFreeBASIC(); + +}}}} // namespace EE::UI::Doc::Language + +#endif diff --git a/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/qb64.cpp b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/qb64.cpp new file mode 100644 index 000000000..a58bb42aa --- /dev/null +++ b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/qb64.cpp @@ -0,0 +1,926 @@ +#include +#include + +namespace EE { namespace UI { namespace Doc { namespace Language { + +SyntaxDefinition& addQB64() { + + auto& sd = SyntaxDefinitionManager::instance()->add( + + { "QB64", + { "%.bas$", "%.bi$", "%.bm$" }, + { + { { "'.*" }, "comment" }, + { { "rem%s.*" }, "comment" }, + { { "\"", "\"" }, "string" }, + { { "-?&H%x+" }, "number" }, + { { "-?%d+[%d%.eE]*" }, "number" }, + { { "-?%.?%d+f?" }, "number" }, + { { "[%a_][%w_]%$?*%s*%f[(]" }, "function" }, + { { "[%-%(%)%*%,%.%/%:%;%\\%^%+%>%<%=]" }, "operator" }, + { { "[$_]?[%a_][%w_]*[$&`%%]*" }, "symbol" }, + + }, + { + + { "$asserts", "keyword" }, + { "$checking", "keyword" }, + { "$color", "keyword" }, + { "$console", "keyword" }, + { "$debug", "keyword" }, + { "$else", "keyword" }, + { "$elseif", "keyword" }, + { "$embed", "keyword" }, + { "$end", "keyword" }, + { "$error", "keyword" }, + { "$exeicon", "keyword" }, + { "$if", "keyword" }, + { "$includeonce", "keyword" }, + { "$let", "keyword" }, + { "$resize", "keyword" }, + { "$screenhide", "keyword" }, + { "$screenshow", "keyword" }, + { "$unstable", "keyword" }, + { "$uselibrary", "keyword" }, + { "$versioninfo", "keyword" }, + { "abs", "function" }, + { "absolute", "keyword" }, + { "access", "keyword" }, + { "alias", "keyword" }, + { "and", "keyword" }, + { "any", "keyword" }, + { "append", "keyword" }, + { "as", "keyword" }, + { "asc", "function" }, + { "atn", "function" }, + { "base", "keyword" }, + { "beep", "keyword" }, + { "binary", "keyword" }, + { "bload", "keyword" }, + { "bsave", "keyword" }, + { "byval", "keyword" }, + { "call", "keyword" }, + { "calls", "keyword" }, + { "case", "keyword" }, + { "cdbl", "keyword" }, + { "cdecl", "keyword" }, + { "chain", "keyword" }, + { "chdir", "keyword" }, + { "chr$", "function" }, + { "cint", "function" }, + { "circle", "keyword" }, + { "clear", "keyword" }, + { "clng", "function" }, + { "close", "keyword" }, + { "cls", "keyword" }, + { "color", "keyword" }, + { "com", "keyword" }, + { "command$", "function" }, + { "common", "keyword" }, + { "console", "keyword" }, + { "const", "keyword" }, + { "cos", "function" }, + { "csng", "function" }, + { "csrlin", "keyword" }, + { "customtype", "keyword" }, + { "cvd", "function" }, + { "cvdmbf", "function" }, + { "cvi", "function" }, + { "cvl", "function" }, + { "cvs", "function" }, + { "cvsmbf", "function" }, + { "data", "keyword" }, + { "date$", "function" }, + { "declare", "keyword" }, + { "def", "keyword" }, + { "defdbl", "keyword" }, + { "defint", "keyword" }, + { "deflng", "keyword" }, + { "defsng", "keyword" }, + { "defstr", "keyword" }, + { "dim", "keyword" }, + { "do", "keyword" }, + { "double", "keyword" }, + { "draw", "keyword" }, + { "dynamic", "keyword" }, + { "else", "keyword" }, + { "elseif", "keyword" }, + { "end", "keyword" }, + { "environ", "keyword" }, + { "environ$", "function" }, + { "eof", "function" }, + { "eqv", "keyword" }, + { "erase", "keyword" }, + { "erdev", "function" }, + { "erdev$", "function" }, + { "erl", "function" }, + { "err", "function" }, + { "error", "keyword" }, + { "everycase", "keyword" }, + { "exit", "keyword" }, + { "exp", "function" }, + { "field", "keyword" }, + { "fileattr", "function" }, + { "files", "keyword" }, + { "fix", "function" }, + { "fn", "keyword" }, + { "for", "keyword" }, + { "fre", "function" }, + { "free", "keyword" }, + { "freefile", "function" }, + { "function", "keyword" }, + { "get", "keyword" }, + { "gosub", "keyword" }, + { "goto", "keyword" }, + { "hex$", "function" }, + { "if", "keyword" }, + { "imp", "keyword" }, + { "inkey$", "function" }, + { "inp", "function" }, + { "input", "keyword" }, + { "input$", "function" }, + { "instr", "function" }, + { "int", "function" }, + { "integer", "keyword" }, + { "interrupt", "keyword" }, + { "interruptx", "keyword" }, + { "ioctl", "keyword" }, + { "ioctl$", "keyword" }, + { "is", "keyword" }, + { "key", "keyword" }, + { "kill", "keyword" }, + { "lbound", "function" }, + { "lcase$", "function" }, + { "left$", "function" }, + { "len", "function" }, + { "let", "keyword" }, + { "library", "keyword" }, + { "line", "keyword" }, + { "list", "keyword" }, + { "loc", "function" }, + { "locate", "keyword" }, + { "lock", "keyword" }, + { "lof", "function" }, + { "log", "function" }, + { "long", "keyword" }, + { "loop", "keyword" }, + { "lpos", "function" }, + { "lprint", "keyword" }, + { "lset", "keyword" }, + { "ltrim$", "function" }, + { "mid$", "function" }, + { "mkd$", "function" }, + { "mkdir", "keyword" }, + { "mkdmbf$", "function" }, + { "mki$", "function" }, + { "mkl$", "function" }, + { "mks$", "function" }, + { "mksmbf$", "function" }, + { "mod", "keyword" }, + { "name", "keyword" }, + { "next", "keyword" }, + { "not", "keyword" }, + { "oct$", "function" }, + { "off", "keyword" }, + { "on", "keyword" }, + { "only", "keyword" }, + { "open", "keyword" }, + { "option", "keyword" }, + { "or", "keyword" }, + { "out", "keyword" }, + { "output", "keyword" }, + { "paint", "keyword" }, + { "palette", "keyword" }, + { "pcopy", "keyword" }, + { "peek", "function" }, + { "pen", "function" }, + { "play", "keyword" }, + { "pmap", "keyword" }, + { "point", "function" }, + { "poke", "keyword" }, + { "pos", "function" }, + { "preset", "keyword" }, + { "print", "keyword" }, + { "pset", "keyword" }, + { "put", "keyword" }, + { "random", "keyword" }, + { "randomize", "keyword" }, + { "read", "keyword" }, + { "redim", "keyword" }, + { "reset", "keyword" }, + { "restore", "keyword" }, + { "resume", "keyword" }, + { "return", "keyword" }, + { "right$", "function" }, + { "rmdir", "keyword" }, + { "rnd", "function" }, + { "rset", "keyword" }, + { "rtrim$", "function" }, + { "run", "keyword" }, + { "sadd", "keyword" }, + { "screen", "keyword" }, + { "seek", "keyword" }, + { "seg", "keyword" }, + { "select", "keyword" }, + { "setmem", "keyword" }, + { "sgn", "function" }, + { "shared", "keyword" }, + { "shell", "keyword" }, + { "signal", "keyword" }, + { "sin", "function" }, + { "single", "keyword" }, + { "sleep", "keyword" }, + { "smooth", "keyword" }, + { "sound", "keyword" }, + { "space$", "function" }, + { "spc", "keyword" }, + { "sqr", "function" }, + { "static", "keyword" }, + { "step", "keyword" }, + { "stick", "keyword" }, + { "stop", "keyword" }, + { "str$", "function" }, + { "stretch", "keyword" }, + { "strig", "function" }, + { "string", "keyword" }, + { "string$", "function" }, + { "sub", "keyword" }, + { "swap", "keyword" }, + { "system", "keyword" }, + { "tab", "function" }, + { "tan", "function" }, + { "then", "keyword" }, + { "time$", "function" }, + { "timer", "function" }, + { "to", "keyword" }, + { "troff", "keyword" }, + { "tron", "keyword" }, + { "type", "keyword" }, + { "ubound", "function" }, + { "ucase$", "function" }, + { "uevent", "keyword" }, + { "unlock", "keyword" }, + { "until", "keyword" }, + { "using", "keyword" }, + { "val", "function" }, + { "varptr", "function" }, + { "varptr$", "function" }, + { "varseg", "function" }, + { "view", "keyword" }, + { "wait", "keyword" }, + { "wend", "keyword" }, + { "while", "keyword" }, + { "width", "keyword" }, + { "window", "keyword" }, + { "write", "keyword" }, + { "xor", "keyword" }, + { "_acceptfiledrop", "keyword" }, + { "_acos", "function" }, + { "_acosh", "function" }, + { "_adler32", "keyword" }, + { "_all", "keyword" }, + { "_allowfullscreen", "keyword" }, + { "_alpha", "function" }, + { "_alpha32", "function" }, + { "_andalso", "keyword" }, + { "_anticlockwise", "keyword" }, + { "_arccot", "function" }, + { "_arccsc", "function" }, + { "_arcsec", "function" }, + { "_asin", "function" }, + { "_asinh", "function" }, + { "_assert", "keyword" }, + { "_atan2", "function" }, + { "_atanh", "function" }, + { "_auto", "keyword" }, + { "_autodisplay", "keyword" }, + { "_axis", "keyword" }, + { "_backgroundcolor", "function" }, + { "_base64decode$", "function" }, + { "_base64encode$", "function" }, + { "_behind", "keyword" }, + { "_bin$", "function" }, + { "_bit", "keyword" }, + { "_blend", "keyword" }, + { "_blink", "keyword" }, + { "_blue", "function" }, + { "_blue32", "function" }, + { "_brightness32", "keyword" }, + { "_button", "function" }, + { "_buttonchange", "function" }, + { "_byte", "keyword" }, + { "_capslock", "function" }, + { "_cast", "function" }, + { "_ceil", "function" }, + { "_cinp", "keyword" }, + { "_clamp", "keyword" }, + { "_clear", "keyword" }, + { "_clearcolor", "keyword" }, + { "_clip", "keyword" }, + { "_clipboard$", "function" }, + { "_clipboardimage", "function" }, + { "_clockwise", "keyword" }, + { "_colorchooserdialog", "function" }, + { "_commandcount", "function" }, + { "_connected", "function" }, + { "_connectionaddress", "function" }, + { "_connectionaddress$", "function" }, + { "_console", "keyword" }, + { "_consolecursor", "keyword" }, + { "_consolefont", "keyword" }, + { "_consoleinput", "function" }, + { "_consoletitle", "keyword" }, + { "_continue", "keyword" }, + { "_controlchr", "function" }, + { "_copyimage", "function" }, + { "_copypalette", "keyword" }, + { "_cosh", "function" }, + { "_cot", "function" }, + { "_coth", "function" }, + { "_crc32", "function" }, + { "_csc", "function" }, + { "_csch", "function" }, + { "_cv", "function" }, + { "_cwd$", "function" }, + { "_d2g", "function" }, + { "_d2r", "function" }, + { "_decodeurl$", "function" }, + { "_defaultcolor", "function" }, + { "_define", "keyword" }, + { "_deflate$", "function" }, + { "_delay", "keyword" }, + { "_depthbuffer", "function" }, + { "_desktopheight", "function" }, + { "_desktopwidth", "function" }, + { "_dest", "keyword" }, + { "_device$", "function" }, + { "_deviceinput", "function" }, + { "_devices", "function" }, + { "_dir$", "function" }, + { "_direxists", "function" }, + { "_display", "keyword" }, + { "_displayorder", "keyword" }, + { "_dontblend", "keyword" }, + { "_dontwait", "keyword" }, + { "_droppedfile", "function" }, + { "_droppedfile$", "function" }, + { "_echo", "keyword" }, + { "_embedded$", "function" }, + { "_encodeurl$", "function" }, + { "_environcount", "function" }, + { "_errorline", "function" }, + { "_errormessage$", "function" }, + { "_exit", "function" }, + { "_explicit", "keyword" }, + { "_explicitarray", "keyword" }, + { "_fileexists", "function" }, + { "_files$", "function" }, + { "_fillbackground", "keyword" }, + { "_finishdrop", "keyword" }, + { "_float", "keyword" }, + { "_font", "keyword" }, + { "_fontheight", "function" }, + { "_fontwidth", "function" }, + { "_fps", "function" }, + { "_freefont", "keyword" }, + { "_freeimage", "keyword" }, + { "_freetimer", "keyword" }, + { "_fullpath$", "function" }, + { "_fullscreen", "keyword" }, + { "_g2d", "function" }, + { "_g2r", "function" }, + { "_glrender", "keyword" }, + { "_green", "function" }, + { "_green32", "function" }, + { "_hardware", "keyword" }, + { "_hardware1", "keyword" }, + { "_height", "function" }, + { "_hide", "keyword" }, + { "_hsb32", "function" }, + { "_hsba32", "function" }, + { "_hue32", "function" }, + { "_hypot", "function" }, + { "_icon", "keyword" }, + { "_iif", "function" }, + { "_inclerrorfile$", "function" }, + { "_inclerrorline", "function" }, + { "_inflate$", "function" }, + { "_inputbox$", "function" }, + { "_instrrev", "function" }, + { "_integer64", "keyword" }, + { "_keepbackground", "keyword" }, + { "_keyclear", "keyword" }, + { "_keydown", "function" }, + { "_keyhit", "function" }, + { "_lastaxis", "function" }, + { "_lastbutton", "function" }, + { "_lasthandler", "keyword" }, + { "_lastwheel", "function" }, + { "_limit", "keyword" }, + { "_loadfont", "function" }, + { "_loadimage", "function" }, + { "_logtrace", "keyword" }, + { "_loginfo", "keyword" }, + { "_logwarn", "keyword" }, + { "_logerror", "keyword" }, + { "_logminlevel", "keyword" }, + { "_maptriangle", "keyword" }, + { "_max", "function" }, + { "_mapunicode", "keyword" }, + { "_md5$", "function" }, + { "_mem", "keyword" }, + { "_memcopy", "keyword" }, + { "_memelement", "function" }, + { "_memexists", "function" }, + { "_memfill", "keyword" }, + { "_memfree", "keyword" }, + { "_memget", "keyword" }, + { "_memimage", "function" }, + { "_memnew", "function" }, + { "_memput", "keyword" }, + { "_memsound", "function" }, + { "_messagebox", "function" }, + { "_middle", "keyword" }, + { "_midisoundbank", "function" }, + { "_min", "function" }, + { "_mk$", "function" }, + { "_mousebutton", "function" }, + { "_mousehidden", "function" }, + { "_mousehide", "keyword" }, + { "_mouseinput", "function" }, + { "_mousemove", "keyword" }, + { "_mousemovementx", "function" }, + { "_mousemovementy", "function" }, + { "_mouseshow", "keyword" }, + { "_mousewheel", "function" }, + { "_mousex", "function" }, + { "_mousey", "function" }, + { "_negate", "keyword" }, + { "_newhandler", "keyword" }, + { "_newimage", "function" }, + { "_none", "keyword" }, + { "_notifypopup", "keyword" }, + { "_numlock", "function" }, + { "_off", "keyword" }, + { "_offset", "function" }, + { "_only", "keyword" }, + { "_onlybackground", "keyword" }, + { "_ontop", "keyword" }, + { "_openclient", "function" }, + { "_openconnection", "function" }, + { "_openfiledialog$", "function" }, + { "_openhost", "function" }, + { "_orelse", "keyword" }, + { "_os$", "function" }, + { "_palettecolor", "function" }, + { "_pi", "function" }, + { "_pixelsize", "function" }, + { "_preserve", "keyword" }, + { "_printimage", "keyword" }, + { "_printmode", "keyword" }, + { "_printstring", "keyword" }, + { "_printwidth", "function" }, + { "_putimage", "keyword" }, + { "_r2d", "function" }, + { "_r2g", "function" }, + { "_readbit", "function" }, + { "_readfile$", "function" }, + { "_red", "function" }, + { "_red32", "function" }, + { "_resetbit", "function" }, + { "_resize", "keyword" }, + { "_resizeheight", "function" }, + { "_resizewidth", "function" }, + { "_rgb", "function" }, + { "_rgb32", "function" }, + { "_rgba", "function" }, + { "_rgba32", "function" }, + { "_rol", "function" }, + { "_ror", "function" }, + { "_round", "function" }, + { "_saturation32", "function" }, + { "_savefiledialog$", "function" }, + { "_saveimage", "keyword" }, + { "_scaledheight", "function" }, + { "_scaledwidth", "function" }, + { "_screenclick", "keyword" }, + { "_screenexists", "function" }, + { "_screenhide", "keyword" }, + { "_screenicon", "function" }, + { "_screenimage", "function" }, + { "_screenmove", "keyword" }, + { "_screenprint", "keyword" }, + { "_screenshow", "keyword" }, + { "_screenx", "function" }, + { "_screeny", "function" }, + { "_scrolllock", "function" }, + { "_seamless", "keyword" }, + { "_sec", "function" }, + { "_sech", "function" }, + { "_selectfolderdialog$", "function" }, + { "_setalpha", "keyword" }, + { "_setbit", "function" }, + { "_shellhide", "keyword" }, + { "_shl", "function" }, + { "_show", "keyword" }, + { "_shr", "function" }, + { "_sinh", "function" }, + { "_smooth", "keyword" }, + { "_smoothshrunk", "keyword" }, + { "_smoothstretched", "keyword" }, + { "_sndbal", "keyword" }, + { "_sndclose", "keyword" }, + { "_sndcopy", "function" }, + { "_sndgetpos", "function" }, + { "_sndlen", "function" }, + { "_sndlimit", "keyword" }, + { "_sndloop", "keyword" }, + { "_sndnew", "function" }, + { "_sndopen", "function" }, + { "_sndopenraw", "function" }, + { "_sndpause", "keyword" }, + { "_sndpaused", "function" }, + { "_sndplay", "keyword" }, + { "_sndplaycopy", "keyword" }, + { "_sndplayfile", "keyword" }, + { "_sndplaying", "function" }, + { "_sndrate", "function" }, + { "_sndraw", "keyword" }, + { "_sndrawbatch", "keyword" }, + { "_sndrawdone", "keyword" }, + { "_sndrawlen", "function" }, + { "_sndsetpos", "keyword" }, + { "_sndstop", "keyword" }, + { "_sndvol", "keyword" }, + { "_software", "keyword" }, + { "_source", "function" }, + { "_squarepixels", "keyword" }, + { "_startdir$", "function" }, + { "_statuscode", "function" }, + { "_strcmp", "function" }, + { "_stretch", "keyword" }, + { "_stricmp", "function" }, + { "_tanh", "function" }, + { "_title", "keyword" }, + { "_title$", "function" }, + { "_toggle", "keyword" }, + { "_togglebit", "function" }, + { "_tostr$", "function" }, + { "_totaldroppedfiles", "function" }, + { "_trim$", "function" }, + { "_ucharpos", "function" }, + { "_ufontheight", "function" }, + { "_ulinespacing", "function" }, + { "_unsigned", "keyword" }, + { "_uprintstring", "keyword" }, + { "_uprintwidth", "function" }, + { "_wave", "keyword" }, + { "_wheel", "function" }, + { "_width", "function" }, + { "_windowhandle", "function" }, + { "_windowhasfocus", "function" }, + { "_writefile", "keyword" }, + + { "32bit", "literal" }, + { "64bit", "literal" }, + { "_arm_", "literal" }, + { "_asserts_", "literal" }, + { "_console_", "literal" }, + { "_debug_", "literal" }, + { "defined", "literal" }, + { "_explicit_", "literal" }, + { "_explicitarray_", "literal" }, + { "linux", "literal" }, + { "mac", "literal" }, + { "macosx", "literal" }, + { "_qb64pe_", "literal" }, + { "undefined", "literal" }, + { "version", "literal" }, + { "win", "literal" }, + { "windows", "literal" }, + { "_asc_ack", "literal" }, + { "_asc_ampersand", "literal" }, + { "_asc_apostrophe", "literal" }, + { "_asc_asterisk", "literal" }, + { "_asc_atsign", "literal" }, + { "_asc_backslash", "literal" }, + { "_asc_bel", "literal" }, + { "_asc_bs", "literal" }, + { "_asc_can", "literal" }, + { "_asc_caret", "literal" }, + { "_asc_colon", "literal" }, + { "_asc_comma", "literal" }, + { "_asc_cr", "literal" }, + { "_asc_dc1", "literal" }, + { "_asc_dc2", "literal" }, + { "_asc_dc3", "literal" }, + { "_asc_dc4", "literal" }, + { "_asc_del", "literal" }, + { "_asc_dle", "literal" }, + { "_asc_dollar", "literal" }, + { "_asc_em", "literal" }, + { "_asc_enq", "literal" }, + { "_asc_eot", "literal" }, + { "_asc_equal", "literal" }, + { "_asc_esc", "literal" }, + { "_asc_etb", "literal" }, + { "_asc_etx", "literal" }, + { "_asc_exclamation", "literal" }, + { "_asc_ff", "literal" }, + { "_asc_forwardslash", "literal" }, + { "_asc_fs", "literal" }, + { "_asc_fullstop", "literal" }, + { "_asc_grave", "literal" }, + { "_asc_greaterthan", "literal" }, + { "_asc_gs", "literal" }, + { "_asc_hash", "literal" }, + { "_asc_ht", "literal" }, + { "_asc_leftbracket", "literal" }, + { "_asc_leftcurlybracket", "literal" }, + { "_asc_leftsquarebracket", "literal" }, + { "_asc_lessthan", "literal" }, + { "_asc_lf", "literal" }, + { "_asc_minus", "literal" }, + { "_asc_nak", "literal" }, + { "_asc_nul", "literal" }, + { "_asc_percent", "literal" }, + { "_asc_plus", "literal" }, + { "_asc_question", "literal" }, + { "_asc_quote", "literal" }, + { "_asc_rightbracket", "literal" }, + { "_asc_rightcurlybracket", "literal" }, + { "_asc_rightsquarebracket", "literal" }, + { "_asc_rs", "literal" }, + { "_asc_semicolon", "literal" }, + { "_asc_si", "literal" }, + { "_asc_so", "literal" }, + { "_asc_soh", "literal" }, + { "_asc_space", "literal" }, + { "_asc_stx", "literal" }, + { "_asc_sub", "literal" }, + { "_asc_syn", "literal" }, + { "_asc_tilde", "literal" }, + { "_asc_underscore", "literal" }, + { "_asc_us", "literal" }, + { "_asc_verticalbar", "literal" }, + { "_asc_vt", "literal" }, + { "_bit_max`", "literal" }, + { "_bit_min`", "literal" }, + { "_byte_max%%", "literal" }, + { "_byte_min%%", "literal" }, + { "_chr_ack", "literal" }, + { "_chr_ampersand", "literal" }, + { "_chr_apostrophe", "literal" }, + { "_chr_asterisk", "literal" }, + { "_chr_atsign", "literal" }, + { "_chr_backslash", "literal" }, + { "_chr_bel", "literal" }, + { "_chr_bs", "literal" }, + { "_chr_can", "literal" }, + { "_chr_caret", "literal" }, + { "_chr_colon", "literal" }, + { "_chr_comma", "literal" }, + { "_chr_cr", "literal" }, + { "_chr_dc1", "literal" }, + { "_chr_dc2", "literal" }, + { "_chr_dc3", "literal" }, + { "_chr_dc4", "literal" }, + { "_chr_del", "literal" }, + { "_chr_dle", "literal" }, + { "_chr_dollar", "literal" }, + { "_chr_em", "literal" }, + { "_chr_enq", "literal" }, + { "_chr_eot", "literal" }, + { "_chr_equal", "literal" }, + { "_chr_esc", "literal" }, + { "_chr_etb", "literal" }, + { "_chr_etx", "literal" }, + { "_chr_exclamation", "literal" }, + { "_chr_ff", "literal" }, + { "_chr_forwardslash", "literal" }, + { "_chr_fs", "literal" }, + { "_chr_fullstop", "literal" }, + { "_chr_grave", "literal" }, + { "_chr_greaterthan", "literal" }, + { "_chr_gs", "literal" }, + { "_chr_hash", "literal" }, + { "_chr_ht", "literal" }, + { "_chr_leftbracket", "literal" }, + { "_chr_leftcurlybracket", "literal" }, + { "_chr_leftsquarebracket", "literal" }, + { "_chr_lessthan", "literal" }, + { "_chr_lf", "literal" }, + { "_chr_minus", "literal" }, + { "_chr_nak", "literal" }, + { "_chr_nul", "literal" }, + { "_chr_percent", "literal" }, + { "_chr_plus", "literal" }, + { "_chr_question", "literal" }, + { "_chr_quote", "literal" }, + { "_chr_rightbracket", "literal" }, + { "_chr_rightcurlybracket", "literal" }, + { "_chr_rightsquarebracket", "literal" }, + { "_chr_rs", "literal" }, + { "_chr_semicolon", "literal" }, + { "_chr_si", "literal" }, + { "_chr_so", "literal" }, + { "_chr_soh", "literal" }, + { "_chr_space", "literal" }, + { "_chr_stx", "literal" }, + { "_chr_sub", "literal" }, + { "_chr_syn", "literal" }, + { "_chr_tilde", "literal" }, + { "_chr_underscore", "literal" }, + { "_chr_us", "literal" }, + { "_chr_verticalbar", "literal" }, + { "_chr_vt", "literal" }, + { "_client_failed", "literal" }, + { "_connection_failed", "literal" }, + { "_days_in_leapyear", "literal" }, + { "_days_in_week", "literal" }, + { "_days_in_year", "literal" }, + { "_double_max#", "literal" }, + { "_double_min#", "literal" }, + { "_double_min_frac#", "literal" }, + { "_e##", "literal" }, + { "_equal", "literal" }, + { "_err_argument_count_mismatch", "literal" }, + { "_err_array_not_defined", "literal" }, + { "_err_bad_file_mode", "literal" }, + { "_err_bad_file_name", "literal" }, + { "_err_bad_file_name_or_number", "literal" }, + { "_err_bad_record_length", "literal" }, + { "_err_bad_record_number", "literal" }, + { "_err_cannot_continue", "literal" }, + { "_err_communication_buffer_overflow", "literal" }, + { "_err_device_fault", "literal" }, + { "_err_device_io_error", "literal" }, + { "_err_device_timeout", "literal" }, + { "_err_device_unavailable", "literal" }, + { "_err_disk_full", "literal" }, + { "_err_disk_media_error", "literal" }, + { "_err_disk_not_ready", "literal" }, + { "_err_division_by_zero", "literal" }, + { "_err_duplicate_definition", "literal" }, + { "_err_duplicate_label", "literal" }, + { "_err_feature_unavailable", "literal" }, + { "_err_field_overflow", "literal" }, + { "_err_field_statement_active", "literal" }, + { "_err_file_already_exists", "literal" }, + { "_err_file_already_open", "literal" }, + { "_err_file_not_found", "literal" }, + { "_err_for_without_next", "literal" }, + { "_err_function_not_defined", "literal" }, + { "_err_illegal_function_call", "literal" }, + { "_err_illegal_in_direct_mode", "literal" }, + { "_err_input_past_end_of_file", "literal" }, + { "_err_internal_error", "literal" }, + { "_err_invalid_handle", "literal" }, + { "_err_label_not_defined", "literal" }, + { "_err_next_without_for", "literal" }, + { "_err_no_resume", "literal" }, + { "_err_none", "literal" }, + { "_err_out_of_data", "literal" }, + { "_err_out_of_memory", "literal" }, + { "_err_out_of_paper", "literal" }, + { "_err_out_of_string_space", "literal" }, + { "_err_overflow", "literal" }, + { "_err_path_file_access_error", "literal" }, + { "_err_path_not_found", "literal" }, + { "_err_permission_denied", "literal" }, + { "_err_rename_across_disks", "literal" }, + { "_err_resume_without_error", "literal" }, + { "_err_return_without_gosub", "literal" }, + { "_err_string_formula_too_complex", "literal" }, + { "_err_subprogram_not_defined", "literal" }, + { "_err_subscript_out_of_range", "literal" }, + { "_err_syntax_error", "literal" }, + { "_err_too_many_files", "literal" }, + { "_err_type_mismatch", "literal" }, + { "_err_variable_required", "literal" }, + { "_err_wend_without_while", "literal" }, + { "_err_while_without_wend", "literal" }, + { "_false", "literal" }, + { "_float_max##", "literal" }, + { "_float_min##", "literal" }, + { "_float_min_frac##", "literal" }, + { "_greater", "literal" }, + { "_host_failed", "literal" }, + { "_hours_in_day", "literal" }, + { "_hours_in_leapyear", "literal" }, + { "_hours_in_week", "literal" }, + { "_hours_in_year", "literal" }, + { "_integer64_max&&", "literal" }, + { "_integer64_min&&", "literal" }, + { "_integer_max%", "literal" }, + { "_integer_min%", "literal" }, + { "_invalid_image", "literal" }, + { "_key_backspace", "literal" }, + { "_key_delete", "literal" }, + { "_key_down", "literal" }, + { "_key_end", "literal" }, + { "_key_enter", "literal" }, + { "_key_esc", "literal" }, + { "_key_f1", "literal" }, + { "_key_f10", "literal" }, + { "_key_f11", "literal" }, + { "_key_f12", "literal" }, + { "_key_f2", "literal" }, + { "_key_f3", "literal" }, + { "_key_f4", "literal" }, + { "_key_f5", "literal" }, + { "_key_f6", "literal" }, + { "_key_f7", "literal" }, + { "_key_f8", "literal" }, + { "_key_f9", "literal" }, + { "_key_home", "literal" }, + { "_key_insert", "literal" }, + { "_key_lalt", "literal" }, + { "_key_lapple", "literal" }, + { "_key_lctrl", "literal" }, + { "_key_left", "literal" }, + { "_key_lshift", "literal" }, + { "_key_pagedown", "literal" }, + { "_key_pageup", "literal" }, + { "_key_ralt", "literal" }, + { "_key_rapple", "literal" }, + { "_key_rctrl", "literal" }, + { "_key_right", "literal" }, + { "_key_rshift", "literal" }, + { "_key_tab", "literal" }, + { "_key_up", "literal" }, + { "_less", "literal" }, + { "_loadfont_failed", "literal" }, + { "_log_error", "literal" }, + { "_log_info", "literal" }, + { "_log_none", "literal" }, + { "_log_trace", "literal" }, + { "_log_warn", "literal" }, + { "_long_max&", "literal" }, + { "_long_min&", "literal" }, + { "_mins_in_day", "literal" }, + { "_mins_in_hour", "literal" }, + { "_mins_in_leapyear", "literal" }, + { "_mins_in_week", "literal" }, + { "_mins_in_year", "literal" }, + { "_offset_max&", "literal" }, + { "_offset_max&&", "literal" }, + { "_offset_min&", "literal" }, + { "_offset_min&&", "literal" }, + { "_one_eb", "literal" }, + { "_one_gb", "literal" }, + { "_one_kb", "literal" }, + { "_one_mb", "literal" }, + { "_one_pb", "literal" }, + { "_one_tb", "literal" }, + { "_secs_in_day", "literal" }, + { "_secs_in_hour", "literal" }, + { "_secs_in_leapyear", "literal" }, + { "_secs_in_min", "literal" }, + { "_secs_in_week", "literal" }, + { "_secs_in_year", "literal" }, + { "_single_max!", "literal" }, + { "_single_min!", "literal" }, + { "_single_min_frac!", "literal" }, + { "_size_of_byte", "literal" }, + { "_size_of_double", "literal" }, + { "_size_of_float", "literal" }, + { "_size_of_integer", "literal" }, + { "_size_of_integer64", "literal" }, + { "_size_of_long", "literal" }, + { "_size_of_offset", "literal" }, + { "_size_of_single", "literal" }, + { "_sndopen_failed", "literal" }, + { "_str_crlf", "literal" }, + { "_str_empty", "literal" }, + { "_str_lf", "literal" }, + { "_str_nat_eol", "literal" }, + { "_true", "literal" }, + { "_ubit_max~`", "literal" }, + { "_ubit_min~`", "literal" }, + { "_ubyte_max~%%", "literal" }, + { "_ubyte_min~%%", "literal" }, + { "_uinteger64_max~&&", "literal" }, + { "_uinteger64_min~&&", "literal" }, + { "_uinteger_max~%", "literal" }, + { "_uinteger_min~%", "literal" }, + { "_ulong_max~&", "literal" }, + { "_ulong_min~&", "literal" }, + { "_uoffset_max~&", "literal" }, + { "_uoffset_max~&&", "literal" }, + { "_uoffset_min~&", "literal" }, + { "_uoffset_min~&&", "literal" }, + { "_weeks_in_leapyear", "literal" }, + { "_weeks_in_year", "literal" }, + + }, + "'", + {} + + } ); + + sd.setCaseInsensitive( true ); + return sd; +} + +}}}} // namespace EE::UI::Doc::Language diff --git a/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/qb64.hpp b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/qb64.hpp new file mode 100644 index 000000000..5ba94a196 --- /dev/null +++ b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languages/qb64.hpp @@ -0,0 +1,12 @@ +#ifndef EE_UI_DOC_QB64 +#define EE_UI_DOC_QB64 + +#include + +namespace EE { namespace UI { namespace Doc { namespace Language { + +extern SyntaxDefinition& addQB64(); + +}}}} // namespace EE::UI::Doc::Language + +#endif diff --git a/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languagessyntaxhighlighting.cpp b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languagessyntaxhighlighting.cpp index 984465336..afa5f7af2 100644 --- a/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languagessyntaxhighlighting.cpp +++ b/src/modules/languages-syntax-highlighting/src/eepp/ui/doc/languagessyntaxhighlighting.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -89,6 +90,7 @@ #include #include #include +#include #include #include #include @@ -340,6 +342,12 @@ static void preDefinitionLangsChunk1( SyntaxDefinitionManager* sdm ) { { "%.f$", "%.f90$", "%.f95$" }, } ); + sdm->addPreDefinition( { + "FreeBASIC", + []() -> SyntaxDefinition& { return addFreeBASIC(); }, + { "%.bas$", "%.bi$" }, + } ); + sdm->addPreDefinition( { "fstab", []() -> SyntaxDefinition& { return addFstab(); }, { "fstab" } } ); @@ -613,6 +621,12 @@ static void preDefinitionLangsChunk2( SyntaxDefinitionManager* sdm ) { { "%.ps1$", "%.psm1$", "%.psd1$", "%.ps1xml$", "%.pssc$", "%.psrc$", "%.cdxml$" }, } ); + sdm->addPreDefinition( { + "QB64", + []() -> SyntaxDefinition& { return addQB64(); }, + { "%.bas$", "%.bi$", "%.bm$" }, + } ); + sdm->addPreDefinition( { "Qbs", []() -> SyntaxDefinition& { return addQbs(); }, diff --git a/src/tools/ecode/appconfig.cpp b/src/tools/ecode/appconfig.cpp index 5a43e23ea..3b8ec3135 100644 --- a/src/tools/ecode/appconfig.cpp +++ b/src/tools/ecode/appconfig.cpp @@ -231,6 +231,7 @@ void AppConfig::load( const std::string& confPath, std::string& keybindingsPath, ini.getValueB( "terminal", "unsupported_os_warn_disabled", false ); term.closeTerminalTabOnExit = ini.getValueB( "terminal", "close_terminal_tab_on_exit", false ); term.warnBeforeClosingTab = ini.getValueB( "terminal", "warn_before_closing_tab", true ); + term.exclusiveMode = ini.getValueB( "terminal", "exclusive_mode", false ); term.cursorStyle = TerminalCursorHelper::modeFromString( ini.getValue( "terminal", "cursor_style", "steady_underline" ) ); term.scrollBarType = ini.getValue( "terminal", "scrollbar_type", "overlay" ) == "overlay" @@ -407,6 +408,7 @@ void AppConfig::save( const std::vector& recentFiles, ini.setValueB( "terminal", "unsupported_os_warn_disabled", term.unsupportedOSWarnDisabled ); ini.setValueB( "terminal", "close_terminal_tab_on_exit", term.closeTerminalTabOnExit ); ini.setValueB( "terminal", "warn_before_closing_tab", term.warnBeforeClosingTab ); + ini.setValueB( "terminal", "exclusive_mode", term.exclusiveMode ); ini.setValue( "terminal", "cursor_style", TerminalCursorHelper::modeToString( term.cursorStyle ) ); ini.setValue( "terminal", "scrollbar_type", @@ -571,6 +573,8 @@ void AppConfig::saveProject( std::string projectFolder, UICodeEditorSplitter* ed cfg.setValue( "build", "run_name", buildConfig.runName ); cfg.setValue( "nodes", "documents", saveNode( editorSplitter->getBaseLayout()->getFirstChild() ).dump() ); + for ( const auto& langExt : docConfig.languagesExtensions.priorities ) + cfg.setValue( "languages_extensions", langExt.first, langExt.second ); cfg.deleteKey( "files" ); if ( onlyIfNeeded ) { IOStreamString stringFile; @@ -856,6 +860,8 @@ void AppConfig::loadProject( std::string projectFolder, UICodeEditorSplitter* ed app->getProjectBuildManager()->setConfig( prjCfg ); } + docConfig.languagesExtensions.priorities = cfg.getKeyMap( "languages_extensions" ); + std::vector sessionSnapshotFiles; if ( sessionSnapshot ) { std::string projectStatePath( projectsPath + "state" + FileSystem::getOSSlash() + diff --git a/src/tools/ecode/appconfig.hpp b/src/tools/ecode/appconfig.hpp index af2c5bcdb..b437f6361 100644 --- a/src/tools/ecode/appconfig.hpp +++ b/src/tools/ecode/appconfig.hpp @@ -137,10 +137,15 @@ struct GlobalSearchBarConfig { bool bufferOnlyMode{ false }; }; +struct LanguagesExtensions { + std::map priorities; +}; + struct ProjectDocumentConfig { bool useGlobalSettings{ true }; HExtLanguageType hExtLanguageType{ HExtLanguageType::AutoDetect }; DocumentConfig doc; + LanguagesExtensions languagesExtensions; ProjectDocumentConfig() {} ProjectDocumentConfig( const DocumentConfig& doc ) { this->doc = doc; } }; @@ -191,6 +196,7 @@ struct TerminalConfig { bool unsupportedOSWarnDisabled{ false }; bool closeTerminalTabOnExit{ false }; bool warnBeforeClosingTab{ true }; + bool exclusiveMode{ false }; TerminalCursorMode cursorStyle{ TerminalCursorMode::SteadyUnderline }; ScrollViewType scrollBarType{ ScrollViewType::Overlay }; ScrollBarMode scrollBarMode{ ScrollBarMode::Auto }; @@ -202,10 +208,6 @@ struct WorkspaceConfig { bool sessionSnapshot{ true }; }; -struct LanguagesExtensions { - std::map priorities; -}; - struct SessionSnapshotFile { std::string cachePath; std::string fspath; diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 7c693924e..c66b22d65 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -539,6 +539,11 @@ void App::downloadFileWebDialog() { msgBox->setTitle( mWindowTitle ); msgBox->getTextInput()->setHint( i18n( "any_https_or_http_url", "Any https or http URL" ) ); msgBox->setCloseShortcut( { KEY_ESCAPE, KEYMOD_NONE } ); + msgBox->setMinWindowSize( Sizef( 300, 50 ) ); + msgBox->getLayoutCont()->setLayoutWidthPolicy( SizePolicy::MatchParent ); + msgBox->getLayoutCont()->getFirstWidget()->asType()->setLayoutWidthPolicy( + SizePolicy::MatchParent ); + msgBox->center(); msgBox->showWhenReady(); msgBox->on( Event::OnConfirm, [this, msgBox]( const Event* ) { std::string url( msgBox->getTextInput()->getText().toUtf8() ); @@ -2000,71 +2005,75 @@ std::map App::getMigrateKeybindings() { } std::vector App::getUnlockedCommands() { - return { "create-new", - "create-new-terminal", - "create-new-welcome-tab", - "fullscreen-toggle", - "open-file", - "open-folder", - "reopen-closed-tab", - "console-toggle", - "close-app", - "open-locatebar", - "open-locatebar-glob-search", - "open-command-palette", - "open-global-search", - "project-build-start", - "project-build-start-cancel", - "project-build-cancel", - "project-build-clean", - "project-build-and-run", - "project-run-executable", - "toggle-status-locate-bar", - "toggle-status-global-search-bar", - "toggle-status-build-output", - "toggle-status-terminal", - "toggle-status-app-output", - "menu-toggle", - "switch-side-panel", - "toggle-status-bar", - "download-file-web", - "create-new-terminal", - "terminal-split-left", - "terminal-split-right", - "terminal-split-top", - "terminal-split-bottom", - "terminal-split-swap", - "reopen-closed-tab", - "plugin-manager-open", - "debug-widget-tree-view", - "debug-draw-highlight-toggle", - "debug-draw-boxes-toggle", - "debug-draw-debug-data", - "editor-set-line-breaking-column", - "editor-set-line-spacing", - "editor-set-cursor-blinking-time", - "editor-set-indent-tab-character", - "check-for-updates", - "keybindings", - "about-ecode", - "ecode-source", - "ui-scale-factor", - "show-side-panel", - "editor-font-size", - "terminal-font-size", - "ui-font-size", - "ui-panel-font-size", - "sans-serif-font", - "monospace-font", - "terminal-font", - "fallback-font", - "tree-view-configure-ignore-files", - "show-open-documents", - "open-workspace-symbol-search", - "open-document-symbol-search", - "show-folder-treeview-tab", - "show-build-tab", - "create-new-window" }; + return { + "create-new", + "create-new-terminal", + "create-new-welcome-tab", + "fullscreen-toggle", + "open-file", + "open-folder", + "reopen-closed-tab", + "console-toggle", + "close-app", + "open-locatebar", + "open-locatebar-glob-search", + "open-command-palette", + "open-global-search", + "project-build-start", + "project-build-start-cancel", + "project-build-cancel", + "project-build-clean", + "project-build-and-run", + "project-run-executable", + "toggle-status-locate-bar", + "toggle-status-global-search-bar", + "toggle-status-build-output", + "toggle-status-terminal", + "toggle-status-app-output", + "menu-toggle", + "switch-side-panel", + "toggle-status-bar", + "download-file-web", + "create-new-terminal", + "terminal-split-left", + "terminal-split-right", + "terminal-split-top", + "terminal-split-bottom", + "terminal-split-swap", + "reopen-closed-tab", + "plugin-manager-open", + "debug-widget-tree-view", + "debug-draw-highlight-toggle", + "debug-draw-boxes-toggle", + "debug-draw-debug-data", + "editor-set-line-breaking-column", + "editor-set-line-spacing", + "editor-set-cursor-blinking-time", + "editor-set-indent-tab-character", + "check-for-updates", + "keybindings", + "about-ecode", + "ecode-source", + "ui-scale-factor", + "show-side-panel", + "editor-font-size", + "terminal-font-size", + "ui-font-size", + "ui-panel-font-size", + "sans-serif-font", + "monospace-font", + "terminal-font", + "fallback-font", + "tree-view-configure-ignore-files", + "show-open-documents", + "open-workspace-symbol-search", + "open-document-symbol-search", + "show-folder-treeview-tab", + "show-build-tab", + "create-new-window", + "reset-global-language-extensions-priorities", + "reset-project-language-extensions-priorities", + }; } void App::saveProject( bool onlyIfNeeded, bool sessionSnapshotEnabled ) { @@ -2275,6 +2284,17 @@ void App::createDocDoesNotExistsInFSAlert( UICodeEditor* editor ) { Seconds( 30.f ) ); } +std::map& App::getCurrentLanguageExtensionsPriorities() { + if ( !mCurrentProject.empty() && mCurrentProject != getPlaygroundPath() ) + return mProjectDocConfig.languagesExtensions.priorities; + return mConfig.languagesExtensions.priorities; +} + +void App::updateLanguageExtensionsPriorities() { + SyntaxDefinitionManager::instance()->setLanguageExtensionsPriority( + getCurrentLanguageExtensionsPriorities() ); +} + void App::createDocManyLangsAlert( UICodeEditor* editor ) { UILinearLayout* docAlert = editor->findByClass( "doc_alert_manylangs" ); @@ -2292,7 +2312,7 @@ void App::createDocManyLangsAlert( UICodeEditor* editor ) { - + )xml"; @@ -2315,9 +2335,8 @@ void App::createDocManyLangsAlert( UICodeEditor* editor ) { editor->disableReportSizeChangeToChildren(); docAlert->close(); editor->setFocus(); - mConfig.languagesExtensions.priorities[ext] = lang->getLSPName(); - SyntaxDefinitionManager::instance()->setLanguageExtensionsPriority( - mConfig.languagesExtensions.priorities ); + getCurrentLanguageExtensionsPriorities()[ext] = lang->getLSPName(); + updateLanguageExtensionsPriorities(); } ); } @@ -2434,7 +2453,7 @@ void App::openFileFromPath( const std::string& path ) { bool App::loadFileFromPath( std::string path, bool inNewTab, UICodeEditor* codeEditor, std::function onLoaded, - bool openBinaryAsDocument ) { + bool openBinaryAsDocument, bool tryFindMimeType ) { std::string ext = FileSystem::fileExtension( path ); if ( ext == "lnk" ) { @@ -2448,9 +2467,10 @@ bool App::loadFileFromPath( return false; } - if ( Image::isImageExtension( path ) && Image::isImage( path ) && ext != "svg" ) { + if ( ( Image::isImageExtension( path ) || tryFindMimeType ) && Image::isImage( path ) && + ext != "svg" ) { loadImageFromPath( path ); - } else if ( SoundFileFactory::isKnownFileExtension( path ) && + } else if ( ( SoundFileFactory::isKnownFileExtension( path ) || tryFindMimeType ) && SoundFileFactory::isValidAudioFile( path ) ) { loadAudioFromPath( path ); } else if ( !openBinaryAsDocument && PathHelper::isOpenExternalExtension( ext ) ) { @@ -2817,9 +2837,10 @@ void App::onCodeEditorCreated( UICodeEditor* editor, TextDocument& doc ) { auto ext = editor->getDocument().getFileInfo().getExtension(); if ( SyntaxDefinitionManager::instance()->extensionCanRepresentManyLanguages( ext ) ) { - auto hasConfig = mConfig.languagesExtensions.priorities.find( ext ); + auto& priorities = getCurrentLanguageExtensionsPriorities(); + auto hasConfig = priorities.find( ext ); const SyntaxDefinition* def = nullptr; - if ( hasConfig != mConfig.languagesExtensions.priorities.end() && + if ( hasConfig != priorities.end() && ( def = SyntaxDefinitionManager::instance()->getPtrByLSPName( hasConfig->second ) ) ) { editor->setSyntaxDefinition( *def ); @@ -3585,6 +3606,7 @@ void App::loadFolder( std::string path, bool forceNewWindow ) { if ( mProjectBuildManager ) mProjectBuildManager.reset(); + updateLanguageExtensionsPriorities(); SyntaxDefinitionManager::instance()->resetFileAssociations(); mProjectBuildManager = @@ -3911,7 +3933,7 @@ void App::init( InitParameters& params ) { SyntaxDefinitionManager::createSingleton(); Language::LanguagesSyntaxHighlighting::load(); SyntaxDefinitionManager::instance()->setLanguageExtensionsPriority( - mConfig.languagesExtensions.priorities ); + getCurrentLanguageExtensionsPriorities() ); Log::info( "Syntax definitions loaded in %s.", defClock.getElapsedTimeAndReset().toString() ); @@ -4671,11 +4693,10 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { { "first-instance" } ); #ifdef EE_TEXT_SHAPER_ENABLED - args::Flag textShaper( - parser, "text-shaper", - "WARNING: Do not use this option. It will be completely " - "removed soon. It does nothing since text-shaper is enabled by default.", - { "text-shaper" } ); + args::Flag textShaper( parser, "text-shaper", + "WARNING: Do not use this option. It will be completely " + "removed soon. It does nothing since text-shaper is enabled by default.", + { "text-shaper" } ); args::Flag noTextShaper( parser, "no-text-shaper", "Disables text-shaping capabilities", { "no-text-shaper" } ); #endif diff --git a/src/tools/ecode/ecode.hpp b/src/tools/ecode/ecode.hpp index 8ddc07576..eda4fd6cc 100644 --- a/src/tools/ecode/ecode.hpp +++ b/src/tools/ecode/ecode.hpp @@ -110,7 +110,7 @@ class App : public UICodeEditorSplitter::Client, public PluginContextProvider { UICodeEditor* codeEditor = nullptr, std::function onLoaded = std::function(), - bool openBinaryAsDocument = false ); + bool openBinaryAsDocument = false, bool tryFindMimeType = false ); void hideGlobalSearchBar(); @@ -415,6 +415,27 @@ class App : public UICodeEditorSplitter::Client, public PluginContextProvider { tabWidget->focusPreviousTab( triggerCodes ); } } ); + + t.setCommand( "reset-global-language-extensions-priorities", [this] { + mConfig.languagesExtensions.priorities.clear(); + saveConfig(); + mNotificationCenter->addNotification( + i18n( "global_language_extensions_priorities_has_been_reset", + "Global language extensions priorities has been reset" ) ); + } ); + + t.setCommand( "reset-project-language-extensions-priorities", [this] { + if ( !mCurrentProject.empty() && mCurrentProject != getPlaygroundPath() ) { + mProjectDocConfig.languagesExtensions.priorities.clear(); + saveProject(); + mNotificationCenter->addNotification( + i18n( "project_language_extensions_priorities_has_been_reset", + "Project language extensions priorities has been reset" ) ); + } else { + mNotificationCenter->addNotification( + i18n( "no_project_loaded", "No project loaded" ) ); + } + } ); } PluginManager* getPluginManager() const; @@ -578,6 +599,10 @@ class App : public UICodeEditorSplitter::Client, public PluginContextProvider { return mStatusBarKeybindings; } + void updateLanguageExtensionsPriorities(); + + std::map& getCurrentLanguageExtensionsPriorities(); + protected: std::vector mArgs; EE::Window::Window* mWindow{ nullptr }; diff --git a/src/tools/ecode/plugins/plugincontextprovider.hpp b/src/tools/ecode/plugins/plugincontextprovider.hpp index c37c5c2f5..c0f5b1894 100644 --- a/src/tools/ecode/plugins/plugincontextprovider.hpp +++ b/src/tools/ecode/plugins/plugincontextprovider.hpp @@ -99,7 +99,7 @@ class PluginContextProvider { loadFileFromPath( std::string path, bool inNewTab = true, UICodeEditor* codeEditor = nullptr, std::function onLoaded = std::function(), - bool openBinaryAsDocument = false ) = 0; + bool openBinaryAsDocument = false, bool tryFindMimeType = false ) = 0; virtual ProjectDirectoryTree* getDirTree() const = 0; diff --git a/src/tools/ecode/settingsmenu.cpp b/src/tools/ecode/settingsmenu.cpp index 2b3ca96af..ff9858701 100644 --- a/src/tools/ecode/settingsmenu.cpp +++ b/src/tools/ecode/settingsmenu.cpp @@ -1138,6 +1138,14 @@ UIMenu* SettingsMenu::createTerminalMenu() { mTerminalMenu->addSeparator(); + mTerminalMenu + ->addCheckBox( + i18n( "enable_exclusive_mode_by_default", "Enable Exclusive Mode by Default" ), + mApp->getConfig().term.exclusiveMode ) + ->setTooltipText( i18n( "enable_exclusive_mode_by_default_tooltip", + "New terminals will have the exclusive mode enabled by default" ) ) + ->setId( "enable-exclusive-mode-by-default" ); + mTerminalMenu ->addCheckBox( i18n( "close_terminal_tab_on_exit", "Close Terminal Tab on Exit" ), mApp->getConfig().term.closeTerminalTabOnExit ) @@ -1174,6 +1182,9 @@ UIMenu* SettingsMenu::createTerminalMenu() { mSplitter->forEachWidgetType( UI_TYPE_TERMINAL, [active]( UIWidget* widget ) { widget->asType()->getTerm()->setKeepAlive( !active ); } ); + } else if ( "enable-exclusive-mode-by-default" == id ) { + bool active = event->getNode()->asType()->isActive(); + mApp->getConfig().term.exclusiveMode = active; } else if ( "warn-before-closing-tab" == id ) { bool active = event->getNode()->asType()->isActive(); mApp->getConfig().term.warnBeforeClosingTab = active; diff --git a/src/tools/ecode/statusterminalcontroller.cpp b/src/tools/ecode/statusterminalcontroller.cpp index 274a47c1f..d93f5b985 100644 --- a/src/tools/ecode/statusterminalcontroller.cpp +++ b/src/tools/ecode/statusterminalcontroller.cpp @@ -155,6 +155,7 @@ UITerminal* StatusTerminalController::createTerminal( auto csIt = terminalColorSchemes.find( currentTerminalColorScheme ); term->getTerm()->getTerminal()->setAllowMemoryTrimnming( true ); term->getTerm()->setCursorMode( mContext->termConfig().cursorStyle ); + term->setExclusiveMode( mContext->termConfig().exclusiveMode ); term->setScrollViewType( mContext->termConfig().scrollBarType ); term->setVerticalScrollMode( mContext->termConfig().scrollBarMode ); diff --git a/src/tools/ecode/terminalmanager.cpp b/src/tools/ecode/terminalmanager.cpp index 260fd33a5..8302e2bb3 100644 --- a/src/tools/ecode/terminalmanager.cpp +++ b/src/tools/ecode/terminalmanager.cpp @@ -546,6 +546,7 @@ UITerminal* TerminalManager::createNewTerminal( } term->getTerm()->setCursorMode( mApp->termConfig().cursorStyle ); + term->setExclusiveMode( mApp->termConfig().exclusiveMode ); term->setScrollViewType( mApp->termConfig().scrollBarType ); term->setVerticalScrollMode( mApp->termConfig().scrollBarMode );