Skip to content

Commit 0ce485b

Browse files
committed
support basic detection order functionality
1 parent b2c0aee commit 0ce485b

1 file changed

Lines changed: 107 additions & 86 deletions

File tree

CodeStats/CodeStatsPackage.cs

Lines changed: 107 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -594,101 +594,122 @@ public static string GetCurrentLanguage() // Code::Stats
594594
extension = Path.GetExtension(currentFile).TrimStart('.');
595595

596596
bool found = false;
597+
var foundDetectionMethod = Constants.DetectionType.EXTENSION_MAPPING;
597598
string language = "";
598-
if (!String.IsNullOrWhiteSpace(extension))
599+
600+
foreach (var detectionMethod in DetectionOrder)
599601
{
600-
/*if (extensionMapping.TryGetValue(extension, out language))
601-
{
602-
// Found
603-
found = true;
604-
}
605-
else
602+
switch (detectionMethod)
606603
{
607-
// Not found
608-
found = false;
609-
}*/// - doesn't work for some reason
610-
try
611-
{
612-
language = extensionMapping[extension];
613-
found = true;
604+
case Constants.DetectionType.EXTENSION_MAPPING:
605+
if (!String.IsNullOrWhiteSpace(extension))
606+
{
607+
/*if (extensionMapping.TryGetValue(extension, out language))
608+
{
609+
// Found
610+
found = true;
611+
}
612+
else
613+
{
614+
// Not found
615+
found = false;
616+
}*/// - doesn't work for some reason
617+
try
618+
{
619+
language = extensionMapping[extension];
620+
found = true;
621+
}
622+
catch (KeyNotFoundException)
623+
{
624+
Logger.Debug("Extension \"" + extension + "\" is not found in extension mappings file.");
625+
found = false;
626+
}
627+
}
628+
break;
629+
630+
case Constants.DetectionType.LEXER_LANGUAGE:
631+
found = true; // will set again to false if not
632+
switch (langType)
633+
{
634+
case LangType.L_ADA: language = "Ada"; break;
635+
//case LangType.L_ASCII: language = "ASCII"; break; // maybe Plain text?
636+
case LangType.L_ASM: language = "Assembler"; break;
637+
case LangType.L_ASP: language = "ASP"; break;
638+
case LangType.L_AU3: language = "AutoIt"; break;
639+
case LangType.L_BASH: language = "Shell Script"; break; // or Shell Script, probably called Shell in NPP (long desc: Unix script file)
640+
case LangType.L_BATCH: language = "Batch"; break;
641+
case LangType.L_C: language = "C"; break;
642+
case LangType.L_CAML: language = "Caml"; break;
643+
case LangType.L_CMAKE: language = "CMake"; break;
644+
case LangType.L_COBOL: language = "COBOL"; break;
645+
case LangType.L_COFFEESCRIPT: language = "CoffeeScript"; break;
646+
case LangType.L_CPP: language = "C++"; break;
647+
case LangType.L_CS: language = "C#"; break;
648+
case LangType.L_CSS: language = "CSS"; break;
649+
case LangType.L_D: language = "D"; break;
650+
case LangType.L_DIFF: language = "Diff"; break;
651+
//case LangType.L_EXTERNAL: language = ""; break;
652+
case LangType.L_FLASH: language = "Flash"; break;
653+
case LangType.L_FORTRAN: language = "Fortran"; break; // fixed?
654+
case LangType.L_FORTRAN_77: language = "Fortran"; break; // free?
655+
case LangType.L_GUI4CLI: language = "Gui4Cli"; break;
656+
case LangType.L_HASKELL: language = "Haskell"; break;
657+
case LangType.L_HTML: language = "HTML"; break;
658+
case LangType.L_INI: language = "Ini"; break;
659+
case LangType.L_INNO: language = "INNO"; break;
660+
case LangType.L_JAVA: language = "Java"; break;
661+
case LangType.L_JAVASCRIPT: language = "JavaScript"; break;
662+
case LangType.L_JS: language = "JavaScript"; break;
663+
case LangType.L_JSON: language = "JSON"; break;
664+
case LangType.L_JSP: language = "JSP"; break;
665+
case LangType.L_KIX: language = "KIXtart"; break;
666+
case LangType.L_LISP: language = "LISP"; break;
667+
case LangType.L_LUA: language = "Lua"; break;
668+
case LangType.L_MAKEFILE: language = "Makefile"; break;
669+
case LangType.L_MATLAB: language = "Matlab"; break;
670+
case LangType.L_NSIS: language = "NSIS"; break;
671+
case LangType.L_OBJC: language = "Objective-C"; break;
672+
case LangType.L_PASCAL: language = "Pascal"; break;
673+
case LangType.L_PERL: language = "Perl"; break;
674+
case LangType.L_PHP: language = "PHP"; break;
675+
case LangType.L_POWERSHELL: language = "PowerShell"; break;
676+
case LangType.L_PROPS: language = "Properties"; break;
677+
case LangType.L_PS: language = "PostScript"; break;
678+
case LangType.L_PYTHON: language = "Python"; break;
679+
case LangType.L_R: language = "R"; break;
680+
case LangType.L_RC: language = "Resource"; break;
681+
case LangType.L_RUBY: language = "Ruby"; break;
682+
case LangType.L_SCHEME: language = "Scheme"; break;
683+
//case LangType.L_SEARCHRESULT: language = ""; break; // it should be fine as plaintext
684+
case LangType.L_SMALLTALK: language = "Smalltalk"; break;
685+
case LangType.L_SQL: language = "SQL"; break;
686+
case LangType.L_TCL: language = "TCL"; break;
687+
case LangType.L_TEX: language = "TeX"; break;
688+
case LangType.L_VB: language = "Visual Basic"; break;
689+
case LangType.L_VERILOG: language = "Verilog"; break;
690+
case LangType.L_VHDL: language = "VHDL"; break;
691+
case LangType.L_XML: language = "XML"; break;
692+
case LangType.L_YAML: language = "YAML"; break;
693+
case LangType.L_TEXT:
694+
case LangType.L_USER: // User defined language
695+
default:
696+
found = false;
697+
break;
698+
}
699+
break;
614700
}
615-
catch (KeyNotFoundException)
701+
if (found)
616702
{
617-
Logger.Debug("Extension \"" + extension + "\" is not found in extension mappings file, using language type selected in Notepad++ instead.");
618-
found = false;
703+
foundDetectionMethod = detectionMethod;
704+
break;
619705
}
620706
}
621707

