{
    "aliases": [
        "c",
        "cc",
        "h",
        "c++",
        "h++",
        "hpp",
        "hh",
        "hxx",
        "cxx"
    ],
    "keywords": {
        "keyword": "int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq boolean byte word String",
        "built_in": "std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",
        "literal": "true false nullptr NULL DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW"
    },
    "illegal": "<\/",
    "contains": [
        {
            "variants": [
                {
                    "begin": "=",
                    "end": ";"
                },
                {
                    "begin": "\\(",
                    "end": "\\)"
                },
                {
                    "beginKeywords": "new throw return else",
                    "end": ";"
                }
            ],
            "keywords": {
                "$ref": "#keywords"
            },
            "contains": [
                {
                    "className": "keyword",
                    "begin": "\\b[a-z\\d_]*_t\\b"
                },
                {
                    "className": "comment",
                    "begin": "\/\/",
                    "end": "$",
                    "contains": [
                        {
                            "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
                        },
                        {
                            "className": "doctag",
                            "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                            "relevance": 0
                        }
                    ]
                },
                {
                    "className": "comment",
                    "begin": "\/\\*",
                    "end": "\\*\/",
                    "contains": [
                        {
                            "$ref": "#contains.0.contains.1.contains.0"
                        },
                        {
                            "className": "doctag",
                            "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                            "relevance": 0
                        }
                    ]
                },
                {
                    "className": "number",
                    "variants": [
                        {
                            "begin": "\\b(0b[01']+)"
                        },
                        {
                            "begin": "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"
                        },
                        {
                            "begin": "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
                        }
                    ],
                    "relevance": 0
                },
                {
                    "className": "string",
                    "variants": [
                        {
                            "begin": "(u8?|U|L)?\"",
                            "end": "\"",
                            "illegal": "\\n",
                            "contains": [
                                {
                                    "begin": "\\\\[\\s\\S]",
                                    "relevance": 0
                                }
                            ]
                        },
                        {
                            "begin": "(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
                            "end": "'",
                            "illegal": "."
                        },
                        {
                            "begin": "(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\((?:.|\\n)*?\\)\\1\""
                        }
                    ]
                },
                {
                    "begin": "\\(",
                    "end": "\\)",
                    "keywords": {
                        "$ref": "#keywords"
                    },
                    "contains": [
                        {
                            "$ref": "#contains.0.contains.0"
                        },
                        {
                            "$ref": "#contains.0.contains.1"
                        },
                        {
                            "$ref": "#contains.0.contains.2"
                        },
                        {
                            "$ref": "#contains.0.contains.3"
                        },
                        {
                            "$ref": "#contains.0.contains.4"
                        },
                        "self"
                    ],
                    "relevance": 0
                }
            ],
            "relevance": 0
        },
        {
            "className": "function",
            "begin": "((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+(?:[a-zA-Z_]\\w*::)?[a-zA-Z]\\w*\\s*\\(",
            "returnBegin": true,
            "end": "[{;=]",
            "excludeEnd": true,
            "keywords": {
                "$ref": "#keywords"
            },
            "illegal": "[^\\w\\s\\*&:<>]",
            "contains": [
                {
                    "begin": "decltype\\(auto\\)",
                    "keywords": {
                        "$ref": "#keywords"
                    },
                    "relevance": 0
                },
                {
                    "begin": "(?:[a-zA-Z_]\\w*::)?[a-zA-Z]\\w*\\s*\\(",
                    "returnBegin": true,
                    "contains": [
                        {
                            "className": "title",
                            "begin": "(?:[a-zA-Z_]\\w*::)?[a-zA-Z]\\w*",
                            "relevance": 0
                        }
                    ],
                    "relevance": 0
                },
                {
                    "className": "params",
                    "begin": "\\(",
                    "end": "\\)",
                    "keywords": {
                        "$ref": "#keywords"
                    },
                    "relevance": 0,
                    "contains": [
                        {
                            "$ref": "#contains.0.contains.1"
                        },
                        {
                            "$ref": "#contains.0.contains.2"
                        },
                        {
                            "$ref": "#contains.0.contains.4"
                        },
                        {
                            "$ref": "#contains.0.contains.3"
                        },
                        {
                            "$ref": "#contains.0.contains.0"
                        },
                        {
                            "begin": "\\(",
                            "end": "\\)",
                            "keywords": {
                                "$ref": "#keywords"
                            },
                            "relevance": 0,
                            "contains": [
                                "self",
                                {
                                    "$ref": "#contains.0.contains.1"
                                },
                                {
                                    "$ref": "#contains.0.contains.2"
                                },
                                {
                                    "$ref": "#contains.0.contains.4"
                                },
                                {
                                    "$ref": "#contains.0.contains.3"
                                },
                                {
                                    "$ref": "#contains.0.contains.0"
                                }
                            ]
                        }
                    ]
                },
                {
                    "$ref": "#contains.0.contains.0"
                },
                {
                    "$ref": "#contains.0.contains.1"
                },
                {
                    "$ref": "#contains.0.contains.2"
                },
                {
                    "className": "meta",
                    "begin": "#\\s*[a-z]+\\b",
                    "end": "$",
                    "keywords": {
                        "meta-keyword": "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
                    },
                    "contains": [
                        {
                            "begin": "\\\\\\n",
                            "relevance": 0
                        },
                        {
                            "className": "meta-string",
                            "variants": {
                                "$ref": "#contains.0.contains.4.variants"
                            }
                        },
                        {
                            "className": "meta-string",
                            "begin": "<.*?>",
                            "end": "$",
                            "illegal": "\\n"
                        },
                        {
                            "$ref": "#contains.0.contains.1"
                        },
                        {
                            "$ref": "#contains.0.contains.2"
                        }
                    ]
                }
            ]
        },
        {
            "$ref": "#contains.0.contains.0"
        },
        {
            "$ref": "#contains.0.contains.1"
        },
        {
            "$ref": "#contains.0.contains.2"
        },
        {
            "$ref": "#contains.0.contains.3"
        },
        {
            "$ref": "#contains.0.contains.4"
        },
        {
            "$ref": "#contains.1.contains.6"
        },
        {
            "begin": "\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",
            "end": ">",
            "keywords": {
                "$ref": "#keywords"
            },
            "contains": [
                "self",
                {
                    "$ref": "#contains.0.contains.0"
                }
            ]
        },
        {
            "begin": "[a-zA-Z]\\w*::",
            "keywords": {
                "$ref": "#keywords"
            }
        },
        {
            "className": "class",
            "beginKeywords": "class struct",
            "end": "[{;:]",
            "contains": [
                {
                    "begin": "<",
                    "end": ">",
                    "contains": [
                        "self"
                    ]
                },
                {
                    "className": "title",
                    "begin": "[a-zA-Z]\\w*",
                    "relevance": 0
                }
            ]
        }
    ],
    "exports": {
        "preprocessor": {
            "$ref": "#contains.1.contains.6"
        },
        "strings": {
            "$ref": "#contains.0.contains.4"
        },
        "keywords": {
            "$ref": "#keywords"
        }
    }
}
