MCPcopy Create free account
hub / github.com/SpartanJ/eepp / toCPP

Method toCPP

src/eepp/ui/doc/syntaxdefinitionmanager.cpp:451–548  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

449}
450
451std::pair<std::string, std::string> SyntaxDefinitionManager::toCPP( const SyntaxDefinition& def ) {
452 const auto patternsToCPP = [&]( std::string& buf, const std::vector<SyntaxPattern>& patterns ) {
453 buf += "{\n";
454 for ( const auto& pattern : patterns )
455 patternToCPP( buf, pattern, def );
456 buf += "\n}";
457 };
458
459 std::string lang( def.getLanguageNameForFileSystem() );
460 std::string func( funcName( lang ) );
461 std::string header =
462 "#ifndef EE_UI_DOC_" + func + "\n#define EE_UI_DOC_" + func +
463 "\n#include <eepp/ui/doc/syntaxdefinition.hpp>\n\nnamespace EE { namespace UI { namespace "
464 "Doc { namespace Language {\n\nextern SyntaxDefinition& add" +
465 func + "();\n\n}}}}\n\n#endif\n";
466 std::string buf = String::format( R"cpp(#include <eepp/ui/doc/languages/%s.hpp>
467#include <eepp/ui/doc/syntaxdefinitionmanager.hpp>
468
469namespace EE { namespace UI { namespace Doc { namespace Language {
470)cpp",
471 lang.c_str() );
472 buf += "\nSyntaxDefinition& add" + func + "() {\n";
473 buf += "\nreturn SyntaxDefinitionManager::instance()->add(\n\n{";
474 // lang name
475 buf += str( def.getLanguageName() ) + ",\n";
476 // file types
477 buf += join( def.getFiles() ) + ",\n";
478 // patterns
479 patternsToCPP( buf, def.getPatterns() );
480 buf += ",\n";
481 // symbols
482 buf += "{\n";
483 for ( const auto& symbol : def.getSymbolNames() )
484 buf += "{ " + str( symbol.first ) + " , " + str( symbol.second ) + " },\n";
485 buf += "\n},\n";
486 buf += str( def.getComment(), "", "", true ) + ",\n";
487 std::string lspName =
488 def.getLSPName().empty() || def.getLSPName() == String::toLower( def.getLanguageName() )
489 ? ""
490 : def.getLSPName();
491 // headers
492 buf += join( def.getHeaders() ) + ( lspName.empty() ? "" : "," ) + "\n";
493 // lsp
494 buf += lspName.empty() ? "" : str( def.getLSPName() );
495
496 buf += "\n}";
497 buf += ")";
498 if ( !def.isVisible() )
499 buf += ".setVisible( false )\n";
500 if ( def.getAutoCloseXMLTags() )
501 buf += ".setAutoCloseXMLTags( true )\n";
502
503 if ( def.getFoldRangeType() != FoldRangeType::Undefined ) {
504 std::string fdtn;
505 switch ( def.getFoldRangeType() ) {
506 case FoldRangeType::Braces:
507 fdtn = "FoldRangeType::Braces";
508 case FoldRangeType::Indentation:

Callers

nothing calls this directly

Calls 15

patternToCPPFunction · 0.85
funcNameFunction · 0.85
formatFunction · 0.85
strFunction · 0.85
joinFunction · 0.85
c_strMethod · 0.80
getSymbolNamesMethod · 0.80
getHeadersMethod · 0.80
getFoldRangeTypeMethod · 0.80
getFoldBracesMethod · 0.80
toUtf8Method · 0.80

Tested by

no test coverage detected