708+
if (found && Debug)
709+
Logger.Debug("[GetCurrentLanguage] Detected language \"" + language + "\" with detection type: " + foundDetectionMethod);
710+
622711
if (!found)
623-
{
624-
switch (langType)
625-
{
626-
case LangType.L_ADA: language = "Ada"; break;
627-
//case LangType.L_ASCII: language = "ASCII"; break; // maybe Plain text?
628-
case LangType.L_ASM: language = "Assembler"; break;
629-
case LangType.L_ASP: language = "ASP"; break;
630-
case LangType.L_AU3: language = "AutoIt"; break;
631-
case LangType.L_BASH: language = "Shell Script"; break; // or Shell Script, probably called Shell in NPP (long desc: Unix script file)
632-
case LangType.L_BATCH: language = "Batch"; break;
633-
case LangType.L_C: language = "C"; break;
634-
case LangType.L_CAML: language = "Caml"; break;
635-
case LangType.L_CMAKE: language = "CMake"; break;
636-
case LangType.L_COBOL: language = "COBOL"; break;
637-
case LangType.L_COFFEESCRIPT: language = "CoffeeScript"; break;
638-
case LangType.L_CPP: language = "C++"; break;
639-
case LangType.L_CS: language = "C#"; break;
640-
case LangType.L_CSS: language = "CSS"; break;
641-
case LangType.L_D: language = "D"; break;
642-
case LangType.L_DIFF: language = "Diff"; break;
643-
//case LangType.L_EXTERNAL: language = ""; break;
644-
case LangType.L_FLASH: language = "Flash"; break;
645-
case LangType.L_FORTRAN: language = "Fortran"; break; // fixed?
646-
case LangType.L_FORTRAN_77: language = "Fortran"; break; // free?
647-
case LangType.L_GUI4CLI: language = "Gui4Cli"; break;
648-
case LangType.L_HASKELL: language = "Haskell"; break;
649-
case LangType.L_HTML: language = "HTML"; break;
650-
case LangType.L_INI: language = "Ini"; break;
651-
case LangType.L_INNO: language = "INNO"; break;
652-
case LangType.L_JAVA: language = "Java"; break;
653-
case LangType.L_JAVASCRIPT: language = "JavaScript"; break;
654-
case LangType.L_JS: language = "JavaScript"; break;
655-
case LangType.L_JSON: language = "JSON"; break;
656-
case LangType.L_JSP: language = "JSP"; break;
657-
case LangType.L_KIX: language = "KIXtart"; break;
658-
case LangType.L_LISP: language = "LISP"; break;
659-
case LangType.L_LUA: language = "Lua"; break;
660-
case LangType.L_MAKEFILE: language = "Makefile"; break;
661-
case LangType.L_MATLAB: language = "Matlab"; break;
662-
case LangType.L_NSIS: language = "NSIS"; break;
663-
case LangType.L_OBJC: language = "Objective-C"; break;
664-
case LangType.L_PASCAL: language = "Pascal"; break;
665-
case LangType.L_PERL: language = "Perl"; break;
666-
case LangType.L_PHP: language = "PHP"; break;
667-
case LangType.L_POWERSHELL: language = "PowerShell"; break;
668-
case LangType.L_PROPS: language = "Properties"; break;
669-
case LangType.L_PS: language = "PostScript"; break;
670-
case LangType.L_PYTHON: language = "Python"; break;
671-
case LangType.L_R: language = "R"; break;
672-
case LangType.L_RC: language = "Resource"; break;
673-
case LangType.L_RUBY: language = "Ruby"; break;
674-
case LangType.L_SCHEME: language = "Scheme"; break;
675-
//case LangType.L_SEARCHRESULT: language = ""; break; // it should be fine as plaintext
676-
case LangType.L_SMALLTALK: language = "Smalltalk"; break;
677-
case LangType.L_SQL: language = "SQL"; break;
678-
case LangType.L_TCL: language = "TCL"; break;
679-
case LangType.L_TEX: language = "TeX"; break;
680-
case LangType.L_VB: language = "Visual Basic"; break;
681-
case LangType.L_VERILOG: language = "Verilog"; break;
682-
case LangType.L_VHDL: language = "VHDL"; break;
683-
case LangType.L_XML: language = "XML"; break;
684-
case LangType.L_YAML: language = "YAML"; break;
685-
case LangType.L_TEXT:
686-
case LangType.L_USER: // User defined language
687-
default:
688-
language = "Plain text";
689-
break;
690-
}
691-
}
712+
language = "Plain text";
692713

693714
return language;
694715
}

0 commit comments

Comments
 (0)