diff --git a/components/prism-cpp.js b/components/prism-cpp.js index 4c76a03d1e..b7f0883ca3 100644 --- a/components/prism-cpp.js +++ b/components/prism-cpp.js @@ -9,4 +9,12 @@ Prism.languages.insertBefore('cpp', 'keyword', { pattern: /(class\s+)\w+/i, lookbehind: true } +}); + +Prism.languages.insertBefore('cpp', 'string', { + 'raw-string': { + pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, + alias: 'string', + greedy: true + } }); \ No newline at end of file diff --git a/components/prism-cpp.min.js b/components/prism-cpp.min.js index 0a3dabd483..b3c324b25e 100644 --- a/components/prism-cpp.min.js +++ b/components/prism-cpp.min.js @@ -1 +1 @@ -Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(?:true|false)\b/,operator:/--?|\+\+?|!=?|<{1,2}=?|>{1,2}=?|->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|\|?|\?|\*|\/|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)\w+/i,lookbehind:!0}}); \ No newline at end of file +Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(?:true|false)\b/,operator:/--?|\+\+?|!=?|<{1,2}=?|>{1,2}=?|->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|\|?|\?|\*|\/|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)\w+/i,lookbehind:!0}}),Prism.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}); \ No newline at end of file diff --git a/tests/languages/cpp/raw_string_feature.test b/tests/languages/cpp/raw_string_feature.test new file mode 100644 index 0000000000..f9a896f882 --- /dev/null +++ b/tests/languages/cpp/raw_string_feature.test @@ -0,0 +1,18 @@ +R"raw( +test +)raw" +R"(no delimiter)" +R"(foo)"R"(bar)" + +---------------------------------------------------- + +[ + ["raw-string", "R\"raw(\r\ntest\r\n)raw\""], + ["raw-string", "R\"(no delimiter)\""], + ["raw-string", "R\"(foo)\""], + ["raw-string", "R\"(bar)\""] +] + +---------------------------------------------------- + +Checks for the C++11 raw string feature \ No newline at end of file