diff --git a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp index f6247d999..e34b15cd9 100644 --- a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp +++ b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp @@ -1775,6 +1775,226 @@ SyntaxDefinitionManager::SyntaxDefinitionManager() { }, {}, "#"} ); + + // Swift + add( {"Swift", + {"%.swift$"}, + { + {{"//.-\n"}, "comment"}, + {{"/%*", "%*/"}, "comment"}, + {{"\"\"\"", "\"\"\""}, "string"}, + {{"\"", "\"", "\\"}, "string"}, + {{"-?0x%x+"}, "number"}, + {{"-?%d+[%d%.eE]*f?"}, "number"}, + {{"-?%.?%d+f?"}, "number"}, + {{"[%+%-=/%*%^%%<>!~|&]"}, "operator"}, + {{"[%a_][%w_]*%f[(]"}, "function"}, + {{"[%a_][%w_]*[?!]?"}, "symbol"}, + }, + { + {"#available", "keyword"}, + {"#colorLiteral", "keyword"}, + {"#column", "keyword"}, + {"#else", "keyword"}, + {"#elseif", "keyword"}, + {"#endif", "keyword"}, + {"#file", "keyword"}, + {"#fileLiteral", "keyword"}, + {"#function", "keyword"}, + {"#if", "keyword"}, + {"#imageLiteral", "keyword"}, + {"#line", "keyword"}, + {"#selector", "keyword"}, + {"#sourceLocation", "keyword"}, + {"_", "keyword"}, + {"__COLUMN__", "keyword"}, + {"__FILE__", "keyword"}, + {"__FUNCTION__", "keyword"}, + {"__LINE__", "keyword"}, + {"Any", "keyword"}, + {"as", "keyword"}, + {"as!", "keyword"}, + {"as?", "keyword"}, + {"associatedtype", "keyword"}, + {"associativity", "keyword"}, + {"break", "keyword"}, + {"case", "keyword"}, + {"catch", "keyword"}, + {"class", "keyword"}, + {"continue", "keyword"}, + {"convenience", "keyword"}, + {"default", "keyword"}, + {"defer", "keyword"}, + {"deinit", "keyword"}, + {"didSet", "keyword"}, + {"do", "keyword"}, + {"dynamic", "keyword"}, + {"dynamicType", "keyword"}, + {"else", "keyword"}, + {"enum", "keyword"}, + {"extension", "keyword"}, + {"fallthrough", "keyword"}, + {"false", "keyword"}, + {"fileprivate", "keyword"}, + {"final", "keyword"}, + {"for", "keyword"}, + {"func", "keyword"}, + {"get", "keyword"}, + {"guard", "keyword"}, + {"if", "keyword"}, + {"import", "keyword"}, + {"in", "keyword"}, + {"indirect", "keyword"}, + {"infix", "keyword"}, + {"init", "keyword"}, + {"inout", "keyword"}, + {"internal", "keyword"}, + {"is", "keyword"}, + {"lazy", "keyword"}, + {"left", "keyword"}, + {"let", "keyword"}, + {"mutating", "keyword"}, + {"nil", "keyword"}, + {"none", "keyword"}, + {"nonmutating", "keyword"}, + {"open", "keyword"}, + {"operator", "keyword"}, + {"optional", "keyword"}, + {"override", "keyword"}, + {"postfix", "keyword"}, + {"precedence", "keyword"}, + {"prefix", "keyword"}, + {"private", "keyword"}, + {"protocol", "keyword"}, + {"Protocol", "keyword"}, + {"public", "keyword"}, + {"repeat", "keyword"}, + {"required", "keyword"}, + {"rethrows", "keyword"}, + {"return", "keyword"}, + {"right", "keyword"}, + {"self", "keyword"}, + {"Self", "keyword"}, + {"set", "keyword"}, + {"static", "keyword"}, + {"struct", "keyword"}, + {"subscript", "keyword"}, + {"super", "keyword"}, + {"switch", "keyword"}, + {"throw", "keyword"}, + {"throws", "keyword"}, + {"true", "keyword"}, + {"try", "keyword"}, + {"try!", "keyword"}, + {"try?", "keyword"}, + {"Type", "keyword"}, + {"typealias", "keyword"}, + {"unowned", "keyword"}, + {"var", "keyword"}, + {"weak", "keyword"}, + {"where", "keyword"}, + {"while", "keyword"}, + {"willSet", "keyword"}, + {"true", "literal"}, + {"false", "literal"}, + {"nil", "literal"}, + {"abs", "keyword2"}, + {"advance", "keyword2"}, + {"alignof", "keyword2"}, + {"alignofValue", "keyword2"}, + {"anyGenerator", "keyword2"}, + {"assert", "keyword2"}, + {"assertionFailure", "keyword2"}, + {"bridgeFromObjectiveC", "keyword2"}, + {"bridgeFromObjectiveCUnconditional", "keyword2"}, + {"bridgeToObjectiveC", "keyword2"}, + {"bridgeToObjectiveCUnconditional", "keyword2"}, + {"c", "keyword2"}, + {"compactMap", "keyword2"}, + {"contains", "keyword2"}, + {"count", "keyword2"}, + {"countElements", "keyword2"}, + {"countLeadingZeros", "keyword2"}, + {"debugPrint", "keyword2"}, + {"debugPrintln", "keyword2"}, + {"distance", "keyword2"}, + {"dropFirst", "keyword2"}, + {"dropLast", "keyword2"}, + {"dump", "keyword2"}, + {"encodeBitsAsWords", "keyword2"}, + {"enumerate", "keyword2"}, + {"equal", "keyword2"}, + {"fatalError", "keyword2"}, + {"filter", "keyword2"}, + {"find", "keyword2"}, + {"getBridgedObjectiveCType", "keyword2"}, + {"getVaList", "keyword2"}, + {"indices", "keyword2"}, + {"insertionSort", "keyword2"}, + {"isBridgedToObjectiveC", "keyword2"}, + {"isBridgedVerbatimToObjectiveC", "keyword2"}, + {"isUniquelyReferenced", "keyword2"}, + {"isUniquelyReferencedNonObjC", "keyword2"}, + {"join", "keyword2"}, + {"lazy", "keyword2"}, + {"lexicographicalCompare", "keyword2"}, + {"map", "keyword2"}, + {"max", "keyword2"}, + {"maxElement", "keyword2"}, + {"min", "keyword2"}, + {"minElement", "keyword2"}, + {"numericCast", "keyword2"}, + {"overlaps", "keyword2"}, + {"partition", "keyword2"}, + {"posix", "keyword2"}, + {"precondition", "keyword2"}, + {"preconditionFailure", "keyword2"}, + {"print", "keyword2"}, + {"println", "keyword2"}, + {"quickSort", "keyword2"}, + {"readLine", "keyword2"}, + {"reduce", "keyword2"}, + {"reflect", "keyword2"}, + {"reinterpretCast", "keyword2"}, + {"reverse", "keyword2"}, + {"roundUpToAlignment", "keyword2"}, + {"sizeof", "keyword2"}, + {"sizeofValue", "keyword2"}, + {"sort", "keyword2"}, + {"split", "keyword2"}, + {"startsWith", "keyword2"}, + {"stride", "keyword2"}, + {"strideof", "keyword2"}, + {"strideofValue", "keyword2"}, + {"swap", "keyword2"}, + {"toString", "keyword2"}, + {"transcode", "keyword2"}, + {"underestimateCount", "keyword2"}, + {"unsafeAddressOf", "keyword2"}, + {"unsafeBitCast", "keyword2"}, + {"unsafeDowncast", "keyword2"}, + {"unsafeUnwrap", "keyword2"}, + {"unsafeReflect", "keyword2"}, + {"withExtendedLifetime", "keyword2"}, + {"withObjectAtPlusZero", "keyword2"}, + {"withUnsafePointer", "keyword2"}, + {"withUnsafePointerToObject", "keyword2"}, + {"withUnsafeMutablePointer", "keyword2"}, + {"withUnsafeMutablePointers", "keyword2"}, + {"withUnsafePointer", "keyword2"}, + {"withUnsafePointers", "keyword2"}, + {"withVaList", "keyword2"}, + {"zip", "keyword2"}, + {"Int", "keyword2"}, + {"Float", "keyword2"}, + {"Double", "keyword2"}, + {"String", "keyword2"}, + {"Void", "keyword2"}, + {"Bool", "keyword2"}, + {"Array", "keyword2"}, + {"Optional", "keyword2"}, + }, + "//"} ); } SyntaxDefinition& SyntaxDefinitionManager::add( SyntaxDefinition&& syntaxStyle ) { diff --git a/src/tools/codeeditor/codeeditor.cpp b/src/tools/codeeditor/codeeditor.cpp index 50f0c6d2d..d5431af8d 100644 --- a/src/tools/codeeditor/codeeditor.cpp +++ b/src/tools/codeeditor/codeeditor.cpp @@ -1366,14 +1366,16 @@ UIMenu* App::createDocumentMenu() { ->setOnShouldCloseCb( shouldCloseCb ) ->setId( "``" ); bracketsMenu->addEventListener( Event::OnItemClicked, [&]( const Event* event ) { - const String& id = event->getNode()->getId(); + std::string id = event->getNode()->getId(); if ( event->getNode()->isType( UI_TYPE_MENUCHECKBOX ) ) { UIMenuCheckBox* item = event->getNode()->asType(); auto curPairs = String::split( mConfig.editor.autoCloseBrackets, ',' ); + auto found = std::find( curPairs.begin(), curPairs.end(), id ); if ( item->isActive() ) { - auto found = std::find( curPairs.begin(), curPairs.end(), id ); if ( found == curPairs.end() ) curPairs.push_back( id ); + } else if ( found != curPairs.end() ) { + curPairs.erase( found ); } mConfig.editor.autoCloseBrackets = String::join( curPairs, ',' ); auto pairs = makeAutoClosePairs( mConfig.editor.autoCloseBrackets );