From 7d6fa7f8bffc7e9791b49ba1ba705abc96b84e55 Mon Sep 17 00:00:00 2001 From: Jazz Date: Fri, 13 Jan 2017 14:54:22 +0100 Subject: Register the same language aliases as Rouge (#5040) This allows the use of the same aliases as GitLab. --- webapp/utils/constants.jsx | 58 ++++++++++++++++++------------------ webapp/utils/syntax_highlighting.jsx | 22 ++++++++++---- 2 files changed, 46 insertions(+), 34 deletions(-) (limited to 'webapp/utils') diff --git a/webapp/utils/constants.jsx b/webapp/utils/constants.jsx index 8162846e2..af099d4a0 100644 --- a/webapp/utils/constants.jsx +++ b/webapp/utils/constants.jsx @@ -737,63 +737,63 @@ export const Constants = { }, CODE_PREVIEW_MAX_FILE_SIZE: 500000, // 500 KB HighlightedLanguages: { - actionscript: {name: 'ActionScript', extensions: ['as']}, + actionscript: {name: 'ActionScript', extensions: ['as'], aliases: ['as', 'as3']}, applescript: {name: 'AppleScript', extensions: ['applescript', 'osascript', 'scpt']}, bash: {name: 'Bash', extensions: ['bash', 'sh', 'zsh']}, clojure: {name: 'Clojure', extensions: ['clj', 'boot', 'cl2', 'cljc', 'cljs', 'cljs.hl', 'cljscm', 'cljx', 'hic']}, - coffeescript: {name: 'CoffeeScript', extensions: ['coffee', '_coffee', 'cake', 'cjsx', 'cson', 'iced']}, - cpp: {name: 'C/C++', extensions: ['cpp', 'c', 'cc', 'h', 'c++', 'h++', 'hpp']}, - cs: {name: 'C#', extensions: ['cs', 'csharp']}, + coffeescript: {name: 'CoffeeScript', extensions: ['coffee', '_coffee', 'cake', 'cjsx', 'cson', 'iced'], aliases: ['coffee', 'coffee-script']}, + cpp: {name: 'C/C++', extensions: ['cpp', 'c', 'cc', 'h', 'c++', 'h++', 'hpp'], aliases: ['c++']}, + cs: {name: 'C#', extensions: ['cs', 'csharp'], aliases: ['c#', 'csharp']}, css: {name: 'CSS', extensions: ['css']}, - d: {name: 'D', extensions: ['d', 'di']}, + d: {name: 'D', extensions: ['d', 'di'], aliases: ['dlang']}, dart: {name: 'Dart', extensions: ['dart']}, delphi: {name: 'Delphi', extensions: ['delphi', 'dpr', 'dfm', 'pas', 'pascal', 'freepascal', 'lazarus', 'lpr', 'lfm']}, - diff: {name: 'Diff', extensions: ['diff', 'patch']}, + diff: {name: 'Diff', extensions: ['diff', 'patch'], aliases: ['patch', 'udiff']}, django: {name: 'Django', extensions: ['django', 'jinja']}, - dockerfile: {name: 'Dockerfile', extensions: ['dockerfile', 'docker']}, - erlang: {name: 'Erlang', extensions: ['erl']}, + dockerfile: {name: 'Dockerfile', extensions: ['dockerfile', 'docker'], aliases: ['docker']}, + erlang: {name: 'Erlang', extensions: ['erl'], aliases: ['erl']}, fortran: {name: 'Fortran', extensions: ['f90', 'f95']}, fsharp: {name: 'F#', extensions: ['fsharp', 'fs']}, gcode: {name: 'G-Code', extensions: ['gcode', 'nc']}, - go: {name: 'Go', extensions: ['go']}, + go: {name: 'Go', extensions: ['go'], aliases: ['golang']}, groovy: {name: 'Groovy', extensions: ['groovy']}, - handlebars: {name: 'Handlebars', extensions: ['handlebars', 'hbs', 'html.hbs', 'html.handlebars']}, - haskell: {name: 'Haskell', extensions: ['hs']}, + handlebars: {name: 'Handlebars', extensions: ['handlebars', 'hbs', 'html.hbs', 'html.handlebars'], aliases: ['hbs', 'mustache']}, + haskell: {name: 'Haskell', extensions: ['hs'], aliases: ['hs']}, haxe: {name: 'Haxe', extensions: ['hx']}, java: {name: 'Java', extensions: ['java', 'jsp']}, - javascript: {name: 'JavaScript', extensions: ['js', 'jsx']}, + javascript: {name: 'JavaScript', extensions: ['js', 'jsx'], aliases: ['js']}, json: {name: 'JSON', extensions: ['json']}, - julia: {name: 'Julia', extensions: ['jl']}, + julia: {name: 'Julia', extensions: ['jl'], aliases: ['jl']}, kotlin: {name: 'Kotlin', extensions: ['kt', 'ktm', 'kts']}, less: {name: 'Less', extensions: ['less']}, lisp: {name: 'Lisp', extensions: ['lisp']}, lua: {name: 'Lua', extensions: ['lua']}, - makefile: {name: 'Makefile', extensions: ['mk', 'mak']}, - markdown: {name: 'Markdown', extensions: ['md', 'mkdown', 'mkd']}, - matlab: {name: 'Matlab', extensions: ['matlab', 'm']}, - objectivec: {name: 'Objective C', extensions: ['mm', 'objc', 'obj-c']}, + makefile: {name: 'Makefile', extensions: ['mk', 'mak'], aliases: ['make', 'mf', 'gnumake', 'bsdmake']}, + markdown: {name: 'Markdown', extensions: ['md', 'mkdown', 'mkd'], aliases: ['md', 'mkd']}, + matlab: {name: 'Matlab', extensions: ['matlab', 'm'], aliases: ['m']}, + objectivec: {name: 'Objective C', extensions: ['mm', 'objc', 'obj-c'], aliases: ['objective_c', 'objc']}, ocaml: {name: 'OCaml', extensions: ['ml']}, - perl: {name: 'Perl', extensions: ['perl', 'pl']}, - php: {name: 'PHP', extensions: ['php', 'php3', 'php4', 'php5', 'php6']}, - powershell: {name: 'PowerShell', extensions: ['ps', 'ps1']}, - puppet: {name: 'Puppet', extensions: ['pp']}, - python: {name: 'Python', extensions: ['py', 'gyp']}, - r: {name: 'R', extensions: ['r']}, - ruby: {name: 'Ruby', extensions: ['ruby', 'rb', 'gemspec', 'podspec', 'thor', 'irb']}, - rust: {name: 'Rust', extensions: ['rs']}, + perl: {name: 'Perl', extensions: ['perl', 'pl'], aliases: ['pl']}, + php: {name: 'PHP', extensions: ['php', 'php3', 'php4', 'php5', 'php6'], aliases: ['php3', 'php4', 'php5']}, + powershell: {name: 'PowerShell', extensions: ['ps', 'ps1'], aliases: ['posh']}, + puppet: {name: 'Puppet', extensions: ['pp'], aliases: ['pp']}, + python: {name: 'Python', extensions: ['py', 'gyp'], aliases: ['py']}, + r: {name: 'R', extensions: ['r'], aliases: ['r', 's']}, + ruby: {name: 'Ruby', extensions: ['ruby', 'rb', 'gemspec', 'podspec', 'thor', 'irb'], aliases: ['rb']}, + rust: {name: 'Rust', extensions: ['rs'], aliases: ['rs']}, scala: {name: 'Scala', extensions: ['scala']}, scheme: {name: 'Scheme', extensions: ['scm', 'sld']}, scss: {name: 'SCSS', extensions: ['scss']}, - smalltalk: {name: 'Smalltalk', extensions: ['st']}, + smalltalk: {name: 'Smalltalk', extensions: ['st'], aliases: ['st', 'squeak']}, sql: {name: 'SQL', extensions: ['sql']}, swift: {name: 'Swift', extensions: ['swift']}, - tex: {name: 'TeX', extensions: ['tex']}, + tex: {name: 'TeX', extensions: ['tex'], aliases: ['latex']}, text: {name: 'Text', extensions: ['txt']}, - vbnet: {name: 'VB.Net', extensions: ['vbnet', 'vb', 'bas']}, + vbnet: {name: 'VB.Net', extensions: ['vbnet', 'vb', 'bas'], aliases: ['vb', 'visualbasic']}, vbscript: {name: 'VBScript', extensions: ['vbs']}, verilog: {name: 'Verilog', extensions: ['v', 'veo']}, xml: {name: 'HTML, XML', extensions: ['xml', 'html', 'xhtml', 'rss', 'atom', 'xsl', 'plist']}, - yaml: {name: 'YAML', extensions: ['yaml']} + yaml: {name: 'YAML', extensions: ['yaml'], aliases: ['yml']} }, PostsViewJumpTypes: { BOTTOM: 1, diff --git a/webapp/utils/syntax_highlighting.jsx b/webapp/utils/syntax_highlighting.jsx index 47ba5bd4e..73e1087cb 100644 --- a/webapp/utils/syntax_highlighting.jsx +++ b/webapp/utils/syntax_highlighting.jsx @@ -123,9 +123,9 @@ hlJS.registerLanguage('yaml', hljsYaml); const HighlightedLanguages = Constants.HighlightedLanguages; export function highlight(lang, code) { - const language = lang.toLowerCase(); + const language = getLanguageFromNameOrAlias(lang); - if (HighlightedLanguages[language]) { + if (language) { try { return hlJS.highlight(language, code).value; } catch (e) { @@ -147,13 +147,25 @@ export function getLanguageFromFileExtension(extension) { } export function canHighlight(language) { - return Boolean(HighlightedLanguages[language.toLowerCase()]); + return Boolean(getLanguageFromNameOrAlias(language)); } export function getLanguageName(language) { if (canHighlight(language)) { - return HighlightedLanguages[language.toLowerCase()].name; + return HighlightedLanguages[getLanguageFromNameOrAlias(language)].name; } return ''; -} \ No newline at end of file +} + +function getLanguageFromNameOrAlias(name) { + const langName = name.toLowerCase(); + if (HighlightedLanguages[langName]) { + return langName; + } + + return Object.keys(HighlightedLanguages).find((key) => { + const aliases = HighlightedLanguages[key].aliases; + return aliases && aliases.find((a) => a === langName); + }); +} -- cgit v1.2.3-1-g7c22