1+ #!/usr/bin/env tsx
2+
3+ import { languages } from '../src/lib/data/languages' ;
4+ import fs from 'fs' ;
5+ import path from 'path' ;
6+ import { fileURLToPath } from 'url' ;
7+
8+ const __filename = fileURLToPath ( import . meta. url ) ;
9+ const __dirname = path . dirname ( __filename ) ;
10+
11+ // Logo URL mappings from Perplexity research
12+ const logoUrls : Record < string , string > = {
13+ // First batch (40 languages)
14+ 'python' : 'https://commons.wikimedia.org/wiki/File:Python-logo-notext.svg' ,
15+ 'javascript' : 'https://commons.wikimedia.org/wiki/File:Unofficial_JavaScript_logo_2.svg' ,
16+ 'typescript' : 'https://commons.wikimedia.org/wiki/File:Typescript_logo_2020.svg' ,
17+ 'rust' : 'https://commons.wikimedia.org/wiki/File:Rust_programming_language_black_logo.svg' ,
18+ 'go' : 'https://commons.wikimedia.org/wiki/File:Go_Logo_Blue.svg' ,
19+ 'java' : 'https://commons.wikimedia.org/wiki/File:Java_programming_language_logo.svg' ,
20+ 'cpp' : 'https://commons.wikimedia.org/wiki/File:ISO_C%2B%2B_Logo.svg' ,
21+ 'ruby' : 'https://commons.wikimedia.org/wiki/File:Ruby_logo.svg' ,
22+ 'swift' : 'https://commons.wikimedia.org/wiki/File:Swift_logo.svg' ,
23+ 'haskell' : 'https://commons.wikimedia.org/wiki/File:Haskell-Logo.svg' ,
24+ 'csharp' : 'https://commons.wikimedia.org/wiki/File:C_Sharp_wordmark.svg' ,
25+ 'c' : 'https://commons.wikimedia.org/wiki/File:C_Programming_Language.svg' ,
26+ 'php' : 'https://commons.wikimedia.org/wiki/File:PHP-logo.svg' ,
27+ 'kotlin' : 'https://commons.wikimedia.org/wiki/File:Kotlin-logo.svg' ,
28+ 'r' : 'https://commons.wikimedia.org/wiki/File:R_logo.svg' ,
29+ 'matlab' : 'https://commons.wikimedia.org/wiki/File:Matlab_Logo.png' ,
30+ 'scala' : 'https://commons.wikimedia.org/wiki/File:Scala-full-color.svg' ,
31+ 'dart' : 'https://commons.wikimedia.org/wiki/File:Dart_programming_language_logo.svg' ,
32+ 'objectivec' : 'https://commons.wikimedia.org/wiki/File:Objective-C_Logo.png' ,
33+ 'perl' : 'https://commons.wikimedia.org/wiki/File:Perl_Code_Logo.svg' ,
34+ 'lua' : 'https://commons.wikimedia.org/wiki/File:Lua-Logo.svg' ,
35+ 'julia' : 'https://commons.wikimedia.org/wiki/File:Julia_Logo_color.svg' ,
36+ 'elixir' : 'https://commons.wikimedia.org/wiki/File:Elixir_logo.png' ,
37+ 'clojure' : 'https://commons.wikimedia.org/wiki/File:Clojure_logo.svg' ,
38+ 'fsharp' : 'https://commons.wikimedia.org/wiki/File:F_Sharp_logo.svg' ,
39+ 'erlang' : 'https://commons.wikimedia.org/wiki/File:Erlang_logo.svg' ,
40+ 'visualbasic' : 'https://commons.wikimedia.org/wiki/File:VisualBasic_6.0_logo.png' ,
41+ 'delphi' : 'https://commons.wikimedia.org/wiki/File:Delphi_Programming_Language_logo.png' ,
42+ 'cobol' : 'https://commons.wikimedia.org/wiki/File:COBOL_logo.svg' ,
43+ 'sql' : 'https://commons.wikimedia.org/wiki/File:Structured_Query_Language_logo.svg' ,
44+ 'bash' : 'https://commons.wikimedia.org/wiki/File:Bash_Logo_Colored.svg' ,
45+ 'groovy' : 'https://commons.wikimedia.org/wiki/File:Groovy-logo.svg' ,
46+ 'assembly' : 'https://commons.wikimedia.org/wiki/File:Assembly_wikipedia_logo.png' ,
47+ 'fortran' : 'https://commons.wikimedia.org/wiki/File:Fortran_logo.svg' ,
48+ 'ada' : 'https://commons.wikimedia.org/wiki/File:Ada_Mascot_with_slogan.svg' ,
49+ 'powershell' : 'https://commons.wikimedia.org/wiki/File:PowerShell_Logo.svg' ,
50+ 'vba' : 'https://commons.wikimedia.org/wiki/File:VB_logo.png' ,
51+ 'plsql' : 'https://commons.wikimedia.org/wiki/File:PLSQL_logo.png' ,
52+ 'prolog' : 'https://commons.wikimedia.org/wiki/File:Prolog_logo.png' ,
53+ 'lisp' : 'https://commons.wikimedia.org/wiki/File:LISP_logo.svg' ,
54+
55+ // Second batch (60 languages)
56+ 'd' : 'https://commons.wikimedia.org/wiki/File:D_Programming_Language_logo.svg' ,
57+ 'scratch' : 'https://commons.wikimedia.org/wiki/File:Scratch_logo.svg' ,
58+ 'scheme' : 'https://commons.wikimedia.org/wiki/File:Scheme.svg' ,
59+ 'ocaml' : 'https://commons.wikimedia.org/wiki/File:OCaml_logo.svg' ,
60+ 'solidity' : 'https://commons.wikimedia.org/wiki/File:Solidity_logo.svg' ,
61+ 'racket' : 'https://commons.wikimedia.org/wiki/File:Racket-logo.svg' ,
62+ 'awk' : 'https://techicons.dev/icons/awk.svg' ,
63+ 'sas' : 'https://commons.wikimedia.org/wiki/File:SAS_logo.svg' ,
64+ 'tcl' : 'https://commons.wikimedia.org/wiki/File:Tcl_logo.svg' ,
65+ 'vbnet' : 'https://commons.wikimedia.org/wiki/File:VB.NET_Logo.svg' ,
66+ 'nim' : 'https://commons.wikimedia.org/wiki/File:Nim-logo.svg' ,
67+ 'crystal' : 'https://commons.wikimedia.org/wiki/File:Crystal_language_logo.svg' ,
68+ 'zig' : 'https://commons.wikimedia.org/wiki/File:Zig-logo.svg' ,
69+ 'vlang' : 'https://commons.wikimedia.org/wiki/File:V_logo.svg' ,
70+ 'elm' : 'https://commons.wikimedia.org/wiki/File:Elm_logo.svg' ,
71+ 'purescript' : 'https://commons.wikimedia.org/wiki/File:Purescript_logo.svg' ,
72+ 'reasonml' : 'https://commons.wikimedia.org/wiki/File:ReasonML_logo.svg' ,
73+ 'commonlisp' : 'https://commons.wikimedia.org/wiki/File:Common_Lisp_logo.svg' ,
74+ 'standardml' : 'https://commons.wikimedia.org/wiki/File:Standard_ML_Logo.svg' ,
75+ 'smalltalk' : 'https://commons.wikimedia.org/wiki/File:Smalltalk_logo.png' ,
76+ 'sed' : 'https://techicons.dev/icons/sed.svg' ,
77+ 'verilog' : 'https://commons.wikimedia.org/wiki/File:Verilog_logo.svg' ,
78+ 'vhdl' : 'https://commons.wikimedia.org/wiki/File:VHDL-Logo.svg' ,
79+ 'cuda' : 'https://commons.wikimedia.org/wiki/File:Nvidia_cuda_logo.svg' ,
80+ 'opencl' : 'https://commons.wikimedia.org/wiki/File:OpenCL_logo.svg' ,
81+ 'glsl' : 'https://commons.wikimedia.org/wiki/File:OpenGL_Shading_Language_logo.png' ,
82+ 'hlsl' : 'https://commons.wikimedia.org/wiki/File:HLSL_Logo.svg' ,
83+ 'mojo' : 'https://commons.wikimedia.org/wiki/File:Mojo_(programming_language)_logo.svg' ,
84+ 'carbon' : 'https://commons.wikimedia.org/wiki/File:Carbon-language-logo.svg' ,
85+ 'actionscript' : 'https://commons.wikimedia.org/wiki/File:ActionScript_Icon.png' ,
86+ 'autohotkey' : 'https://commons.wikimedia.org/wiki/File:Autohotkey_logo.png' ,
87+ 'apl' : 'https://commons.wikimedia.org/wiki/File:APL_logo.png' ,
88+ 'coffeescript' : 'https://techicons.dev/icons/coffeescript.svg' ,
89+ 'chapel' : 'https://commons.wikimedia.org/wiki/File:Chapel-logo.svg' ,
90+ 'eiffel' : 'https://commons.wikimedia.org/wiki/File:Eiffel_programming_language_logo.png' ,
91+ 'factor' : 'https://commons.wikimedia.org/wiki/File:Factor_(programming_language)_logo.png' ,
92+ 'forth' : 'https://commons.wikimedia.org/wiki/File:Forth_logo.png' ,
93+ 'io' : 'https://commons.wikimedia.org/wiki/File:Io_phoenix_logo.png' ,
94+ 'j' : 'https://commons.wikimedia.org/wiki/File:J_logo.png' ,
95+ 'labview' : 'https://commons.wikimedia.org/wiki/File:Labview_logo.svg' ,
96+ 'logo' : 'https://commons.wikimedia.org/wiki/File:Logo_turtle.svg' ,
97+ 'mql4' : 'https://commons.wikimedia.org/wiki/File:MetaQuotes_Logo.png' ,
98+ 'monkey' : 'https://commons.wikimedia.org/wiki/File:Monkey-X-logo.png' ,
99+ 'purebasic' : 'https://commons.wikimedia.org/wiki/File:PureBasic_logo.png' ,
100+ 'rexx' : 'https://commons.wikimedia.org/wiki/File:Rexx_logo.png' ,
101+ 'ring' : 'https://commons.wikimedia.org/wiki/File:Ring_logo.svg' ,
102+ 'simula' : 'https://commons.wikimedia.org/wiki/File:Simula_logo.png' ,
103+ 'xslt' : 'https://commons.wikimedia.org/wiki/File:XSLT_logo.svg' ,
104+ 'tcltk' : 'https://commons.wikimedia.org/wiki/File:Tcl_Tk_logo.svg' ,
105+ 'qsharp' : 'https://commons.wikimedia.org/wiki/File:Q_Sharp_logo.svg' ,
106+ 'wasm' : 'https://commons.wikimedia.org/wiki/File:WebAssembly_Logo.svg' ,
107+ 'systemverilog' : 'https://commons.wikimedia.org/wiki/File:SystemVerilog_logo.svg' ,
108+ 'pony' : 'https://commons.wikimedia.org/wiki/File:Pony-programming-language-logo.png' ,
109+ 'idris' : 'https://commons.wikimedia.org/wiki/File:Idris_logo.svg' ,
110+ 'vale' : 'https://commons.wikimedia.org/wiki/File:Vale_logo.svg' ,
111+ 'odin' : 'https://commons.wikimedia.org/wiki/File:Odin_logo.png' ,
112+ 'janet' : 'https://commons.wikimedia.org/wiki/File:Janet-language-logo.svg' ,
113+ 'nix' : 'https://commons.wikimedia.org/wiki/File:Nix_logo.svg' ,
114+ 'dhall' : 'https://commons.wikimedia.org/wiki/File:Dhall_logo.svg' ,
115+ 'lean' : 'https://commons.wikimedia.org/wiki/File:Lean_logo.svg'
116+ } ;
117+
118+ console . log ( 'Adding logo URLs to languages array...\n' ) ;
119+
120+ // Read the current languages.ts file
121+ const languagesPath = path . join ( __dirname , '../src/lib/data/languages.ts' ) ;
122+ let languagesContent = fs . readFileSync ( languagesPath , 'utf-8' ) ;
123+
124+ // Track which languages we update
125+ let updated = 0 ;
126+ let missing = 0 ;
127+
128+ languages . forEach ( ( lang ) => {
129+ const logoUrl = logoUrls [ lang . id ] ;
130+
131+ if ( logoUrl ) {
132+ // Find the language object in the file content and add imgURL
133+ const langRegex = new RegExp (
134+ `(\\{\\s*id:\\s*'${ lang . id } '[\\s\\S]*?)color:\\s*'[^']*'` ,
135+ 'g'
136+ ) ;
137+
138+ languagesContent = languagesContent . replace ( langRegex , ( match ) => {
139+ // Check if imgURL already exists
140+ if ( match . includes ( 'imgURL:' ) ) {
141+ return match ;
142+ }
143+ // Add imgURL after color
144+ return match + `,\n\t\timgURL: '${ logoUrl } '` ;
145+ } ) ;
146+
147+ console . log ( `✅ ${ lang . name } : ${ logoUrl } ` ) ;
148+ updated ++ ;
149+ } else {
150+ console . log ( `❌ ${ lang . name } : No URL found` ) ;
151+ missing ++ ;
152+ }
153+ } ) ;
154+
155+ // Write back to file
156+ fs . writeFileSync ( languagesPath , languagesContent , 'utf-8' ) ;
157+
158+ console . log ( `\n=== Summary ===` ) ;
159+ console . log ( `Updated: ${ updated } languages` ) ;
160+ console . log ( `Missing: ${ missing } languages` ) ;
161+ console . log ( `Total: ${ languages . length } languages` ) ;
162+
163+ export { } ;
0 commit comments