vim2pygments.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. Vim Colorscheme Converter
  5. ~~~~~~~~~~~~~~~~~~~~~~~~~
  6. This script converts vim colorscheme files to valid pygments
  7. style classes meant for putting into modules.
  8. :copyright 2006 by Armin Ronacher.
  9. :license: BSD, see LICENSE for details.
  10. """
  11. import sys
  12. import re
  13. from os import path
  14. from cStringIO import StringIO
  15. split_re = re.compile(r'(?<!\\)\s+')
  16. SCRIPT_NAME = 'Vim Colorscheme Converter'
  17. SCRIPT_VERSION = '0.1'
  18. COLORS = {
  19. # Numeric Colors
  20. '0': '#000000',
  21. '1': '#c00000',
  22. '2': '#008000',
  23. '3': '#808000',
  24. '4': '#0000c0',
  25. '5': '#c000c0',
  26. '6': '#008080',
  27. '7': '#c0c0c0',
  28. '8': '#808080',
  29. '9': '#ff6060',
  30. '10': '#00ff00',
  31. '11': '#ffff00',
  32. '12': '#8080ff',
  33. '13': '#ff40ff',
  34. '14': '#00ffff',
  35. '15': '#ffffff',
  36. # Named Colors
  37. 'alice': '#f0f8ff',
  38. 'aliceblue': '#f0f8ff',
  39. 'antique': '#faebd7',
  40. 'antiquewhite': '#faebd7',
  41. 'antiquewhite1': '#ffefdb',
  42. 'antiquewhite2': '#eedfcc',
  43. 'antiquewhite3': '#cdc0b0',
  44. 'antiquewhite4': '#8b8378',
  45. 'aquamarine': '#7fffd4',
  46. 'aquamarine1': '#7fffd4',
  47. 'aquamarine2': '#76eec6',
  48. 'aquamarine3': '#66cdaa',
  49. 'aquamarine4': '#458b74',
  50. 'azure': '#f0ffff',
  51. 'azure1': '#f0ffff',
  52. 'azure2': '#e0eeee',
  53. 'azure3': '#c1cdcd',
  54. 'azure4': '#838b8b',
  55. 'beige': '#f5f5dc',
  56. 'bisque': '#ffe4c4',
  57. 'bisque1': '#ffe4c4',
  58. 'bisque2': '#eed5b7',
  59. 'bisque3': '#cdb79e',
  60. 'bisque4': '#8b7d6b',
  61. 'black': '#000000',
  62. 'blanched': '#ffebcd',
  63. 'blanchedalmond': '#ffebcd',
  64. 'blue': '#8a2be2',
  65. 'blue1': '#0000ff',
  66. 'blue2': '#0000ee',
  67. 'blue3': '#0000cd',
  68. 'blue4': '#00008b',
  69. 'blueviolet': '#8a2be2',
  70. 'brown': '#a52a2a',
  71. 'brown1': '#ff4040',
  72. 'brown2': '#ee3b3b',
  73. 'brown3': '#cd3333',
  74. 'brown4': '#8b2323',
  75. 'burlywood': '#deb887',
  76. 'burlywood1': '#ffd39b',
  77. 'burlywood2': '#eec591',
  78. 'burlywood3': '#cdaa7d',
  79. 'burlywood4': '#8b7355',
  80. 'cadet': '#5f9ea0',
  81. 'cadetblue': '#5f9ea0',
  82. 'cadetblue1': '#98f5ff',
  83. 'cadetblue2': '#8ee5ee',
  84. 'cadetblue3': '#7ac5cd',
  85. 'cadetblue4': '#53868b',
  86. 'chartreuse': '#7fff00',
  87. 'chartreuse1': '#7fff00',
  88. 'chartreuse2': '#76ee00',
  89. 'chartreuse3': '#66cd00',
  90. 'chartreuse4': '#458b00',
  91. 'chocolate': '#d2691e',
  92. 'chocolate1': '#ff7f24',
  93. 'chocolate2': '#ee7621',
  94. 'chocolate3': '#cd661d',
  95. 'chocolate4': '#8b4513',
  96. 'coral': '#ff7f50',
  97. 'coral1': '#ff7256',
  98. 'coral2': '#ee6a50',
  99. 'coral3': '#cd5b45',
  100. 'coral4': '#8b3e2f',
  101. 'cornflower': '#6495ed',
  102. 'cornflowerblue': '#6495ed',
  103. 'cornsilk': '#fff8dc',
  104. 'cornsilk1': '#fff8dc',
  105. 'cornsilk2': '#eee8cd',
  106. 'cornsilk3': '#cdc8b1',
  107. 'cornsilk4': '#8b8878',
  108. 'cyan': '#00ffff',
  109. 'cyan1': '#00ffff',
  110. 'cyan2': '#00eeee',
  111. 'cyan3': '#00cdcd',
  112. 'cyan4': '#008b8b',
  113. 'dark': '#8b0000',
  114. 'darkblue': '#00008b',
  115. 'darkcyan': '#008b8b',
  116. 'darkgoldenrod': '#b8860b',
  117. 'darkgoldenrod1': '#ffb90f',
  118. 'darkgoldenrod2': '#eead0e',
  119. 'darkgoldenrod3': '#cd950c',
  120. 'darkgoldenrod4': '#8b6508',
  121. 'darkgray': '#a9a9a9',
  122. 'darkgreen': '#006400',
  123. 'darkgrey': '#a9a9a9',
  124. 'darkkhaki': '#bdb76b',
  125. 'darkmagenta': '#8b008b',
  126. 'darkolivegreen': '#556b2f',
  127. 'darkolivegreen1': '#caff70',
  128. 'darkolivegreen2': '#bcee68',
  129. 'darkolivegreen3': '#a2cd5a',
  130. 'darkolivegreen4': '#6e8b3d',
  131. 'darkorange': '#ff8c00',
  132. 'darkorange1': '#ff7f00',
  133. 'darkorange2': '#ee7600',
  134. 'darkorange3': '#cd6600',
  135. 'darkorange4': '#8b4500',
  136. 'darkorchid': '#9932cc',
  137. 'darkorchid1': '#bf3eff',
  138. 'darkorchid2': '#b23aee',
  139. 'darkorchid3': '#9a32cd',
  140. 'darkorchid4': '#68228b',
  141. 'darkred': '#8b0000',
  142. 'darksalmon': '#e9967a',
  143. 'darkseagreen': '#8fbc8f',
  144. 'darkseagreen1': '#c1ffc1',
  145. 'darkseagreen2': '#b4eeb4',
  146. 'darkseagreen3': '#9bcd9b',
  147. 'darkseagreen4': '#698b69',
  148. 'darkslateblue': '#483d8b',
  149. 'darkslategray': '#2f4f4f',
  150. 'darkslategray1': '#97ffff',
  151. 'darkslategray2': '#8deeee',
  152. 'darkslategray3': '#79cdcd',
  153. 'darkslategray4': '#528b8b',
  154. 'darkslategrey': '#2f4f4f',
  155. 'darkturquoise': '#00ced1',
  156. 'darkviolet': '#9400d3',
  157. 'deep': '#ff1493',
  158. 'deeppink': '#ff1493',
  159. 'deeppink1': '#ff1493',
  160. 'deeppink2': '#ee1289',
  161. 'deeppink3': '#cd1076',
  162. 'deeppink4': '#8b0a50',
  163. 'deepskyblue': '#00bfff',
  164. 'deepskyblue1': '#00bfff',
  165. 'deepskyblue2': '#00b2ee',
  166. 'deepskyblue3': '#009acd',
  167. 'deepskyblue4': '#00688b',
  168. 'dim': '#696969',
  169. 'dimgray': '#696969',
  170. 'dimgrey': '#696969',
  171. 'dodger': '#1e90ff',
  172. 'dodgerblue': '#1e90ff',
  173. 'dodgerblue1': '#1e90ff',
  174. 'dodgerblue2': '#1c86ee',
  175. 'dodgerblue3': '#1874cd',
  176. 'dodgerblue4': '#104e8b',
  177. 'firebrick': '#b22222',
  178. 'firebrick1': '#ff3030',
  179. 'firebrick2': '#ee2c2c',
  180. 'firebrick3': '#cd2626',
  181. 'firebrick4': '#8b1a1a',
  182. 'floral': '#fffaf0',
  183. 'floralwhite': '#fffaf0',
  184. 'forest': '#228b22',
  185. 'forestgreen': '#228b22',
  186. 'gainsboro': '#dcdcdc',
  187. 'ghost': '#f8f8ff',
  188. 'ghostwhite': '#f8f8ff',
  189. 'gold': '#ffd700',
  190. 'gold1': '#ffd700',
  191. 'gold2': '#eec900',
  192. 'gold3': '#cdad00',
  193. 'gold4': '#8b7500',
  194. 'goldenrod': '#daa520',
  195. 'goldenrod1': '#ffc125',
  196. 'goldenrod2': '#eeb422',
  197. 'goldenrod3': '#cd9b1d',
  198. 'goldenrod4': '#8b6914',
  199. 'gray': '#bebebe',
  200. 'gray0': '#000000',
  201. 'gray1': '#030303',
  202. 'gray10': '#1a1a1a',
  203. 'gray100': '#ffffff',
  204. 'gray11': '#1c1c1c',
  205. 'gray12': '#1f1f1f',
  206. 'gray13': '#212121',
  207. 'gray14': '#242424',
  208. 'gray15': '#262626',
  209. 'gray16': '#292929',
  210. 'gray17': '#2b2b2b',
  211. 'gray18': '#2e2e2e',
  212. 'gray19': '#303030',
  213. 'gray2': '#050505',
  214. 'gray20': '#333333',
  215. 'gray21': '#363636',
  216. 'gray22': '#383838',
  217. 'gray23': '#3b3b3b',
  218. 'gray24': '#3d3d3d',
  219. 'gray25': '#404040',
  220. 'gray26': '#424242',
  221. 'gray27': '#454545',
  222. 'gray28': '#474747',
  223. 'gray29': '#4a4a4a',
  224. 'gray3': '#080808',
  225. 'gray30': '#4d4d4d',
  226. 'gray31': '#4f4f4f',
  227. 'gray32': '#525252',
  228. 'gray33': '#545454',
  229. 'gray34': '#575757',
  230. 'gray35': '#595959',
  231. 'gray36': '#5c5c5c',
  232. 'gray37': '#5e5e5e',
  233. 'gray38': '#616161',
  234. 'gray39': '#636363',
  235. 'gray4': '#0a0a0a',
  236. 'gray40': '#666666',
  237. 'gray41': '#696969',
  238. 'gray42': '#6b6b6b',
  239. 'gray43': '#6e6e6e',
  240. 'gray44': '#707070',
  241. 'gray45': '#737373',
  242. 'gray46': '#757575',
  243. 'gray47': '#787878',
  244. 'gray48': '#7a7a7a',
  245. 'gray49': '#7d7d7d',
  246. 'gray5': '#0d0d0d',
  247. 'gray50': '#7f7f7f',
  248. 'gray51': '#828282',
  249. 'gray52': '#858585',
  250. 'gray53': '#878787',
  251. 'gray54': '#8a8a8a',
  252. 'gray55': '#8c8c8c',
  253. 'gray56': '#8f8f8f',
  254. 'gray57': '#919191',
  255. 'gray58': '#949494',
  256. 'gray59': '#969696',
  257. 'gray6': '#0f0f0f',
  258. 'gray60': '#999999',
  259. 'gray61': '#9c9c9c',
  260. 'gray62': '#9e9e9e',
  261. 'gray63': '#a1a1a1',
  262. 'gray64': '#a3a3a3',
  263. 'gray65': '#a6a6a6',
  264. 'gray66': '#a8a8a8',
  265. 'gray67': '#ababab',
  266. 'gray68': '#adadad',
  267. 'gray69': '#b0b0b0',
  268. 'gray7': '#121212',
  269. 'gray70': '#b3b3b3',
  270. 'gray71': '#b5b5b5',
  271. 'gray72': '#b8b8b8',
  272. 'gray73': '#bababa',
  273. 'gray74': '#bdbdbd',
  274. 'gray75': '#bfbfbf',
  275. 'gray76': '#c2c2c2',
  276. 'gray77': '#c4c4c4',
  277. 'gray78': '#c7c7c7',
  278. 'gray79': '#c9c9c9',
  279. 'gray8': '#141414',
  280. 'gray80': '#cccccc',
  281. 'gray81': '#cfcfcf',
  282. 'gray82': '#d1d1d1',
  283. 'gray83': '#d4d4d4',
  284. 'gray84': '#d6d6d6',
  285. 'gray85': '#d9d9d9',
  286. 'gray86': '#dbdbdb',
  287. 'gray87': '#dedede',
  288. 'gray88': '#e0e0e0',
  289. 'gray89': '#e3e3e3',
  290. 'gray9': '#171717',
  291. 'gray90': '#e5e5e5',
  292. 'gray91': '#e8e8e8',
  293. 'gray92': '#ebebeb',
  294. 'gray93': '#ededed',
  295. 'gray94': '#f0f0f0',
  296. 'gray95': '#f2f2f2',
  297. 'gray96': '#f5f5f5',
  298. 'gray97': '#f7f7f7',
  299. 'gray98': '#fafafa',
  300. 'gray99': '#fcfcfc',
  301. 'green': '#adff2f',
  302. 'green1': '#00ff00',
  303. 'green2': '#00ee00',
  304. 'green3': '#00cd00',
  305. 'green4': '#008b00',
  306. 'greenyellow': '#adff2f',
  307. 'grey': '#bebebe',
  308. 'grey0': '#000000',
  309. 'grey1': '#030303',
  310. 'grey10': '#1a1a1a',
  311. 'grey100': '#ffffff',
  312. 'grey11': '#1c1c1c',
  313. 'grey12': '#1f1f1f',
  314. 'grey13': '#212121',
  315. 'grey14': '#242424',
  316. 'grey15': '#262626',
  317. 'grey16': '#292929',
  318. 'grey17': '#2b2b2b',
  319. 'grey18': '#2e2e2e',
  320. 'grey19': '#303030',
  321. 'grey2': '#050505',
  322. 'grey20': '#333333',
  323. 'grey21': '#363636',
  324. 'grey22': '#383838',
  325. 'grey23': '#3b3b3b',
  326. 'grey24': '#3d3d3d',
  327. 'grey25': '#404040',
  328. 'grey26': '#424242',
  329. 'grey27': '#454545',
  330. 'grey28': '#474747',
  331. 'grey29': '#4a4a4a',
  332. 'grey3': '#080808',
  333. 'grey30': '#4d4d4d',
  334. 'grey31': '#4f4f4f',
  335. 'grey32': '#525252',
  336. 'grey33': '#545454',
  337. 'grey34': '#575757',
  338. 'grey35': '#595959',
  339. 'grey36': '#5c5c5c',
  340. 'grey37': '#5e5e5e',
  341. 'grey38': '#616161',
  342. 'grey39': '#636363',
  343. 'grey4': '#0a0a0a',
  344. 'grey40': '#666666',
  345. 'grey41': '#696969',
  346. 'grey42': '#6b6b6b',
  347. 'grey43': '#6e6e6e',
  348. 'grey44': '#707070',
  349. 'grey45': '#737373',
  350. 'grey46': '#757575',
  351. 'grey47': '#787878',
  352. 'grey48': '#7a7a7a',
  353. 'grey49': '#7d7d7d',
  354. 'grey5': '#0d0d0d',
  355. 'grey50': '#7f7f7f',
  356. 'grey51': '#828282',
  357. 'grey52': '#858585',
  358. 'grey53': '#878787',
  359. 'grey54': '#8a8a8a',
  360. 'grey55': '#8c8c8c',
  361. 'grey56': '#8f8f8f',
  362. 'grey57': '#919191',
  363. 'grey58': '#949494',
  364. 'grey59': '#969696',
  365. 'grey6': '#0f0f0f',
  366. 'grey60': '#999999',
  367. 'grey61': '#9c9c9c',
  368. 'grey62': '#9e9e9e',
  369. 'grey63': '#a1a1a1',
  370. 'grey64': '#a3a3a3',
  371. 'grey65': '#a6a6a6',
  372. 'grey66': '#a8a8a8',
  373. 'grey67': '#ababab',
  374. 'grey68': '#adadad',
  375. 'grey69': '#b0b0b0',
  376. 'grey7': '#121212',
  377. 'grey70': '#b3b3b3',
  378. 'grey71': '#b5b5b5',
  379. 'grey72': '#b8b8b8',
  380. 'grey73': '#bababa',
  381. 'grey74': '#bdbdbd',
  382. 'grey75': '#bfbfbf',
  383. 'grey76': '#c2c2c2',
  384. 'grey77': '#c4c4c4',
  385. 'grey78': '#c7c7c7',
  386. 'grey79': '#c9c9c9',
  387. 'grey8': '#141414',
  388. 'grey80': '#cccccc',
  389. 'grey81': '#cfcfcf',
  390. 'grey82': '#d1d1d1',
  391. 'grey83': '#d4d4d4',
  392. 'grey84': '#d6d6d6',
  393. 'grey85': '#d9d9d9',
  394. 'grey86': '#dbdbdb',
  395. 'grey87': '#dedede',
  396. 'grey88': '#e0e0e0',
  397. 'grey89': '#e3e3e3',
  398. 'grey9': '#171717',
  399. 'grey90': '#e5e5e5',
  400. 'grey91': '#e8e8e8',
  401. 'grey92': '#ebebeb',
  402. 'grey93': '#ededed',
  403. 'grey94': '#f0f0f0',
  404. 'grey95': '#f2f2f2',
  405. 'grey96': '#f5f5f5',
  406. 'grey97': '#f7f7f7',
  407. 'grey98': '#fafafa',
  408. 'grey99': '#fcfcfc',
  409. 'honeydew': '#f0fff0',
  410. 'honeydew1': '#f0fff0',
  411. 'honeydew2': '#e0eee0',
  412. 'honeydew3': '#c1cdc1',
  413. 'honeydew4': '#838b83',
  414. 'hot': '#ff69b4',
  415. 'hotpink': '#ff69b4',
  416. 'hotpink1': '#ff6eb4',
  417. 'hotpink2': '#ee6aa7',
  418. 'hotpink3': '#cd6090',
  419. 'hotpink4': '#8b3a62',
  420. 'indian': '#cd5c5c',
  421. 'indianred': '#cd5c5c',
  422. 'indianred1': '#ff6a6a',
  423. 'indianred2': '#ee6363',
  424. 'indianred3': '#cd5555',
  425. 'indianred4': '#8b3a3a',
  426. 'ivory': '#fffff0',
  427. 'ivory1': '#fffff0',
  428. 'ivory2': '#eeeee0',
  429. 'ivory3': '#cdcdc1',
  430. 'ivory4': '#8b8b83',
  431. 'khaki': '#f0e68c',
  432. 'khaki1': '#fff68f',
  433. 'khaki2': '#eee685',
  434. 'khaki3': '#cdc673',
  435. 'khaki4': '#8b864e',
  436. 'lavender': '#fff0f5',
  437. 'lavenderblush': '#fff0f5',
  438. 'lavenderblush1': '#fff0f5',
  439. 'lavenderblush2': '#eee0e5',
  440. 'lavenderblush3': '#cdc1c5',
  441. 'lavenderblush4': '#8b8386',
  442. 'lawn': '#7cfc00',
  443. 'lawngreen': '#7cfc00',
  444. 'lemon': '#fffacd',
  445. 'lemonchiffon': '#fffacd',
  446. 'lemonchiffon1': '#fffacd',
  447. 'lemonchiffon2': '#eee9bf',
  448. 'lemonchiffon3': '#cdc9a5',
  449. 'lemonchiffon4': '#8b8970',
  450. 'light': '#90ee90',
  451. 'lightblue': '#add8e6',
  452. 'lightblue1': '#bfefff',
  453. 'lightblue2': '#b2dfee',
  454. 'lightblue3': '#9ac0cd',
  455. 'lightblue4': '#68838b',
  456. 'lightcoral': '#f08080',
  457. 'lightcyan': '#e0ffff',
  458. 'lightcyan1': '#e0ffff',
  459. 'lightcyan2': '#d1eeee',
  460. 'lightcyan3': '#b4cdcd',
  461. 'lightcyan4': '#7a8b8b',
  462. 'lightgoldenrod': '#eedd82',
  463. 'lightgoldenrod1': '#ffec8b',
  464. 'lightgoldenrod2': '#eedc82',
  465. 'lightgoldenrod3': '#cdbe70',
  466. 'lightgoldenrod4': '#8b814c',
  467. 'lightgoldenrodyellow': '#fafad2',
  468. 'lightgray': '#d3d3d3',
  469. 'lightgreen': '#90ee90',
  470. 'lightgrey': '#d3d3d3',
  471. 'lightpink': '#ffb6c1',
  472. 'lightpink1': '#ffaeb9',
  473. 'lightpink2': '#eea2ad',
  474. 'lightpink3': '#cd8c95',
  475. 'lightpink4': '#8b5f65',
  476. 'lightsalmon': '#ffa07a',
  477. 'lightsalmon1': '#ffa07a',
  478. 'lightsalmon2': '#ee9572',
  479. 'lightsalmon3': '#cd8162',
  480. 'lightsalmon4': '#8b5742',
  481. 'lightseagreen': '#20b2aa',
  482. 'lightskyblue': '#87cefa',
  483. 'lightskyblue1': '#b0e2ff',
  484. 'lightskyblue2': '#a4d3ee',
  485. 'lightskyblue3': '#8db6cd',
  486. 'lightskyblue4': '#607b8b',
  487. 'lightslateblue': '#8470ff',
  488. 'lightslategray': '#778899',
  489. 'lightslategrey': '#778899',
  490. 'lightsteelblue': '#b0c4de',
  491. 'lightsteelblue1': '#cae1ff',
  492. 'lightsteelblue2': '#bcd2ee',
  493. 'lightsteelblue3': '#a2b5cd',
  494. 'lightsteelblue4': '#6e7b8b',
  495. 'lightyellow': '#ffffe0',
  496. 'lightyellow1': '#ffffe0',
  497. 'lightyellow2': '#eeeed1',
  498. 'lightyellow3': '#cdcdb4',
  499. 'lightyellow4': '#8b8b7a',
  500. 'lime': '#32cd32',
  501. 'limegreen': '#32cd32',
  502. 'linen': '#faf0e6',
  503. 'magenta': '#ff00ff',
  504. 'magenta1': '#ff00ff',
  505. 'magenta2': '#ee00ee',
  506. 'magenta3': '#cd00cd',
  507. 'magenta4': '#8b008b',
  508. 'maroon': '#b03060',
  509. 'maroon1': '#ff34b3',
  510. 'maroon2': '#ee30a7',
  511. 'maroon3': '#cd2990',
  512. 'maroon4': '#8b1c62',
  513. 'medium': '#9370db',
  514. 'mediumaquamarine': '#66cdaa',
  515. 'mediumblue': '#0000cd',
  516. 'mediumorchid': '#ba55d3',
  517. 'mediumorchid1': '#e066ff',
  518. 'mediumorchid2': '#d15fee',
  519. 'mediumorchid3': '#b452cd',
  520. 'mediumorchid4': '#7a378b',
  521. 'mediumpurple': '#9370db',
  522. 'mediumpurple1': '#ab82ff',
  523. 'mediumpurple2': '#9f79ee',
  524. 'mediumpurple3': '#8968cd',
  525. 'mediumpurple4': '#5d478b',
  526. 'mediumseagreen': '#3cb371',
  527. 'mediumslateblue': '#7b68ee',
  528. 'mediumspringgreen': '#00fa9a',
  529. 'mediumturquoise': '#48d1cc',
  530. 'mediumvioletred': '#c71585',
  531. 'midnight': '#191970',
  532. 'midnightblue': '#191970',
  533. 'mint': '#f5fffa',
  534. 'mintcream': '#f5fffa',
  535. 'misty': '#ffe4e1',
  536. 'mistyrose': '#ffe4e1',
  537. 'mistyrose1': '#ffe4e1',
  538. 'mistyrose2': '#eed5d2',
  539. 'mistyrose3': '#cdb7b5',
  540. 'mistyrose4': '#8b7d7b',
  541. 'moccasin': '#ffe4b5',
  542. 'navajo': '#ffdead',
  543. 'navajowhite': '#ffdead',
  544. 'navajowhite1': '#ffdead',
  545. 'navajowhite2': '#eecfa1',
  546. 'navajowhite3': '#cdb38b',
  547. 'navajowhite4': '#8b795e',
  548. 'navy': '#000080',
  549. 'navyblue': '#000080',
  550. 'old': '#fdf5e6',
  551. 'oldlace': '#fdf5e6',
  552. 'olive': '#6b8e23',
  553. 'olivedrab': '#6b8e23',
  554. 'olivedrab1': '#c0ff3e',
  555. 'olivedrab2': '#b3ee3a',
  556. 'olivedrab3': '#9acd32',
  557. 'olivedrab4': '#698b22',
  558. 'orange': '#ff4500',
  559. 'orange1': '#ffa500',
  560. 'orange2': '#ee9a00',
  561. 'orange3': '#cd8500',
  562. 'orange4': '#8b5a00',
  563. 'orangered': '#ff4500',
  564. 'orangered1': '#ff4500',
  565. 'orangered2': '#ee4000',
  566. 'orangered3': '#cd3700',
  567. 'orangered4': '#8b2500',
  568. 'orchid': '#da70d6',
  569. 'orchid1': '#ff83fa',
  570. 'orchid2': '#ee7ae9',
  571. 'orchid3': '#cd69c9',
  572. 'orchid4': '#8b4789',
  573. 'pale': '#db7093',
  574. 'palegoldenrod': '#eee8aa',
  575. 'palegreen': '#98fb98',
  576. 'palegreen1': '#9aff9a',
  577. 'palegreen2': '#90ee90',
  578. 'palegreen3': '#7ccd7c',
  579. 'palegreen4': '#548b54',
  580. 'paleturquoise': '#afeeee',
  581. 'paleturquoise1': '#bbffff',
  582. 'paleturquoise2': '#aeeeee',
  583. 'paleturquoise3': '#96cdcd',
  584. 'paleturquoise4': '#668b8b',
  585. 'palevioletred': '#db7093',
  586. 'palevioletred1': '#ff82ab',
  587. 'palevioletred2': '#ee799f',
  588. 'palevioletred3': '#cd6889',
  589. 'palevioletred4': '#8b475d',
  590. 'papaya': '#ffefd5',
  591. 'papayawhip': '#ffefd5',
  592. 'peach': '#ffdab9',
  593. 'peachpuff': '#ffdab9',
  594. 'peachpuff1': '#ffdab9',
  595. 'peachpuff2': '#eecbad',
  596. 'peachpuff3': '#cdaf95',
  597. 'peachpuff4': '#8b7765',
  598. 'peru': '#cd853f',
  599. 'pink': '#ffc0cb',
  600. 'pink1': '#ffb5c5',
  601. 'pink2': '#eea9b8',
  602. 'pink3': '#cd919e',
  603. 'pink4': '#8b636c',
  604. 'plum': '#dda0dd',
  605. 'plum1': '#ffbbff',
  606. 'plum2': '#eeaeee',
  607. 'plum3': '#cd96cd',
  608. 'plum4': '#8b668b',
  609. 'powder': '#b0e0e6',
  610. 'powderblue': '#b0e0e6',
  611. 'purple': '#a020f0',
  612. 'purple1': '#9b30ff',
  613. 'purple2': '#912cee',
  614. 'purple3': '#7d26cd',
  615. 'purple4': '#551a8b',
  616. 'red': '#ff0000',
  617. 'red1': '#ff0000',
  618. 'red2': '#ee0000',
  619. 'red3': '#cd0000',
  620. 'red4': '#8b0000',
  621. 'rosy': '#bc8f8f',
  622. 'rosybrown': '#bc8f8f',
  623. 'rosybrown1': '#ffc1c1',
  624. 'rosybrown2': '#eeb4b4',
  625. 'rosybrown3': '#cd9b9b',
  626. 'rosybrown4': '#8b6969',
  627. 'royal': '#4169e1',
  628. 'royalblue': '#4169e1',
  629. 'royalblue1': '#4876ff',
  630. 'royalblue2': '#436eee',
  631. 'royalblue3': '#3a5fcd',
  632. 'royalblue4': '#27408b',
  633. 'saddle': '#8b4513',
  634. 'saddlebrown': '#8b4513',
  635. 'salmon': '#fa8072',
  636. 'salmon1': '#ff8c69',
  637. 'salmon2': '#ee8262',
  638. 'salmon3': '#cd7054',
  639. 'salmon4': '#8b4c39',
  640. 'sandy': '#f4a460',
  641. 'sandybrown': '#f4a460',
  642. 'sea': '#2e8b57',
  643. 'seagreen': '#2e8b57',
  644. 'seagreen1': '#54ff9f',
  645. 'seagreen2': '#4eee94',
  646. 'seagreen3': '#43cd80',
  647. 'seagreen4': '#2e8b57',
  648. 'seashell': '#fff5ee',
  649. 'seashell1': '#fff5ee',
  650. 'seashell2': '#eee5de',
  651. 'seashell3': '#cdc5bf',
  652. 'seashell4': '#8b8682',
  653. 'sienna': '#a0522d',
  654. 'sienna1': '#ff8247',
  655. 'sienna2': '#ee7942',
  656. 'sienna3': '#cd6839',
  657. 'sienna4': '#8b4726',
  658. 'sky': '#87ceeb',
  659. 'skyblue': '#87ceeb',
  660. 'skyblue1': '#87ceff',
  661. 'skyblue2': '#7ec0ee',
  662. 'skyblue3': '#6ca6cd',
  663. 'skyblue4': '#4a708b',
  664. 'slate': '#6a5acd',
  665. 'slateblue': '#6a5acd',
  666. 'slateblue1': '#836fff',
  667. 'slateblue2': '#7a67ee',
  668. 'slateblue3': '#6959cd',
  669. 'slateblue4': '#473c8b',
  670. 'slategray': '#708090',
  671. 'slategray1': '#c6e2ff',
  672. 'slategray2': '#b9d3ee',
  673. 'slategray3': '#9fb6cd',
  674. 'slategray4': '#6c7b8b',
  675. 'slategrey': '#708090',
  676. 'snow': '#fffafa',
  677. 'snow1': '#fffafa',
  678. 'snow2': '#eee9e9',
  679. 'snow3': '#cdc9c9',
  680. 'snow4': '#8b8989',
  681. 'spring': '#00ff7f',
  682. 'springgreen': '#00ff7f',
  683. 'springgreen1': '#00ff7f',
  684. 'springgreen2': '#00ee76',
  685. 'springgreen3': '#00cd66',
  686. 'springgreen4': '#008b45',
  687. 'steel': '#4682b4',
  688. 'steelblue': '#4682b4',
  689. 'steelblue1': '#63b8ff',
  690. 'steelblue2': '#5cacee',
  691. 'steelblue3': '#4f94cd',
  692. 'steelblue4': '#36648b',
  693. 'tan': '#d2b48c',
  694. 'tan1': '#ffa54f',
  695. 'tan2': '#ee9a49',
  696. 'tan3': '#cd853f',
  697. 'tan4': '#8b5a2b',
  698. 'thistle': '#d8bfd8',
  699. 'thistle1': '#ffe1ff',
  700. 'thistle2': '#eed2ee',
  701. 'thistle3': '#cdb5cd',
  702. 'thistle4': '#8b7b8b',
  703. 'tomato': '#ff6347',
  704. 'tomato1': '#ff6347',
  705. 'tomato2': '#ee5c42',
  706. 'tomato3': '#cd4f39',
  707. 'tomato4': '#8b3626',
  708. 'turquoise': '#40e0d0',
  709. 'turquoise1': '#00f5ff',
  710. 'turquoise2': '#00e5ee',
  711. 'turquoise3': '#00c5cd',
  712. 'turquoise4': '#00868b',
  713. 'violet': '#ee82ee',
  714. 'violetred': '#d02090',
  715. 'violetred1': '#ff3e96',
  716. 'violetred2': '#ee3a8c',
  717. 'violetred3': '#cd3278',
  718. 'violetred4': '#8b2252',
  719. 'wheat': '#f5deb3',
  720. 'wheat1': '#ffe7ba',
  721. 'wheat2': '#eed8ae',
  722. 'wheat3': '#cdba96',
  723. 'wheat4': '#8b7e66',
  724. 'white': '#ffffff',
  725. 'whitesmoke': '#f5f5f5',
  726. 'yellow': '#ffff00',
  727. 'yellow1': '#ffff00',
  728. 'yellow2': '#eeee00',
  729. 'yellow3': '#cdcd00',
  730. 'yellow4': '#8b8b00',
  731. 'yellowgreen': '#9acd32'
  732. }
  733. TOKENS = {
  734. 'normal': '',
  735. 'string': 'String',
  736. 'number': 'Number',
  737. 'float': 'Number.Float',
  738. 'constant': 'Name.Constant',
  739. 'number': 'Number',
  740. 'statement': ('Keyword', 'Name.Tag'),
  741. 'identifier': 'Name.Variable',
  742. 'operator': 'Operator.Word',
  743. 'label': 'Name.Label',
  744. 'exception': 'Name.Exception',
  745. 'function': ('Name.Function', 'Name.Attribute'),
  746. 'preproc': 'Comment.Preproc',
  747. 'comment': 'Comment',
  748. 'type': 'Keyword.Type',
  749. 'diffadd': 'Generic.Inserted',
  750. 'diffdelete': 'Generic.Deleted',
  751. 'error': 'Generic.Error',
  752. 'errormsg': 'Generic.Traceback',
  753. 'title': ('Generic.Heading', 'Generic.Subheading'),
  754. 'underlined': 'Generic.Emph',
  755. 'special': 'Name.Entity',
  756. 'nontext': 'Generic.Output'
  757. }
  758. TOKEN_TYPES = set()
  759. for token in TOKENS.itervalues():
  760. if not isinstance(token, tuple):
  761. token = (token,)
  762. for token in token:
  763. if token:
  764. TOKEN_TYPES.add(token.split('.')[0])
  765. def get_vim_color(color):
  766. if color.startswith('#'):
  767. if len(color) == 7:
  768. return color
  769. else:
  770. return '#%s0' % '0'.join(color)[1:]
  771. return COLORS.get(color.lower())
  772. def find_colors(code):
  773. colors = {'Normal': {}}
  774. bg_color = None
  775. def set(attrib, value):
  776. if token not in colors:
  777. colors[token] = {}
  778. if key.startswith('gui') or attrib not in colors[token]:
  779. colors[token][attrib] = value
  780. for line in code.splitlines():
  781. if line.startswith('"'):
  782. continue
  783. parts = split_re.split(line.strip())
  784. if len(parts) == 2 and parts[0] == 'set':
  785. p = parts[1].split()
  786. if p[0] == 'background' and p[1] == 'dark':
  787. token = 'Normal'
  788. bg_color = '#000000'
  789. elif len(parts) > 2 and \
  790. len(parts[0]) >= 2 and \
  791. 'highlight'.startswith(parts[0]):
  792. token = parts[1].lower()
  793. if token not in TOKENS:
  794. continue
  795. for item in parts[2:]:
  796. p = item.split('=', 1)
  797. if not len(p) == 2:
  798. continue
  799. key, value = p
  800. if key in ('ctermfg', 'guifg'):
  801. color = get_vim_color(value)
  802. if color:
  803. set('color', color)
  804. elif key in ('ctermbg', 'guibg'):
  805. color = get_vim_color(value)
  806. if color:
  807. set('bgcolor', color)
  808. elif key in ('term', 'cterm', 'gui'):
  809. items = value.split(',')
  810. for item in items:
  811. item = item.lower()
  812. if item == 'none':
  813. set('noinherit', True)
  814. elif item == 'bold':
  815. set('bold', True)
  816. elif item == 'underline':
  817. set('underline', True)
  818. elif item == 'italic':
  819. set('italic', True)
  820. if bg_color is not None and not colors['Normal'].get('bgcolor'):
  821. colors['Normal']['bgcolor'] = bg_color
  822. color_map = {}
  823. for token, styles in colors.iteritems():
  824. if token in TOKENS:
  825. tmp = []
  826. if styles.get('noinherit'):
  827. tmp.append('noinherit')
  828. if 'color' in styles:
  829. tmp.append(styles['color'])
  830. if 'bgcolor' in styles:
  831. tmp.append('bg:' + styles['bgcolor'])
  832. if styles.get('bold'):
  833. tmp.append('bold')
  834. if styles.get('italic'):
  835. tmp.append('italic')
  836. if styles.get('underline'):
  837. tmp.append('underline')
  838. tokens = TOKENS[token]
  839. if not isinstance(tokens, tuple):
  840. tokens = (tokens,)
  841. for token in tokens:
  842. color_map[token] = ' '.join(tmp)
  843. default_token = color_map.pop('')
  844. return default_token, color_map
  845. class StyleWriter(object):
  846. def __init__(self, code, name):
  847. self.code = code
  848. self.name = name.lower()
  849. def write_header(self, out):
  850. out.write('# -*- coding: utf-8 -*-\n"""\n')
  851. out.write(' %s Colorscheme\n' % self.name.title())
  852. out.write(' %s\n\n' % ('~' * (len(self.name) + 12)))
  853. out.write(' Converted by %s\n' % SCRIPT_NAME)
  854. out.write('"""\nfrom pygments.style import Style\n')
  855. out.write('from pygments.token import Token, %s\n\n' % ', '.join(TOKEN_TYPES))
  856. out.write('class %sStyle(Style):\n\n' % self.name.title())
  857. def write(self, out):
  858. self.write_header(out)
  859. default_token, tokens = find_colors(self.code)
  860. tokens = tokens.items()
  861. tokens.sort(lambda a, b: cmp(len(a[0]), len(a[1])))
  862. bg_color = [x[3:] for x in default_token.split() if x.startswith('bg:')]
  863. if bg_color:
  864. out.write(' background_color = %r\n' % bg_color[0])
  865. out.write(' styles = {\n')
  866. out.write(' %-20s%r\n' % ('Token:', default_token))
  867. for token, definition in tokens:
  868. if definition:
  869. out.write(' %-20s%r\n' % (token + ':', definition))
  870. out.write(' }')
  871. def __repr__(self):
  872. out = StringIO()
  873. self.write_style(out)
  874. return out.getvalue()
  875. def convert(filename, stream=None):
  876. name = path.basename(filename)
  877. if name.endswith('.vim'):
  878. name = name[:-4]
  879. f = file(filename)
  880. code = f.read()
  881. f.close()
  882. writer = StyleWriter(code, name)
  883. if stream is not None:
  884. out = stream
  885. else:
  886. out = StringIO()
  887. writer.write(out)
  888. if stream is None:
  889. return out.getvalue()
  890. def main():
  891. if len(sys.argv) != 2 or sys.argv[1] in ('-h', '--help'):
  892. print 'Usage: %s <filename.vim>' % sys.argv[0]
  893. return 2
  894. if sys.argv[1] in ('-v', '--version'):
  895. print '%s %s' % (SCRIPT_NAME, SCRIPT_VERSION)
  896. return
  897. filename = sys.argv[1]
  898. if not (path.exists(filename) and path.isfile(filename)):
  899. print 'Error: %s not found' % filename
  900. return 1
  901. convert(filename, sys.stdout)
  902. sys.stdout.write('\n')
  903. if __name__ == '__main__':
  904. sys.exit(main() or 0)