demotape 0.0.0.pre.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (939) hide show
  1. checksums.yaml +7 -0
  2. data/.github/CODEOWNERS +4 -0
  3. data/.github/FUNDING.yml +4 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  7. data/.github/PULL_REQUEST_TEMPLATE.md +38 -0
  8. data/.github/dependabot.yml +15 -0
  9. data/.github/workflows/ruby-tests.yml +53 -0
  10. data/.gitignore +15 -0
  11. data/.rubocop.yml +18 -0
  12. data/CHANGELOG.md +16 -0
  13. data/CODE_OF_CONDUCT.md +74 -0
  14. data/CONTRIBUTING.md +80 -0
  15. data/Gemfile +5 -0
  16. data/LICENSE.md +20 -0
  17. data/Makefile +29 -0
  18. data/README.md +574 -0
  19. data/Rakefile +19 -0
  20. data/bin/console +16 -0
  21. data/bin/setup +10 -0
  22. data/bin/themes +37 -0
  23. data/demotape.ascii +19 -0
  24. data/demotape.gemspec +55 -0
  25. data/demotape.jsonc +59 -0
  26. data/demotape.y +520 -0
  27. data/demotape_ascii.rb +29 -0
  28. data/editors/sublime-text/Comments (DemoTape).tmPreferences +21 -0
  29. data/editors/sublime-text/DemoTape.sublime-completions +140 -0
  30. data/editors/sublime-text/DemoTape.sublime-syntax +243 -0
  31. data/editors/vim/README.md +91 -0
  32. data/editors/vim/ftdetect/demotape.vim +2 -0
  33. data/editors/vim/syntax/demotape.vim +81 -0
  34. data/editors/vscode/README.md +29 -0
  35. data/editors/vscode/demotape.tmLanguage.json +201 -0
  36. data/editors/vscode/language-configuration.json +24 -0
  37. data/editors/vscode/package.json +30 -0
  38. data/examples/alt.mp4 +0 -0
  39. data/examples/alt.png +0 -0
  40. data/examples/alt.tape +9 -0
  41. data/examples/arrow.mp4 +0 -0
  42. data/examples/arrow.png +0 -0
  43. data/examples/arrow.tape +7 -0
  44. data/examples/backspace.mp4 +0 -0
  45. data/examples/backspace.png +0 -0
  46. data/examples/backspace.tape +4 -0
  47. data/examples/bash.mp4 +0 -0
  48. data/examples/bash.png +0 -0
  49. data/examples/bash.tape +4 -0
  50. data/examples/bg.jpg +0 -0
  51. data/examples/clear.mp4 +0 -0
  52. data/examples/clear.png +0 -0
  53. data/examples/clear.tape +6 -0
  54. data/examples/cli_ui_interactive_prompt.mp4 +0 -0
  55. data/examples/cli_ui_interactive_prompt.png +0 -0
  56. data/examples/cli_ui_interactive_prompt.tape +16 -0
  57. data/examples/cli_ui_nested_frames.mp4 +0 -0
  58. data/examples/cli_ui_nested_frames.png +0 -0
  59. data/examples/cli_ui_nested_frames.tape +15 -0
  60. data/examples/cli_ui_progress.mp4 +0 -0
  61. data/examples/cli_ui_progress.png +0 -0
  62. data/examples/cli_ui_progress.tape +6 -0
  63. data/examples/cli_ui_spinner.mp4 +0 -0
  64. data/examples/cli_ui_spinner.png +0 -0
  65. data/examples/cli_ui_spinner.tape +6 -0
  66. data/examples/cli_ui_status_widget.mp4 +0 -0
  67. data/examples/cli_ui_status_widget.png +0 -0
  68. data/examples/cli_ui_status_widget.tape +6 -0
  69. data/examples/cli_ui_symbols.mp4 +0 -0
  70. data/examples/cli_ui_symbols.png +0 -0
  71. data/examples/cli_ui_symbols.tape +6 -0
  72. data/examples/cli_ui_text_prompt.mp4 +0 -0
  73. data/examples/cli_ui_text_prompt.png +0 -0
  74. data/examples/cli_ui_text_prompt.tape +10 -0
  75. data/examples/clipboard.mp4 +0 -0
  76. data/examples/clipboard.png +0 -0
  77. data/examples/clipboard.tape +5 -0
  78. data/examples/ctrl.mp4 +0 -0
  79. data/examples/ctrl.png +0 -0
  80. data/examples/ctrl.tape +5 -0
  81. data/examples/ctrl_arrows.mp4 +0 -0
  82. data/examples/ctrl_arrows.png +0 -0
  83. data/examples/ctrl_arrows.tape +14 -0
  84. data/examples/demotape.mp4 +0 -0
  85. data/examples/demotape.png +0 -0
  86. data/examples/demotape.tape +6 -0
  87. data/examples/demotape.txt +13 -0
  88. data/examples/enter.mp4 +0 -0
  89. data/examples/enter.png +0 -0
  90. data/examples/enter.tape +3 -0
  91. data/examples/errors/include_itself.tape +1 -0
  92. data/examples/fastfetch.gif +0 -0
  93. data/examples/fastfetch.mp4 +0 -0
  94. data/examples/fastfetch.png +0 -0
  95. data/examples/fastfetch.tape +11 -0
  96. data/examples/fish.mp4 +0 -0
  97. data/examples/fish.png +0 -0
  98. data/examples/fish.tape +4 -0
  99. data/examples/format.mp4 +0 -0
  100. data/examples/format.png +0 -0
  101. data/examples/format.tape +15 -0
  102. data/examples/gh-cli.mp4 +0 -0
  103. data/examples/gh-cli.png +0 -0
  104. data/examples/gh-cli.tape +13 -0
  105. data/examples/gif_loop.gif +0 -0
  106. data/examples/gif_loop.png +0 -0
  107. data/examples/gif_loop.tape +5 -0
  108. data/examples/include.mp4 +0 -0
  109. data/examples/include.png +0 -0
  110. data/examples/include.tape +1 -0
  111. data/examples/include_with_set.mp4 +0 -0
  112. data/examples/include_with_set.png +0 -0
  113. data/examples/include_with_set.tape +2 -0
  114. data/examples/meta/cli.tape +10 -0
  115. data/examples/nerdfonts.mp4 +0 -0
  116. data/examples/nerdfonts.png +0 -0
  117. data/examples/nerdfonts.tape +9 -0
  118. data/examples/output.gif +0 -0
  119. data/examples/output.mp4 +0 -0
  120. data/examples/output.png +0 -0
  121. data/examples/output.tape +8 -0
  122. data/examples/output.webm +0 -0
  123. data/examples/products.json +1803 -0
  124. data/examples/screenshot.mp4 +0 -0
  125. data/examples/screenshot.png +0 -0
  126. data/examples/screenshot.tape +9 -0
  127. data/examples/script.rb +3 -0
  128. data/examples/set_cursor_bar.mp4 +0 -0
  129. data/examples/set_cursor_bar.png +0 -0
  130. data/examples/set_cursor_bar.tape +5 -0
  131. data/examples/set_cursor_blink.mp4 +0 -0
  132. data/examples/set_cursor_blink.png +0 -0
  133. data/examples/set_cursor_blink.tape +4 -0
  134. data/examples/set_cursor_underline.mp4 +0 -0
  135. data/examples/set_cursor_underline.png +0 -0
  136. data/examples/set_cursor_underline.tape +5 -0
  137. data/examples/set_dimensions.mp4 +0 -0
  138. data/examples/set_dimensions.png +0 -0
  139. data/examples/set_dimensions.tape +5 -0
  140. data/examples/set_font_family.mp4 +0 -0
  141. data/examples/set_font_family.png +0 -0
  142. data/examples/set_font_family.tape +4 -0
  143. data/examples/set_font_size.mp4 +0 -0
  144. data/examples/set_font_size.png +0 -0
  145. data/examples/set_font_size.tape +4 -0
  146. data/examples/set_line_height.mp4 +0 -0
  147. data/examples/set_line_height.png +0 -0
  148. data/examples/set_line_height.tape +8 -0
  149. data/examples/set_margin.mp4 +0 -0
  150. data/examples/set_margin.png +0 -0
  151. data/examples/set_margin.tape +7 -0
  152. data/examples/set_margin_with_border_radius.mp4 +0 -0
  153. data/examples/set_margin_with_border_radius.png +0 -0
  154. data/examples/set_margin_with_border_radius.tape +8 -0
  155. data/examples/set_margin_with_image.mp4 +0 -0
  156. data/examples/set_margin_with_image.png +0 -0
  157. data/examples/set_margin_with_image.tape +7 -0
  158. data/examples/set_padding.mp4 +0 -0
  159. data/examples/set_padding.png +0 -0
  160. data/examples/set_padding.tape +7 -0
  161. data/examples/set_theme.mp4 +0 -0
  162. data/examples/set_theme.png +0 -0
  163. data/examples/set_theme.tape +9 -0
  164. data/examples/set_theme_property.mp4 +0 -0
  165. data/examples/set_theme_property.png +0 -0
  166. data/examples/set_theme_property.tape +10 -0
  167. data/examples/set_typing_speed.mp4 +0 -0
  168. data/examples/set_typing_speed.png +0 -0
  169. data/examples/set_typing_speed.tape +6 -0
  170. data/examples/slides.mp4 +0 -0
  171. data/examples/slides.png +0 -0
  172. data/examples/slides.tape +14 -0
  173. data/examples/space.mp4 +0 -0
  174. data/examples/space.png +0 -0
  175. data/examples/space.tape +3 -0
  176. data/examples/stdin.mp4 +0 -0
  177. data/examples/stdin.png +0 -0
  178. data/examples/stdin.tape +7 -0
  179. data/examples/tab.mp4 +0 -0
  180. data/examples/tab.png +0 -0
  181. data/examples/tab.tape +5 -0
  182. data/examples/themes/3024_day.png +0 -0
  183. data/examples/themes/3024_night.png +0 -0
  184. data/examples/themes/aardvark_blue.png +0 -0
  185. data/examples/themes/abernathy.png +0 -0
  186. data/examples/themes/adventure.png +0 -0
  187. data/examples/themes/adventure_time.png +0 -0
  188. data/examples/themes/afterglow.png +0 -0
  189. data/examples/themes/alabaster.png +0 -0
  190. data/examples/themes/alien_blood.png +0 -0
  191. data/examples/themes/andromeda.png +0 -0
  192. data/examples/themes/apple_classic.png +0 -0
  193. data/examples/themes/apple_system_colors.png +0 -0
  194. data/examples/themes/arcoiris.png +0 -0
  195. data/examples/themes/argonaut.png +0 -0
  196. data/examples/themes/arthur.png +0 -0
  197. data/examples/themes/atelier_sulphurpool.png +0 -0
  198. data/examples/themes/atom.png +0 -0
  199. data/examples/themes/atom_one_light.png +0 -0
  200. data/examples/themes/aurora.png +0 -0
  201. data/examples/themes/ayu.png +0 -0
  202. data/examples/themes/ayu_light.png +0 -0
  203. data/examples/themes/ayu_mirage.png +0 -0
  204. data/examples/themes/banana_blueberry.png +0 -0
  205. data/examples/themes/batman.png +0 -0
  206. data/examples/themes/belafonte_day.png +0 -0
  207. data/examples/themes/belafonte_night.png +0 -0
  208. data/examples/themes/birds_of_paradise.png +0 -0
  209. data/examples/themes/blazer.png +0 -0
  210. data/examples/themes/blue_berry_pie.png +0 -0
  211. data/examples/themes/blue_dolphin.png +0 -0
  212. data/examples/themes/blue_matrix.png +0 -0
  213. data/examples/themes/bluloco_dark.png +0 -0
  214. data/examples/themes/bluloco_light.png +0 -0
  215. data/examples/themes/borland.png +0 -0
  216. data/examples/themes/breeze.png +0 -0
  217. data/examples/themes/bright_lights.png +0 -0
  218. data/examples/themes/broadcast.png +0 -0
  219. data/examples/themes/brogrammer.png +0 -0
  220. data/examples/themes/bubbles.png +0 -0
  221. data/examples/themes/builtin_dark.png +0 -0
  222. data/examples/themes/builtin_light.png +0 -0
  223. data/examples/themes/builtin_pastel_dark.png +0 -0
  224. data/examples/themes/builtin_solarized_dark.png +0 -0
  225. data/examples/themes/builtin_solarized_light.png +0 -0
  226. data/examples/themes/builtin_tango_dark.png +0 -0
  227. data/examples/themes/builtin_tango_light.png +0 -0
  228. data/examples/themes/c64.png +0 -0
  229. data/examples/themes/calamity.png +0 -0
  230. data/examples/themes/catppuccin_frappe.png +0 -0
  231. data/examples/themes/catppuccin_latte.png +0 -0
  232. data/examples/themes/catppuccin_macchiato.png +0 -0
  233. data/examples/themes/catppuccin_mocha.png +0 -0
  234. data/examples/themes/cga.png +0 -0
  235. data/examples/themes/chalk.png +0 -0
  236. data/examples/themes/chalkboard.png +0 -0
  237. data/examples/themes/challenger_deep.png +0 -0
  238. data/examples/themes/chester.png +0 -0
  239. data/examples/themes/ciapre.png +0 -0
  240. data/examples/themes/clrs.png +0 -0
  241. data/examples/themes/cobalt2.png +0 -0
  242. data/examples/themes/cobalt_neon.png +0 -0
  243. data/examples/themes/coffee_theme.png +0 -0
  244. data/examples/themes/contrast_light.png +0 -0
  245. data/examples/themes/coolnight.png +0 -0
  246. data/examples/themes/crayon_pony_fish.png +0 -0
  247. data/examples/themes/crystal_violet.png +0 -0
  248. data/examples/themes/cutie_pro.png +0 -0
  249. data/examples/themes/cyber_cube.png +0 -0
  250. data/examples/themes/cyber_punk2077.png +0 -0
  251. data/examples/themes/cyberdyne.png +0 -0
  252. data/examples/themes/cyberpunk.png +0 -0
  253. data/examples/themes/dark_pastel.png +0 -0
  254. data/examples/themes/dark_plus.png +0 -0
  255. data/examples/themes/darkermatrix.png +0 -0
  256. data/examples/themes/darkmatrix.png +0 -0
  257. data/examples/themes/darkside.png +0 -0
  258. data/examples/themes/dayfox.png +0 -0
  259. data/examples/themes/deep.png +0 -0
  260. data/examples/themes/desert.png +0 -0
  261. data/examples/themes/dimmed_monokai.png +0 -0
  262. data/examples/themes/django.png +0 -0
  263. data/examples/themes/django_reborn_again.png +0 -0
  264. data/examples/themes/django_smooth.png +0 -0
  265. data/examples/themes/doom_one.png +0 -0
  266. data/examples/themes/doom_peacock.png +0 -0
  267. data/examples/themes/dot_gov.png +0 -0
  268. data/examples/themes/dracula.png +0 -0
  269. data/examples/themes/dracula_plus.png +0 -0
  270. data/examples/themes/duckbones.png +0 -0
  271. data/examples/themes/duotone_dark.png +0 -0
  272. data/examples/themes/earthsong.png +0 -0
  273. data/examples/themes/elemental.png +0 -0
  274. data/examples/themes/elementary.png +0 -0
  275. data/examples/themes/encom.png +0 -0
  276. data/examples/themes/espresso.png +0 -0
  277. data/examples/themes/espresso_libre.png +0 -0
  278. data/examples/themes/everblush.png +0 -0
  279. data/examples/themes/fahrenheit.png +0 -0
  280. data/examples/themes/fairyfloss.png +0 -0
  281. data/examples/themes/farmhouse_dark.png +0 -0
  282. data/examples/themes/farmhouse_light.png +0 -0
  283. data/examples/themes/fideloper.png +0 -0
  284. data/examples/themes/firefly_traditional.png +0 -0
  285. data/examples/themes/firefox_dev.png +0 -0
  286. data/examples/themes/firewatch.png +0 -0
  287. data/examples/themes/fish_tank.png +0 -0
  288. data/examples/themes/flat.png +0 -0
  289. data/examples/themes/flatland.png +0 -0
  290. data/examples/themes/flexoki_dark.png +0 -0
  291. data/examples/themes/flexoki_light.png +0 -0
  292. data/examples/themes/floraverse.png +0 -0
  293. data/examples/themes/forest_blue.png +0 -0
  294. data/examples/themes/framer.png +0 -0
  295. data/examples/themes/front_end_delight.png +0 -0
  296. data/examples/themes/fun_forrest.png +0 -0
  297. data/examples/themes/galaxy.png +0 -0
  298. data/examples/themes/galizur.png +0 -0
  299. data/examples/themes/ganyu.png +0 -0
  300. data/examples/themes/git_hub_dark.png +0 -0
  301. data/examples/themes/github.png +0 -0
  302. data/examples/themes/glacier.png +0 -0
  303. data/examples/themes/glorious.png +0 -0
  304. data/examples/themes/grape.png +0 -0
  305. data/examples/themes/grass.png +0 -0
  306. data/examples/themes/grey_green.png +0 -0
  307. data/examples/themes/gruvbox_dark.png +0 -0
  308. data/examples/themes/gruvbox_dark_hard.png +0 -0
  309. data/examples/themes/gruvbox_light.png +0 -0
  310. data/examples/themes/guezwhoz.png +0 -0
  311. data/examples/themes/h4rithd.png +0 -0
  312. data/examples/themes/h4rithd_com.png +0 -0
  313. data/examples/themes/ha_x0_r_blue.png +0 -0
  314. data/examples/themes/ha_x0_r_gr33_n.png +0 -0
  315. data/examples/themes/ha_x0_r_r3_d.png +0 -0
  316. data/examples/themes/hacktober.png +0 -0
  317. data/examples/themes/hardcore.png +0 -0
  318. data/examples/themes/harper.png +0 -0
  319. data/examples/themes/highway.png +0 -0
  320. data/examples/themes/hipster_green.png +0 -0
  321. data/examples/themes/hivacruz.png +0 -0
  322. data/examples/themes/homebrew.png +0 -0
  323. data/examples/themes/hopscotch.png +0 -0
  324. data/examples/themes/hopscotch_256.png +0 -0
  325. data/examples/themes/horizon.png +0 -0
  326. data/examples/themes/hurtado.png +0 -0
  327. data/examples/themes/hybrid.png +0 -0
  328. data/examples/themes/hyper.png +0 -0
  329. data/examples/themes/ic_green_ppl.png +0 -0
  330. data/examples/themes/ic_orange_ppl.png +0 -0
  331. data/examples/themes/iceberg_dark.png +0 -0
  332. data/examples/themes/iceberg_light.png +0 -0
  333. data/examples/themes/idea.png +0 -0
  334. data/examples/themes/idle_toes.png +0 -0
  335. data/examples/themes/ir_black.png +0 -0
  336. data/examples/themes/iterm2_dark_background.png +0 -0
  337. data/examples/themes/iterm2_default.png +0 -0
  338. data/examples/themes/iterm2_light_background.png +0 -0
  339. data/examples/themes/iterm2_pastel_dark_background.png +0 -0
  340. data/examples/themes/iterm2_smoooooth.png +0 -0
  341. data/examples/themes/iterm2_solarized_dark.png +0 -0
  342. data/examples/themes/iterm2_solarized_light.png +0 -0
  343. data/examples/themes/iterm2_tango_dark.png +0 -0
  344. data/examples/themes/iterm2_tango_light.png +0 -0
  345. data/examples/themes/jackie_brown.png +0 -0
  346. data/examples/themes/japanesque.png +0 -0
  347. data/examples/themes/jellybeans.png +0 -0
  348. data/examples/themes/jet_brains_darcula.png +0 -0
  349. data/examples/themes/jubi.png +0 -0
  350. data/examples/themes/juicy_colors.png +0 -0
  351. data/examples/themes/kanagawa.png +0 -0
  352. data/examples/themes/kanagawabones.png +0 -0
  353. data/examples/themes/kibble.png +0 -0
  354. data/examples/themes/kolorit.png +0 -0
  355. data/examples/themes/konsolas.png +0 -0
  356. data/examples/themes/lab_fox.png +0 -0
  357. data/examples/themes/laser.png +0 -0
  358. data/examples/themes/later_this_evening.png +0 -0
  359. data/examples/themes/lavandula.png +0 -0
  360. data/examples/themes/liquid_carbon.png +0 -0
  361. data/examples/themes/liquid_carbon_transparent.png +0 -0
  362. data/examples/themes/liquid_carbon_transparent_inverse.png +0 -0
  363. data/examples/themes/lovelace.png +0 -0
  364. data/examples/themes/man_page.png +0 -0
  365. data/examples/themes/mariana.png +0 -0
  366. data/examples/themes/material.png +0 -0
  367. data/examples/themes/material_dark.png +0 -0
  368. data/examples/themes/material_darker.png +0 -0
  369. data/examples/themes/material_design_colors.png +0 -0
  370. data/examples/themes/material_ocean.png +0 -0
  371. data/examples/themes/mathias.png +0 -0
  372. data/examples/themes/matrix.png +0 -0
  373. data/examples/themes/medallion.png +0 -0
  374. data/examples/themes/mellifluous.png +0 -0
  375. data/examples/themes/midnight_in_mojave.png +0 -0
  376. data/examples/themes/mirage.png +0 -0
  377. data/examples/themes/misterioso.png +0 -0
  378. data/examples/themes/molokai.png +0 -0
  379. data/examples/themes/mona_lisa.png +0 -0
  380. data/examples/themes/monokai_cmder.png +0 -0
  381. data/examples/themes/monokai_pro.png +0 -0
  382. data/examples/themes/monokai_pro_filter_octagon.png +0 -0
  383. data/examples/themes/monokai_pro_filter_ristretto.png +0 -0
  384. data/examples/themes/monokai_remastered.png +0 -0
  385. data/examples/themes/monokai_soda.png +0 -0
  386. data/examples/themes/monokai_vivid.png +0 -0
  387. data/examples/themes/moonlight_ii.png +0 -0
  388. data/examples/themes/n0tch2k.png +0 -0
  389. data/examples/themes/neobones_dark.png +0 -0
  390. data/examples/themes/neobones_light.png +0 -0
  391. data/examples/themes/neon.png +0 -0
  392. data/examples/themes/neopolitan.png +0 -0
  393. data/examples/themes/neutron.png +0 -0
  394. data/examples/themes/night_city.png +0 -0
  395. data/examples/themes/night_lion_v1.png +0 -0
  396. data/examples/themes/night_lion_v2.png +0 -0
  397. data/examples/themes/night_owlish_light.png +0 -0
  398. data/examples/themes/nightfox.png +0 -0
  399. data/examples/themes/niji.png +0 -0
  400. data/examples/themes/nocturnal_winter.png +0 -0
  401. data/examples/themes/nord.png +0 -0
  402. data/examples/themes/nord_light.png +0 -0
  403. data/examples/themes/novel.png +0 -0
  404. data/examples/themes/nvim_dark.png +0 -0
  405. data/examples/themes/nvim_light.png +0 -0
  406. data/examples/themes/obsidian.png +0 -0
  407. data/examples/themes/ocean.png +0 -0
  408. data/examples/themes/oceanic_material.png +0 -0
  409. data/examples/themes/oceanic_next.png +0 -0
  410. data/examples/themes/ollie.png +0 -0
  411. data/examples/themes/one_dark.png +0 -0
  412. data/examples/themes/one_half_dark.png +0 -0
  413. data/examples/themes/one_half_light.png +0 -0
  414. data/examples/themes/one_star.png +0 -0
  415. data/examples/themes/operator_mono_dark.png +0 -0
  416. data/examples/themes/overnight_slumber.png +0 -0
  417. data/examples/themes/pale_night_hc.png +0 -0
  418. data/examples/themes/pandora.png +0 -0
  419. data/examples/themes/paraiso_dark.png +0 -0
  420. data/examples/themes/paul_millr.png +0 -0
  421. data/examples/themes/pencil_dark.png +0 -0
  422. data/examples/themes/pencil_light.png +0 -0
  423. data/examples/themes/peppermint.png +0 -0
  424. data/examples/themes/piatto_light.png +0 -0
  425. data/examples/themes/pnevma.png +0 -0
  426. data/examples/themes/popping_and_locking.png +0 -0
  427. data/examples/themes/primary.png +0 -0
  428. data/examples/themes/primer.png +0 -0
  429. data/examples/themes/pro.png +0 -0
  430. data/examples/themes/pro_light.png +0 -0
  431. data/examples/themes/purple_rain.png +0 -0
  432. data/examples/themes/purplepeter.png +0 -0
  433. data/examples/themes/qb64_super_dark_blue.png +0 -0
  434. data/examples/themes/rapture.png +0 -0
  435. data/examples/themes/raycast_dark.png +0 -0
  436. data/examples/themes/raycast_light.png +0 -0
  437. data/examples/themes/rebecca.png +0 -0
  438. data/examples/themes/red_alert.png +0 -0
  439. data/examples/themes/red_planet.png +0 -0
  440. data/examples/themes/red_sands.png +0 -0
  441. data/examples/themes/relaxed.png +0 -0
  442. data/examples/themes/retro.png +0 -0
  443. data/examples/themes/retrowave.png +0 -0
  444. data/examples/themes/rippedcasts.png +0 -0
  445. data/examples/themes/rose_pine.png +0 -0
  446. data/examples/themes/rose_pine_dawn.png +0 -0
  447. data/examples/themes/rose_pine_moon.png +0 -0
  448. data/examples/themes/rouge_2.png +0 -0
  449. data/examples/themes/royal.png +0 -0
  450. data/examples/themes/ryuuko.png +0 -0
  451. data/examples/themes/sakura.png +0 -0
  452. data/examples/themes/scarlet_protocol.png +0 -0
  453. data/examples/themes/sea_shells.png +0 -0
  454. data/examples/themes/seafoam_pastel.png +0 -0
  455. data/examples/themes/seoulbones_dark.png +0 -0
  456. data/examples/themes/seoulbones_light.png +0 -0
  457. data/examples/themes/serendipity_midnight.png +0 -0
  458. data/examples/themes/serendipity_morning.png +0 -0
  459. data/examples/themes/serendipity_sunset.png +0 -0
  460. data/examples/themes/seti.png +0 -0
  461. data/examples/themes/shades_of_purple.png +0 -0
  462. data/examples/themes/shaman.png +0 -0
  463. data/examples/themes/slate.png +0 -0
  464. data/examples/themes/sleepy_hollow.png +0 -0
  465. data/examples/themes/smyck.png +0 -0
  466. data/examples/themes/snazzy.png +0 -0
  467. data/examples/themes/soft_server.png +0 -0
  468. data/examples/themes/solarized_darcula.png +0 -0
  469. data/examples/themes/solarized_dark_higher_contrast.png +0 -0
  470. data/examples/themes/solarized_dark_patched.png +0 -0
  471. data/examples/themes/sonoran_gothic.png +0 -0
  472. data/examples/themes/sonoran_sunrise.png +0 -0
  473. data/examples/themes/space_gray.png +0 -0
  474. data/examples/themes/space_gray_eighties.png +0 -0
  475. data/examples/themes/space_gray_eighties_dull.png +0 -0
  476. data/examples/themes/spacedust.png +0 -0
  477. data/examples/themes/spiderman.png +0 -0
  478. data/examples/themes/spring.png +0 -0
  479. data/examples/themes/square.png +0 -0
  480. data/examples/themes/sublette.png +0 -0
  481. data/examples/themes/subliminal.png +0 -0
  482. data/examples/themes/sundried.png +0 -0
  483. data/examples/themes/symfonic.png +0 -0
  484. data/examples/themes/synthwave.png +0 -0
  485. data/examples/themes/synthwave_alpha.png +0 -0
  486. data/examples/themes/synthwave_everything.png +0 -0
  487. data/examples/themes/tango_adapted.png +0 -0
  488. data/examples/themes/tango_half_adapted.png +0 -0
  489. data/examples/themes/teerb.png +0 -0
  490. data/examples/themes/terafox.png +0 -0
  491. data/examples/themes/terminal_basic.png +0 -0
  492. data/examples/themes/thayer_bright.png +0 -0
  493. data/examples/themes/the_hulk.png +0 -0
  494. data/examples/themes/theme.tape +13 -0
  495. data/examples/themes/tinacious_design_dark.png +0 -0
  496. data/examples/themes/tinacious_design_light.png +0 -0
  497. data/examples/themes/tokyo_night.png +0 -0
  498. data/examples/themes/tokyo_night_light.png +0 -0
  499. data/examples/themes/tokyo_night_storm.png +0 -0
  500. data/examples/themes/tokyonight.png +0 -0
  501. data/examples/themes/tokyonight_day.png +0 -0
  502. data/examples/themes/tokyonight_storm.png +0 -0
  503. data/examples/themes/tomorrow.png +0 -0
  504. data/examples/themes/tomorrow_night.png +0 -0
  505. data/examples/themes/tomorrow_night_blue.png +0 -0
  506. data/examples/themes/tomorrow_night_bright.png +0 -0
  507. data/examples/themes/tomorrow_night_burns.png +0 -0
  508. data/examples/themes/tomorrow_night_eighties.png +0 -0
  509. data/examples/themes/toy_chest.png +0 -0
  510. data/examples/themes/treehouse.png +0 -0
  511. data/examples/themes/twilight.png +0 -0
  512. data/examples/themes/ubuntu.png +0 -0
  513. data/examples/themes/ultra_dark.png +0 -0
  514. data/examples/themes/ultra_violent.png +0 -0
  515. data/examples/themes/under_the_sea.png +0 -0
  516. data/examples/themes/unholy.png +0 -0
  517. data/examples/themes/unikitty.png +0 -0
  518. data/examples/themes/urple.png +0 -0
  519. data/examples/themes/vaughn.png +0 -0
  520. data/examples/themes/vesper.png +0 -0
  521. data/examples/themes/vibrant_ink.png +0 -0
  522. data/examples/themes/vimbones.png +0 -0
  523. data/examples/themes/violet_dark.png +0 -0
  524. data/examples/themes/violet_light.png +0 -0
  525. data/examples/themes/warm_neon.png +0 -0
  526. data/examples/themes/wez.png +0 -0
  527. data/examples/themes/whimsy.png +0 -0
  528. data/examples/themes/wild_cherry.png +0 -0
  529. data/examples/themes/wilmersdorf.png +0 -0
  530. data/examples/themes/wombat.png +0 -0
  531. data/examples/themes/wryan.png +0 -0
  532. data/examples/themes/zenbones.png +0 -0
  533. data/examples/themes/zenbones_dark.png +0 -0
  534. data/examples/themes/zenbones_light.png +0 -0
  535. data/examples/themes/zenburn.png +0 -0
  536. data/examples/themes/zenburned.png +0 -0
  537. data/examples/themes/zenwritten_dark.png +0 -0
  538. data/examples/themes/zenwritten_light.png +0 -0
  539. data/examples/themes/zeonica.png +0 -0
  540. data/examples/tmux.mp4 +0 -0
  541. data/examples/tmux.png +0 -0
  542. data/examples/tmux.tape +28 -0
  543. data/examples/type.mp4 +0 -0
  544. data/examples/type.png +0 -0
  545. data/examples/type.tape +11 -0
  546. data/examples/type_file.mp4 +0 -0
  547. data/examples/type_file.png +0 -0
  548. data/examples/type_file.tape +23 -0
  549. data/examples/variable_typing.mp4 +0 -0
  550. data/examples/variable_typing.png +0 -0
  551. data/examples/variable_typing.tape +41 -0
  552. data/examples/wait_until.mp4 +0 -0
  553. data/examples/wait_until.png +0 -0
  554. data/examples/wait_until.tape +8 -0
  555. data/examples/zsh.mp4 +0 -0
  556. data/examples/zsh.png +0 -0
  557. data/examples/zsh.tape +4 -0
  558. data/exe/demotape +11 -0
  559. data/lib/demo_tape/bounds.rb +15 -0
  560. data/lib/demo_tape/cli.rb +158 -0
  561. data/lib/demo_tape/command.rb +341 -0
  562. data/lib/demo_tape/duration.rb +31 -0
  563. data/lib/demo_tape/exporter.rb +372 -0
  564. data/lib/demo_tape/generator.rb +17 -0
  565. data/lib/demo_tape/lexer.rb +262 -0
  566. data/lib/demo_tape/parser.rb +889 -0
  567. data/lib/demo_tape/rcs/bash +32 -0
  568. data/lib/demo_tape/rcs/fish +31 -0
  569. data/lib/demo_tape/rcs/zsh +40 -0
  570. data/lib/demo_tape/runner.rb +722 -0
  571. data/lib/demo_tape/spacing.rb +5 -0
  572. data/lib/demo_tape/spinner.rb +37 -0
  573. data/lib/demo_tape/templates/.keep +0 -0
  574. data/lib/demo_tape/theme.rb +49 -0
  575. data/lib/demo_tape/themes/3024_day.json +22 -0
  576. data/lib/demo_tape/themes/3024_night.json +22 -0
  577. data/lib/demo_tape/themes/aardvark_blue.json +22 -0
  578. data/lib/demo_tape/themes/abernathy.json +22 -0
  579. data/lib/demo_tape/themes/adventure.json +22 -0
  580. data/lib/demo_tape/themes/adventure_time.json +22 -0
  581. data/lib/demo_tape/themes/afterglow.json +22 -0
  582. data/lib/demo_tape/themes/alabaster.json +22 -0
  583. data/lib/demo_tape/themes/alien_blood.json +22 -0
  584. data/lib/demo_tape/themes/andromeda.json +22 -0
  585. data/lib/demo_tape/themes/apple_classic.json +22 -0
  586. data/lib/demo_tape/themes/apple_system_colors.json +22 -0
  587. data/lib/demo_tape/themes/arcoiris.json +22 -0
  588. data/lib/demo_tape/themes/argonaut.json +22 -0
  589. data/lib/demo_tape/themes/arthur.json +22 -0
  590. data/lib/demo_tape/themes/atelier_sulphurpool.json +22 -0
  591. data/lib/demo_tape/themes/atom.json +22 -0
  592. data/lib/demo_tape/themes/atom_one_light.json +22 -0
  593. data/lib/demo_tape/themes/aurora.json +22 -0
  594. data/lib/demo_tape/themes/ayu.json +22 -0
  595. data/lib/demo_tape/themes/ayu_light.json +22 -0
  596. data/lib/demo_tape/themes/ayu_mirage.json +22 -0
  597. data/lib/demo_tape/themes/banana_blueberry.json +22 -0
  598. data/lib/demo_tape/themes/batman.json +22 -0
  599. data/lib/demo_tape/themes/belafonte_day.json +22 -0
  600. data/lib/demo_tape/themes/belafonte_night.json +22 -0
  601. data/lib/demo_tape/themes/birds_of_paradise.json +22 -0
  602. data/lib/demo_tape/themes/blazer.json +22 -0
  603. data/lib/demo_tape/themes/blue_berry_pie.json +22 -0
  604. data/lib/demo_tape/themes/blue_dolphin.json +22 -0
  605. data/lib/demo_tape/themes/blue_matrix.json +22 -0
  606. data/lib/demo_tape/themes/bluloco_dark.json +22 -0
  607. data/lib/demo_tape/themes/bluloco_light.json +22 -0
  608. data/lib/demo_tape/themes/borland.json +22 -0
  609. data/lib/demo_tape/themes/breeze.json +22 -0
  610. data/lib/demo_tape/themes/bright_lights.json +22 -0
  611. data/lib/demo_tape/themes/broadcast.json +22 -0
  612. data/lib/demo_tape/themes/brogrammer.json +22 -0
  613. data/lib/demo_tape/themes/bubbles.json +22 -0
  614. data/lib/demo_tape/themes/builtin_dark.json +22 -0
  615. data/lib/demo_tape/themes/builtin_light.json +22 -0
  616. data/lib/demo_tape/themes/builtin_pastel_dark.json +22 -0
  617. data/lib/demo_tape/themes/builtin_solarized_dark.json +22 -0
  618. data/lib/demo_tape/themes/builtin_solarized_light.json +22 -0
  619. data/lib/demo_tape/themes/builtin_tango_dark.json +22 -0
  620. data/lib/demo_tape/themes/builtin_tango_light.json +22 -0
  621. data/lib/demo_tape/themes/c64.json +22 -0
  622. data/lib/demo_tape/themes/calamity.json +22 -0
  623. data/lib/demo_tape/themes/catppuccin_frappe.json +22 -0
  624. data/lib/demo_tape/themes/catppuccin_latte.json +22 -0
  625. data/lib/demo_tape/themes/catppuccin_macchiato.json +22 -0
  626. data/lib/demo_tape/themes/catppuccin_mocha.json +22 -0
  627. data/lib/demo_tape/themes/cga.json +22 -0
  628. data/lib/demo_tape/themes/chalk.json +22 -0
  629. data/lib/demo_tape/themes/chalkboard.json +22 -0
  630. data/lib/demo_tape/themes/challenger_deep.json +22 -0
  631. data/lib/demo_tape/themes/chester.json +22 -0
  632. data/lib/demo_tape/themes/ciapre.json +22 -0
  633. data/lib/demo_tape/themes/clrs.json +22 -0
  634. data/lib/demo_tape/themes/cobalt2.json +22 -0
  635. data/lib/demo_tape/themes/cobalt_neon.json +22 -0
  636. data/lib/demo_tape/themes/coffee_theme.json +22 -0
  637. data/lib/demo_tape/themes/contrast_light.json +22 -0
  638. data/lib/demo_tape/themes/coolnight.json +22 -0
  639. data/lib/demo_tape/themes/crayon_pony_fish.json +22 -0
  640. data/lib/demo_tape/themes/crystal_violet.json +22 -0
  641. data/lib/demo_tape/themes/cutie_pro.json +22 -0
  642. data/lib/demo_tape/themes/cyber_cube.json +22 -0
  643. data/lib/demo_tape/themes/cyber_punk2077.json +22 -0
  644. data/lib/demo_tape/themes/cyberdyne.json +22 -0
  645. data/lib/demo_tape/themes/cyberpunk.json +22 -0
  646. data/lib/demo_tape/themes/dark_pastel.json +22 -0
  647. data/lib/demo_tape/themes/dark_plus.json +22 -0
  648. data/lib/demo_tape/themes/darkermatrix.json +22 -0
  649. data/lib/demo_tape/themes/darkmatrix.json +22 -0
  650. data/lib/demo_tape/themes/darkside.json +22 -0
  651. data/lib/demo_tape/themes/dayfox.json +22 -0
  652. data/lib/demo_tape/themes/deep.json +22 -0
  653. data/lib/demo_tape/themes/default_dark.json +22 -0
  654. data/lib/demo_tape/themes/default_light.json +22 -0
  655. data/lib/demo_tape/themes/desert.json +22 -0
  656. data/lib/demo_tape/themes/dimmed_monokai.json +22 -0
  657. data/lib/demo_tape/themes/django.json +22 -0
  658. data/lib/demo_tape/themes/django_reborn_again.json +22 -0
  659. data/lib/demo_tape/themes/django_smooth.json +22 -0
  660. data/lib/demo_tape/themes/doom_one.json +22 -0
  661. data/lib/demo_tape/themes/doom_peacock.json +22 -0
  662. data/lib/demo_tape/themes/dot_gov.json +22 -0
  663. data/lib/demo_tape/themes/dracula.json +22 -0
  664. data/lib/demo_tape/themes/dracula_plus.json +21 -0
  665. data/lib/demo_tape/themes/duckbones.json +22 -0
  666. data/lib/demo_tape/themes/duotone_dark.json +22 -0
  667. data/lib/demo_tape/themes/earthsong.json +22 -0
  668. data/lib/demo_tape/themes/elemental.json +22 -0
  669. data/lib/demo_tape/themes/elementary.json +22 -0
  670. data/lib/demo_tape/themes/encom.json +22 -0
  671. data/lib/demo_tape/themes/espresso.json +22 -0
  672. data/lib/demo_tape/themes/espresso_libre.json +22 -0
  673. data/lib/demo_tape/themes/everblush.json +22 -0
  674. data/lib/demo_tape/themes/fahrenheit.json +22 -0
  675. data/lib/demo_tape/themes/fairyfloss.json +22 -0
  676. data/lib/demo_tape/themes/farmhouse_dark.json +22 -0
  677. data/lib/demo_tape/themes/farmhouse_light.json +22 -0
  678. data/lib/demo_tape/themes/fideloper.json +22 -0
  679. data/lib/demo_tape/themes/firefly_traditional.json +22 -0
  680. data/lib/demo_tape/themes/firefox_dev.json +22 -0
  681. data/lib/demo_tape/themes/firewatch.json +22 -0
  682. data/lib/demo_tape/themes/fish_tank.json +22 -0
  683. data/lib/demo_tape/themes/flat.json +22 -0
  684. data/lib/demo_tape/themes/flatland.json +22 -0
  685. data/lib/demo_tape/themes/flexoki_dark.json +22 -0
  686. data/lib/demo_tape/themes/flexoki_light.json +22 -0
  687. data/lib/demo_tape/themes/floraverse.json +22 -0
  688. data/lib/demo_tape/themes/forest_blue.json +22 -0
  689. data/lib/demo_tape/themes/framer.json +22 -0
  690. data/lib/demo_tape/themes/front_end_delight.json +22 -0
  691. data/lib/demo_tape/themes/fun_forrest.json +22 -0
  692. data/lib/demo_tape/themes/galaxy.json +22 -0
  693. data/lib/demo_tape/themes/galizur.json +22 -0
  694. data/lib/demo_tape/themes/ganyu.json +22 -0
  695. data/lib/demo_tape/themes/git_hub_dark.json +22 -0
  696. data/lib/demo_tape/themes/github.json +22 -0
  697. data/lib/demo_tape/themes/glacier.json +22 -0
  698. data/lib/demo_tape/themes/glorious.json +21 -0
  699. data/lib/demo_tape/themes/grape.json +22 -0
  700. data/lib/demo_tape/themes/grass.json +22 -0
  701. data/lib/demo_tape/themes/grey_green.json +22 -0
  702. data/lib/demo_tape/themes/gruvbox_dark.json +22 -0
  703. data/lib/demo_tape/themes/gruvbox_dark_hard.json +22 -0
  704. data/lib/demo_tape/themes/gruvbox_light.json +22 -0
  705. data/lib/demo_tape/themes/guezwhoz.json +22 -0
  706. data/lib/demo_tape/themes/h4rithd.json +22 -0
  707. data/lib/demo_tape/themes/h4rithd_com.json +22 -0
  708. data/lib/demo_tape/themes/ha_x0_r_blue.json +22 -0
  709. data/lib/demo_tape/themes/ha_x0_r_gr33_n.json +22 -0
  710. data/lib/demo_tape/themes/ha_x0_r_r3_d.json +22 -0
  711. data/lib/demo_tape/themes/hacktober.json +22 -0
  712. data/lib/demo_tape/themes/hardcore.json +22 -0
  713. data/lib/demo_tape/themes/harper.json +22 -0
  714. data/lib/demo_tape/themes/highway.json +22 -0
  715. data/lib/demo_tape/themes/hipster_green.json +22 -0
  716. data/lib/demo_tape/themes/hivacruz.json +22 -0
  717. data/lib/demo_tape/themes/homebrew.json +22 -0
  718. data/lib/demo_tape/themes/hopscotch.json +22 -0
  719. data/lib/demo_tape/themes/hopscotch_256.json +22 -0
  720. data/lib/demo_tape/themes/horizon.json +21 -0
  721. data/lib/demo_tape/themes/hurtado.json +22 -0
  722. data/lib/demo_tape/themes/hybrid.json +22 -0
  723. data/lib/demo_tape/themes/hyper.json +22 -0
  724. data/lib/demo_tape/themes/ic_green_ppl.json +22 -0
  725. data/lib/demo_tape/themes/ic_orange_ppl.json +22 -0
  726. data/lib/demo_tape/themes/iceberg_dark.json +22 -0
  727. data/lib/demo_tape/themes/iceberg_light.json +22 -0
  728. data/lib/demo_tape/themes/idea.json +22 -0
  729. data/lib/demo_tape/themes/idle_toes.json +22 -0
  730. data/lib/demo_tape/themes/ir_black.json +22 -0
  731. data/lib/demo_tape/themes/iterm2_dark_background.json +22 -0
  732. data/lib/demo_tape/themes/iterm2_default.json +22 -0
  733. data/lib/demo_tape/themes/iterm2_light_background.json +22 -0
  734. data/lib/demo_tape/themes/iterm2_pastel_dark_background.json +22 -0
  735. data/lib/demo_tape/themes/iterm2_smoooooth.json +22 -0
  736. data/lib/demo_tape/themes/iterm2_solarized_dark.json +22 -0
  737. data/lib/demo_tape/themes/iterm2_solarized_light.json +22 -0
  738. data/lib/demo_tape/themes/iterm2_tango_dark.json +22 -0
  739. data/lib/demo_tape/themes/iterm2_tango_light.json +22 -0
  740. data/lib/demo_tape/themes/jackie_brown.json +22 -0
  741. data/lib/demo_tape/themes/japanesque.json +22 -0
  742. data/lib/demo_tape/themes/jellybeans.json +22 -0
  743. data/lib/demo_tape/themes/jet_brains_darcula.json +22 -0
  744. data/lib/demo_tape/themes/jubi.json +22 -0
  745. data/lib/demo_tape/themes/juicy_colors.json +22 -0
  746. data/lib/demo_tape/themes/kanagawa.json +22 -0
  747. data/lib/demo_tape/themes/kanagawabones.json +22 -0
  748. data/lib/demo_tape/themes/kibble.json +22 -0
  749. data/lib/demo_tape/themes/kolorit.json +22 -0
  750. data/lib/demo_tape/themes/konsolas.json +22 -0
  751. data/lib/demo_tape/themes/lab_fox.json +22 -0
  752. data/lib/demo_tape/themes/laser.json +22 -0
  753. data/lib/demo_tape/themes/later_this_evening.json +22 -0
  754. data/lib/demo_tape/themes/lavandula.json +22 -0
  755. data/lib/demo_tape/themes/liquid_carbon.json +22 -0
  756. data/lib/demo_tape/themes/liquid_carbon_transparent.json +22 -0
  757. data/lib/demo_tape/themes/liquid_carbon_transparent_inverse.json +22 -0
  758. data/lib/demo_tape/themes/lovelace.json +22 -0
  759. data/lib/demo_tape/themes/man_page.json +22 -0
  760. data/lib/demo_tape/themes/mariana.json +22 -0
  761. data/lib/demo_tape/themes/material.json +22 -0
  762. data/lib/demo_tape/themes/material_dark.json +22 -0
  763. data/lib/demo_tape/themes/material_darker.json +22 -0
  764. data/lib/demo_tape/themes/material_design_colors.json +22 -0
  765. data/lib/demo_tape/themes/material_ocean.json +22 -0
  766. data/lib/demo_tape/themes/mathias.json +22 -0
  767. data/lib/demo_tape/themes/matrix.json +22 -0
  768. data/lib/demo_tape/themes/medallion.json +22 -0
  769. data/lib/demo_tape/themes/mellifluous.json +22 -0
  770. data/lib/demo_tape/themes/midnight_in_mojave.json +22 -0
  771. data/lib/demo_tape/themes/mirage.json +22 -0
  772. data/lib/demo_tape/themes/misterioso.json +22 -0
  773. data/lib/demo_tape/themes/molokai.json +22 -0
  774. data/lib/demo_tape/themes/mona_lisa.json +22 -0
  775. data/lib/demo_tape/themes/monokai_cmder.json +22 -0
  776. data/lib/demo_tape/themes/monokai_pro.json +22 -0
  777. data/lib/demo_tape/themes/monokai_pro_filter_octagon.json +21 -0
  778. data/lib/demo_tape/themes/monokai_pro_filter_ristretto.json +22 -0
  779. data/lib/demo_tape/themes/monokai_remastered.json +22 -0
  780. data/lib/demo_tape/themes/monokai_soda.json +22 -0
  781. data/lib/demo_tape/themes/monokai_vivid.json +22 -0
  782. data/lib/demo_tape/themes/moonlight_ii.json +21 -0
  783. data/lib/demo_tape/themes/n0tch2k.json +22 -0
  784. data/lib/demo_tape/themes/neobones_dark.json +22 -0
  785. data/lib/demo_tape/themes/neobones_light.json +22 -0
  786. data/lib/demo_tape/themes/neon.json +22 -0
  787. data/lib/demo_tape/themes/neopolitan.json +22 -0
  788. data/lib/demo_tape/themes/neutron.json +22 -0
  789. data/lib/demo_tape/themes/night_city.json +22 -0
  790. data/lib/demo_tape/themes/night_lion_v1.json +22 -0
  791. data/lib/demo_tape/themes/night_lion_v2.json +22 -0
  792. data/lib/demo_tape/themes/night_owlish_light.json +22 -0
  793. data/lib/demo_tape/themes/nightfox.json +22 -0
  794. data/lib/demo_tape/themes/niji.json +22 -0
  795. data/lib/demo_tape/themes/nocturnal_winter.json +22 -0
  796. data/lib/demo_tape/themes/nord.json +22 -0
  797. data/lib/demo_tape/themes/nord_light.json +22 -0
  798. data/lib/demo_tape/themes/novel.json +22 -0
  799. data/lib/demo_tape/themes/nvim_dark.json +22 -0
  800. data/lib/demo_tape/themes/nvim_light.json +22 -0
  801. data/lib/demo_tape/themes/obsidian.json +22 -0
  802. data/lib/demo_tape/themes/ocean.json +22 -0
  803. data/lib/demo_tape/themes/oceanic_material.json +22 -0
  804. data/lib/demo_tape/themes/oceanic_next.json +22 -0
  805. data/lib/demo_tape/themes/ollie.json +22 -0
  806. data/lib/demo_tape/themes/one_dark.json +21 -0
  807. data/lib/demo_tape/themes/one_half_dark.json +22 -0
  808. data/lib/demo_tape/themes/one_half_light.json +22 -0
  809. data/lib/demo_tape/themes/one_star.json +21 -0
  810. data/lib/demo_tape/themes/operator_mono_dark.json +22 -0
  811. data/lib/demo_tape/themes/overnight_slumber.json +22 -0
  812. data/lib/demo_tape/themes/pale_night_hc.json +22 -0
  813. data/lib/demo_tape/themes/pandora.json +22 -0
  814. data/lib/demo_tape/themes/paraiso_dark.json +22 -0
  815. data/lib/demo_tape/themes/paul_millr.json +22 -0
  816. data/lib/demo_tape/themes/pencil_dark.json +22 -0
  817. data/lib/demo_tape/themes/pencil_light.json +22 -0
  818. data/lib/demo_tape/themes/peppermint.json +22 -0
  819. data/lib/demo_tape/themes/piatto_light.json +22 -0
  820. data/lib/demo_tape/themes/pnevma.json +22 -0
  821. data/lib/demo_tape/themes/popping_and_locking.json +22 -0
  822. data/lib/demo_tape/themes/primary.json +22 -0
  823. data/lib/demo_tape/themes/primer.json +21 -0
  824. data/lib/demo_tape/themes/pro.json +22 -0
  825. data/lib/demo_tape/themes/pro_light.json +22 -0
  826. data/lib/demo_tape/themes/purple_rain.json +22 -0
  827. data/lib/demo_tape/themes/purplepeter.json +22 -0
  828. data/lib/demo_tape/themes/qb64_super_dark_blue.json +22 -0
  829. data/lib/demo_tape/themes/rapture.json +22 -0
  830. data/lib/demo_tape/themes/raycast_dark.json +22 -0
  831. data/lib/demo_tape/themes/raycast_light.json +22 -0
  832. data/lib/demo_tape/themes/rebecca.json +22 -0
  833. data/lib/demo_tape/themes/red_alert.json +22 -0
  834. data/lib/demo_tape/themes/red_planet.json +22 -0
  835. data/lib/demo_tape/themes/red_sands.json +22 -0
  836. data/lib/demo_tape/themes/relaxed.json +22 -0
  837. data/lib/demo_tape/themes/retro.json +22 -0
  838. data/lib/demo_tape/themes/retrowave.json +21 -0
  839. data/lib/demo_tape/themes/rippedcasts.json +22 -0
  840. data/lib/demo_tape/themes/rose_pine.json +22 -0
  841. data/lib/demo_tape/themes/rose_pine_dawn.json +22 -0
  842. data/lib/demo_tape/themes/rose_pine_moon.json +22 -0
  843. data/lib/demo_tape/themes/rouge_2.json +22 -0
  844. data/lib/demo_tape/themes/royal.json +22 -0
  845. data/lib/demo_tape/themes/ryuuko.json +22 -0
  846. data/lib/demo_tape/themes/sakura.json +22 -0
  847. data/lib/demo_tape/themes/scarlet_protocol.json +22 -0
  848. data/lib/demo_tape/themes/sea_shells.json +22 -0
  849. data/lib/demo_tape/themes/seafoam_pastel.json +22 -0
  850. data/lib/demo_tape/themes/seoulbones_dark.json +22 -0
  851. data/lib/demo_tape/themes/seoulbones_light.json +22 -0
  852. data/lib/demo_tape/themes/serendipity_midnight.json +22 -0
  853. data/lib/demo_tape/themes/serendipity_morning.json +22 -0
  854. data/lib/demo_tape/themes/serendipity_sunset.json +22 -0
  855. data/lib/demo_tape/themes/seti.json +22 -0
  856. data/lib/demo_tape/themes/shades_of_purple.json +22 -0
  857. data/lib/demo_tape/themes/shaman.json +22 -0
  858. data/lib/demo_tape/themes/slate.json +22 -0
  859. data/lib/demo_tape/themes/sleepy_hollow.json +22 -0
  860. data/lib/demo_tape/themes/smyck.json +22 -0
  861. data/lib/demo_tape/themes/snazzy.json +22 -0
  862. data/lib/demo_tape/themes/soft_server.json +22 -0
  863. data/lib/demo_tape/themes/solarized_darcula.json +22 -0
  864. data/lib/demo_tape/themes/solarized_dark_higher_contrast.json +22 -0
  865. data/lib/demo_tape/themes/solarized_dark_patched.json +22 -0
  866. data/lib/demo_tape/themes/sonoran_gothic.json +21 -0
  867. data/lib/demo_tape/themes/sonoran_sunrise.json +22 -0
  868. data/lib/demo_tape/themes/space_gray.json +22 -0
  869. data/lib/demo_tape/themes/space_gray_eighties.json +22 -0
  870. data/lib/demo_tape/themes/space_gray_eighties_dull.json +22 -0
  871. data/lib/demo_tape/themes/spacedust.json +22 -0
  872. data/lib/demo_tape/themes/spiderman.json +22 -0
  873. data/lib/demo_tape/themes/spring.json +22 -0
  874. data/lib/demo_tape/themes/square.json +22 -0
  875. data/lib/demo_tape/themes/sublette.json +22 -0
  876. data/lib/demo_tape/themes/subliminal.json +22 -0
  877. data/lib/demo_tape/themes/sundried.json +22 -0
  878. data/lib/demo_tape/themes/symfonic.json +22 -0
  879. data/lib/demo_tape/themes/synthwave.json +22 -0
  880. data/lib/demo_tape/themes/synthwave_alpha.json +22 -0
  881. data/lib/demo_tape/themes/synthwave_everything.json +22 -0
  882. data/lib/demo_tape/themes/tango_adapted.json +22 -0
  883. data/lib/demo_tape/themes/tango_half_adapted.json +22 -0
  884. data/lib/demo_tape/themes/teerb.json +22 -0
  885. data/lib/demo_tape/themes/terafox.json +22 -0
  886. data/lib/demo_tape/themes/terminal_basic.json +22 -0
  887. data/lib/demo_tape/themes/thayer_bright.json +22 -0
  888. data/lib/demo_tape/themes/the_hulk.json +22 -0
  889. data/lib/demo_tape/themes/tinacious_design_dark.json +22 -0
  890. data/lib/demo_tape/themes/tinacious_design_light.json +22 -0
  891. data/lib/demo_tape/themes/tokyo_night.json +21 -0
  892. data/lib/demo_tape/themes/tokyo_night_light.json +21 -0
  893. data/lib/demo_tape/themes/tokyo_night_storm.json +21 -0
  894. data/lib/demo_tape/themes/tokyonight.json +22 -0
  895. data/lib/demo_tape/themes/tokyonight_day.json +22 -0
  896. data/lib/demo_tape/themes/tokyonight_storm.json +22 -0
  897. data/lib/demo_tape/themes/tomorrow.json +22 -0
  898. data/lib/demo_tape/themes/tomorrow_night.json +22 -0
  899. data/lib/demo_tape/themes/tomorrow_night_blue.json +22 -0
  900. data/lib/demo_tape/themes/tomorrow_night_bright.json +22 -0
  901. data/lib/demo_tape/themes/tomorrow_night_burns.json +22 -0
  902. data/lib/demo_tape/themes/tomorrow_night_eighties.json +22 -0
  903. data/lib/demo_tape/themes/toy_chest.json +22 -0
  904. data/lib/demo_tape/themes/treehouse.json +22 -0
  905. data/lib/demo_tape/themes/twilight.json +22 -0
  906. data/lib/demo_tape/themes/ubuntu.json +22 -0
  907. data/lib/demo_tape/themes/ultra_dark.json +22 -0
  908. data/lib/demo_tape/themes/ultra_violent.json +22 -0
  909. data/lib/demo_tape/themes/under_the_sea.json +22 -0
  910. data/lib/demo_tape/themes/unholy.json +22 -0
  911. data/lib/demo_tape/themes/unikitty.json +22 -0
  912. data/lib/demo_tape/themes/urple.json +22 -0
  913. data/lib/demo_tape/themes/vaughn.json +22 -0
  914. data/lib/demo_tape/themes/vesper.json +22 -0
  915. data/lib/demo_tape/themes/vibrant_ink.json +22 -0
  916. data/lib/demo_tape/themes/vimbones.json +22 -0
  917. data/lib/demo_tape/themes/violet_dark.json +22 -0
  918. data/lib/demo_tape/themes/violet_light.json +22 -0
  919. data/lib/demo_tape/themes/warm_neon.json +22 -0
  920. data/lib/demo_tape/themes/wez.json +22 -0
  921. data/lib/demo_tape/themes/whimsy.json +22 -0
  922. data/lib/demo_tape/themes/wild_cherry.json +22 -0
  923. data/lib/demo_tape/themes/wilmersdorf.json +22 -0
  924. data/lib/demo_tape/themes/wombat.json +22 -0
  925. data/lib/demo_tape/themes/wryan.json +22 -0
  926. data/lib/demo_tape/themes/zenbones.json +22 -0
  927. data/lib/demo_tape/themes/zenbones_dark.json +22 -0
  928. data/lib/demo_tape/themes/zenbones_light.json +22 -0
  929. data/lib/demo_tape/themes/zenburn.json +22 -0
  930. data/lib/demo_tape/themes/zenburned.json +22 -0
  931. data/lib/demo_tape/themes/zenwritten_dark.json +22 -0
  932. data/lib/demo_tape/themes/zenwritten_light.json +22 -0
  933. data/lib/demo_tape/themes/zeonica.json +22 -0
  934. data/lib/demo_tape/token.rb +24 -0
  935. data/lib/demo_tape/ttyd.rb +74 -0
  936. data/lib/demo_tape/version.rb +5 -0
  937. data/lib/demo_tape.rb +30 -0
  938. data/lib/demotape.rb +3 -0
  939. metadata +1209 -0
@@ -0,0 +1,140 @@
1
+ {
2
+ "scope": "source.demotape",
3
+ "completions": [
4
+ // Commands with string arguments
5
+ { "trigger": "Type", "contents": "Type \"${1:text}\"" },
6
+ { "trigger": "Type@", "contents": "Type@${1:50ms} \"${2:text}\"" },
7
+ { "trigger": "TypeFile", "contents": "TypeFile \"${1:path/to/file}\"" },
8
+ { "trigger": "TypeFile@", "contents": "TypeFile@${1:50ms} \"${2:path/to/file}\"" },
9
+ { "trigger": "Copy", "contents": "Copy \"${1:text}\"" },
10
+ { "trigger": "Paste", "contents": "Paste \"${1:text}\"" },
11
+ { "trigger": "Send", "contents": "Send \"${1:text}\"" },
12
+ { "trigger": "Include", "contents": "Include \"${1:file.tape}\"" },
13
+ { "trigger": "Screenshot", "contents": "Screenshot \"${1:output.png}\"" },
14
+ { "trigger": "Require", "contents": "Require \"${1:file}\"" },
15
+
16
+ // Output command
17
+ { "trigger": "Output", "contents": "Output \"${1:output.gif}\"" },
18
+
19
+ // Wait commands
20
+ { "trigger": "Wait", "contents": "Wait ${1:1s}" },
21
+ { "trigger": "Sleep", "contents": "Sleep ${1:1s}" },
22
+ { "trigger": "WaitUntil", "contents": "WaitUntil /${1:pattern}/" },
23
+ { "trigger": "WaitUntil@", "contents": "WaitUntil@${1:5s} /${2:pattern}/" },
24
+
25
+ // Control commands
26
+ "Clear",
27
+ "Pause",
28
+ "Resume",
29
+
30
+ // Set commands
31
+ { "trigger": "Set shell", "contents": "Set shell \"${1:zsh}\"" },
32
+ { "trigger": "Set theme", "contents": "Set theme \"${1:dark_theme}\"" },
33
+ { "trigger": "Set width", "contents": "Set width ${1:1200}" },
34
+ { "trigger": "Set height", "contents": "Set height ${1:600}" },
35
+ { "trigger": "Set font_size", "contents": "Set font_size ${1:14}" },
36
+ {
37
+ "trigger": "Set font_family",
38
+ "contents": "Set font_family \"${1:Monaco}\"",
39
+ },
40
+ { "trigger": "Set line_height", "contents": "Set line_height ${1:1.2}" },
41
+ { "trigger": "Set cursor_blink", "contents": "Set cursor_blink ${1:true}" },
42
+ { "trigger": "Set cursor_width", "contents": "Set cursor_width ${1:2}" },
43
+ {
44
+ "trigger": "Set cursor_style",
45
+ "contents": "Set cursor_style \"${1:block}\"",
46
+ },
47
+ {
48
+ "trigger": "Set letter_spacing",
49
+ "contents": "Set letter_spacing ${1:0}",
50
+ },
51
+ { "trigger": "Set padding", "contents": "Set padding ${1:20}" },
52
+ { "trigger": "Set margin", "contents": "Set margin ${1:60}" },
53
+ { "trigger": "Set margin_fill", "contents": "Set margin_fill \"${1:#6b50ff}\"" },
54
+ { "trigger": "Set border_radius", "contents": "Set border_radius ${1:10}" },
55
+ { "trigger": "Set typing_speed", "contents": "Set typing_speed ${1:50ms}" },
56
+ { "trigger": "Set variable_typing", "contents": "Set variable_typing ${1:true}" },
57
+ { "trigger": "Set loop", "contents": "Set loop ${1:true}" },
58
+ { "trigger": "Set loop_delay", "contents": "Set loop_delay ${1:2s}" },
59
+
60
+ // Theme color overrides
61
+ { "trigger": "Set theme.background", "contents": "Set theme.background \"${1:#222222}\"" },
62
+ { "trigger": "Set theme.foreground", "contents": "Set theme.foreground \"${1:#ffffff}\"" },
63
+ { "trigger": "Set theme.cursor", "contents": "Set theme.cursor \"${1:#00ff00}\"" },
64
+ { "trigger": "Set theme.selection_background", "contents": "Set theme.selection_background \"${1:#444444}\"" },
65
+ { "trigger": "Set theme.black", "contents": "Set theme.black \"${1:#000000}\"" },
66
+ { "trigger": "Set theme.red", "contents": "Set theme.red \"${1:#ff0000}\"" },
67
+ { "trigger": "Set theme.green", "contents": "Set theme.green \"${1:#00ff00}\"" },
68
+ { "trigger": "Set theme.yellow", "contents": "Set theme.yellow \"${1:#ffff00}\"" },
69
+ { "trigger": "Set theme.blue", "contents": "Set theme.blue \"${1:#0000ff}\"" },
70
+ { "trigger": "Set theme.magenta", "contents": "Set theme.magenta \"${1:#ff00ff}\"" },
71
+ { "trigger": "Set theme.cyan", "contents": "Set theme.cyan \"${1:#00ffff}\"" },
72
+ { "trigger": "Set theme.white", "contents": "Set theme.white \"${1:#ffffff}\"" },
73
+ { "trigger": "Set theme.bright_black", "contents": "Set theme.bright_black \"${1:#555555}\"" },
74
+ { "trigger": "Set theme.bright_red", "contents": "Set theme.bright_red \"${1:#ff5555}\"" },
75
+ { "trigger": "Set theme.bright_green", "contents": "Set theme.bright_green \"${1:#55ff55}\"" },
76
+ { "trigger": "Set theme.bright_yellow", "contents": "Set theme.bright_yellow \"${1:#ffff55}\"" },
77
+ { "trigger": "Set theme.bright_blue", "contents": "Set theme.bright_blue \"${1:#5555ff}\"" },
78
+ { "trigger": "Set theme.bright_magenta", "contents": "Set theme.bright_magenta \"${1:#ff55ff}\"" },
79
+ { "trigger": "Set theme.bright_cyan", "contents": "Set theme.bright_cyan \"${1:#55ffff}\"" },
80
+ { "trigger": "Set theme.bright_white", "contents": "Set theme.bright_white \"${1:#ffffff}\"" },
81
+
82
+ // Special keys
83
+ "Enter",
84
+ "Return",
85
+ "Tab",
86
+ "Backspace",
87
+ "Delete",
88
+ "Escape",
89
+ "Space",
90
+
91
+ // Arrow keys
92
+ "Up",
93
+ "Down",
94
+ "Left",
95
+ "Right",
96
+
97
+ // Navigation keys
98
+ "Home",
99
+ "End",
100
+ "PageUp",
101
+ "PageDown",
102
+ "Insert",
103
+
104
+ // Function keys
105
+ "F1",
106
+ "F2",
107
+ "F3",
108
+ "F4",
109
+ "F5",
110
+ "F6",
111
+ "F7",
112
+ "F8",
113
+ "F9",
114
+ "F10",
115
+ "F11",
116
+ "F12",
117
+
118
+ // Modifiers
119
+ "Ctrl",
120
+ "Control",
121
+ "Alt",
122
+ "Option",
123
+ "Shift",
124
+ "Meta",
125
+ "Command",
126
+
127
+ // Key combinations
128
+ { "trigger": "Ctrl+", "contents": "Ctrl+${1:C}" },
129
+ { "trigger": "Alt+", "contents": "Alt+${1:Tab}" },
130
+ { "trigger": "Shift+", "contents": "Shift+${1:Enter}" },
131
+ { "trigger": "Command+", "contents": "Command+${1:C}" },
132
+ { "trigger": "Meta+", "contents": "Meta+${1:C}" },
133
+
134
+ // Duration formats
135
+ { "trigger": "ms", "contents": "${1:100}ms" },
136
+ { "trigger": "s", "contents": "${1:1}s" },
137
+ { "trigger": "m", "contents": "${1:1}m" },
138
+ { "trigger": "h", "contents": "${1:1}h" },
139
+ ],
140
+ }
@@ -0,0 +1,243 @@
1
+ %YAML 1.2
2
+ ---
3
+ name: DemoTape
4
+ file_extensions:
5
+ - tape
6
+ scope: source.demotape
7
+
8
+ variables:
9
+ line_comment: "#"
10
+
11
+ contexts:
12
+ main:
13
+ - include: comments
14
+ - include: commands
15
+
16
+ comments:
17
+ - match: "#.*$"
18
+ scope: comment.line.number-sign.demotape
19
+
20
+ commands:
21
+ # Commands with @ duration/speed
22
+ - match: '\b(Type|TypeFile|WaitUntil)\b'
23
+ scope: keyword.control.demotape
24
+ push: command_with_speed_or_timeout
25
+
26
+ # Set command with option value
27
+ - match: '\b(Set)\b'
28
+ scope: keyword.control.demotape
29
+ push: set_command
30
+
31
+ # Output command
32
+ - match: '\b(Output)\b'
33
+ scope: keyword.control.demotape
34
+ push: output_command
35
+
36
+ # Commands with string argument
37
+ - match: '\b(Copy|Paste|Send|Include|Screenshot|TypeFile)\b'
38
+ scope: keyword.control.demotape
39
+ push: string_argument
40
+
41
+ # Commands with duration argument
42
+ - match: '\b(Wait|Sleep)\b'
43
+ scope: keyword.control.demotape
44
+ push: duration_argument
45
+
46
+ # Commands with regex argument
47
+ - match: '\b(WaitUntil)\b(?!\s*@)'
48
+ scope: keyword.control.demotape
49
+ push: regex_argument
50
+
51
+ # Meta commands
52
+ - match: '\b(Require)\b'
53
+ scope: keyword.control.demotape
54
+ push: identifier_argument
55
+
56
+ # Control commands (no arguments)
57
+ - match: '\b(Pause|Resume|Clear)\b'
58
+ scope: keyword.control.demotape
59
+
60
+ # Key combinations and individual keys
61
+ - match: '\b(Enter|Return|Tab|Backspace|Delete|Escape|Esc|Space|Up|Down|Left|Right|Home|End|PageUp|PageDown|Insert|Cancel|Help|Pause|Semicolon|Colon|Equals|Slash|BackSlash|Numpad[0-9]|Multiply|Add|Separator|Subtract|Decimal|Divide|F[1-9]|F1[0-2])\b'
62
+ scope: keyword.control.demotape
63
+ push: possible_key_count
64
+
65
+ # Modifiers
66
+ - match: '\b(Ctrl|Control|Alt|Option|Shift|Meta|Command)\b'
67
+ scope: keyword.control.demotape
68
+ push: key_combo
69
+
70
+ # Letters and numbers as keys
71
+ - match: '\b[A-Za-z]\b(?=\s*\+|\s*$|\s*\d+\s*$)'
72
+ scope: keyword.control.demotape
73
+ push: possible_key_combo
74
+
75
+ key_combo:
76
+ - match: '\+'
77
+ scope: keyword.operator.demotape
78
+ - match: '\b(Ctrl|Control|Alt|Option|Shift|Meta|Command|Enter|Return|Tab|Backspace|Delete|Escape|Esc|Space|Up|Down|Left|Right|Home|End|PageUp|PageDown|Insert|Cancel|Help|Pause|Semicolon|Colon|Equals|Slash|BackSlash|Numpad[0-9]|Multiply|Add|Separator|Subtract|Decimal|Divide|F[1-9]|F1[0-2]|[A-Za-z0-9])\b'
79
+ scope: keyword.control.demotape
80
+ - match: '\d+'
81
+ scope: constant.numeric.integer.demotape
82
+ pop: true
83
+ - match: "$"
84
+ pop: true
85
+ - match: '(?=\S)'
86
+ pop: true
87
+
88
+ possible_key_combo:
89
+ - match: '\+'
90
+ scope: keyword.operator.demotape
91
+ set: key_combo
92
+ - match: '\d+'
93
+ scope: constant.numeric.integer.demotape
94
+ pop: true
95
+ - match: "$"
96
+ pop: true
97
+ - match: '(?=\S)'
98
+ pop: true
99
+
100
+ possible_key_count:
101
+ - match: "@"
102
+ scope: keyword.operator.demotape
103
+ push: duration_then_count
104
+ - match: '\d+'
105
+ scope: constant.numeric.integer.demotape
106
+ pop: true
107
+ - match: "$"
108
+ pop: true
109
+ - match: '(?=\S)'
110
+ pop: true
111
+
112
+ duration_then_count:
113
+ - include: duration
114
+ - include: numbers
115
+ - match: '\s+'
116
+ scope: text
117
+ - match: "$"
118
+ pop: true
119
+ - match: '(?=\S)'
120
+ pop: true
121
+
122
+ end_of_line:
123
+ - match: "$"
124
+ pop: true
125
+
126
+ command_with_speed_or_timeout:
127
+ - match: "@"
128
+ scope: keyword.operator.demotape
129
+ push: duration_value
130
+ - include: string_argument
131
+ - match: "$"
132
+ pop: true
133
+
134
+ set_command:
135
+ - match: '\b(border_radius|shell|theme|width|height|font_size|font_family|line_height|cursor_blink|cursor_width|cursor_style|letter_spacing|padding|margin|margin_fill|fps|typing_speed|loop|loop_delay|variable_typing)(\.[a-z_]+)?\b'
136
+ captures:
137
+ 1: variable.parameter.demotape
138
+ 2: variable.other.member.demotape
139
+ push: set_value
140
+ - match: "$"
141
+ pop: true
142
+
143
+ set_value:
144
+ - include: strings
145
+ - include: numbers
146
+ - include: duration
147
+ - match: ","
148
+ scope: punctuation.separator.demotape
149
+ - match: '\b(true|false)\b'
150
+ scope: constant.language.boolean.demotape
151
+ - match: '\b[a-zA-Z_]\w*\b'
152
+ scope: string.unquoted.demotape
153
+ - match: "$"
154
+ pop: true
155
+
156
+ output_command:
157
+ - include: strings
158
+ - match: "$"
159
+ pop: true
160
+
161
+ string_argument:
162
+ - include: strings
163
+ - match: '\S+'
164
+ scope: string.unquoted.demotape
165
+ - match: "$"
166
+ pop: true
167
+
168
+ identifier_argument:
169
+ - include: strings
170
+ - match: '\b[a-zA-Z_]\w*\b'
171
+ scope: entity.name.demotape
172
+ - match: "$"
173
+ pop: true
174
+
175
+ duration_argument:
176
+ - include: duration
177
+ - include: numbers
178
+ - match: "$"
179
+ pop: true
180
+
181
+ regex_argument:
182
+ - match: '/([^/\\]|\\.)*/'
183
+ scope: string.regexp.demotape
184
+ pop: true
185
+ - match: "$"
186
+ pop: true
187
+
188
+ duration_value:
189
+ - match: '(\d+(?:\.\d+)?)(ms|s|m|h)\b'
190
+ captures:
191
+ 1: constant.numeric.float.demotape
192
+ 2: keyword.other.unit.demotape
193
+ pop: true
194
+ - match: '\d+(?:\.\d+)?'
195
+ scope: constant.numeric.float.demotape
196
+ pop: true
197
+ - match: "$"
198
+ pop: true
199
+
200
+ duration:
201
+ - match: '(\d+(?:\.\d+)?)(ms|s|m|h)\b'
202
+ captures:
203
+ 1: constant.numeric.float.demotape
204
+ 2: keyword.other.unit.demotape
205
+
206
+ numbers:
207
+ - match: '\d*\.\d+'
208
+ scope: constant.numeric.float.demotape
209
+ - match: '\d+'
210
+ scope: constant.numeric.integer.demotape
211
+
212
+ strings:
213
+ - match: '"""'
214
+ scope: punctuation.definition.string.begin.demotape
215
+ push: triple_quoted_string
216
+ - match: '"'
217
+ scope: punctuation.definition.string.begin.demotape
218
+ push: double_quoted_string
219
+ - match: "'"
220
+ scope: punctuation.definition.string.begin.demotape
221
+ push: single_quoted_string
222
+
223
+ triple_quoted_string:
224
+ - meta_scope: string.quoted.triple.demotape
225
+ - match: '"""'
226
+ scope: punctuation.definition.string.end.demotape
227
+ pop: true
228
+
229
+ double_quoted_string:
230
+ - meta_scope: string.quoted.double.demotape
231
+ - match: '\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[ntr\\"])'
232
+ scope: constant.character.escape.demotape
233
+ - match: '"'
234
+ scope: punctuation.definition.string.end.demotape
235
+ pop: true
236
+
237
+ single_quoted_string:
238
+ - meta_scope: string.quoted.single.demotape
239
+ - match: "\\\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[ntr\\\\'])"
240
+ scope: constant.character.escape.demotape
241
+ - match: "'"
242
+ scope: punctuation.definition.string.end.demotape
243
+ pop: true
@@ -0,0 +1,91 @@
1
+ # DemoTape Vim Syntax
2
+
3
+ Syntax highlighting for DemoTape (`.tape`) files in Vim/Neovim.
4
+
5
+ ## Installation
6
+
7
+ ### Using a Plugin Manager
8
+
9
+ #### vim-plug
10
+
11
+ Add to your `.vimrc` or `init.vim`:
12
+
13
+ ```vim
14
+ Plug 'fnando/demotape', {'rtp': 'editors/vim'}
15
+ ```
16
+
17
+ #### Vundle
18
+
19
+ ```vim
20
+ Plugin 'fnando/demotape', {'rtp': 'editors/vim'}
21
+ ```
22
+
23
+ #### Pathogen
24
+
25
+ ```bash
26
+ cd ~/.vim/bundle
27
+ git clone https://github.com/fnando/demotape.git
28
+ ln -s ~/.vim/bundle/demotape/editors/vim ~/.vim/bundle/demotape-vim
29
+ ```
30
+
31
+ ### Manual Installation
32
+
33
+ Copy the files to your Vim directory:
34
+
35
+ ```bash
36
+ # For Vim
37
+ cp -r editors/vim/* ~/.vim/
38
+
39
+ # For Neovim
40
+ cp -r editors/vim/* ~/.config/nvim/
41
+ ```
42
+
43
+ ## Features
44
+
45
+ - Syntax highlighting for all DemoTape commands
46
+ - Support for key combinations and special keys
47
+ - String literals (single, double, and triple-quoted multiline)
48
+ - Duration values with time units
49
+ - Regular expressions
50
+ - Comments
51
+ - Set command options
52
+
53
+ ## Usage
54
+
55
+ Once installed, any file with a `.tape` extension will automatically use DemoTape syntax highlighting.
56
+
57
+ You can also manually set the filetype:
58
+
59
+ ```vim
60
+ :set filetype=demotape
61
+ ```
62
+
63
+ ## Configuration
64
+
65
+ You can customize the colors by overriding the highlight groups in your `.vimrc`:
66
+
67
+ ```vim
68
+ " Example: Make commands bold
69
+ hi demotapeCommand gui=bold cterm=bold
70
+
71
+ " Example: Custom color for strings
72
+ hi demotapeString guifg=#98c379 ctermfg=114
73
+ ```
74
+
75
+ Available highlight groups:
76
+
77
+ - `demotapeComment` - Comments
78
+ - `demotapeCommand` - Commands (Type, Sleep, etc.)
79
+ - `demotapeKey` - Special keys (Enter, Tab, etc.)
80
+ - `demotapeModifier` - Modifier keys (Ctrl, Alt, etc.)
81
+ - `demotapeOperator` - Operators (+ and @)
82
+ - `demotapeOption` - Set command options
83
+ - `demotapeString` - String literals
84
+ - `demotapeStringMulti` - Multiline strings
85
+ - `demotapeEscape` - Escape sequences
86
+ - `demotapeRegex` - Regular expressions
87
+ - `demotapeNumber` - Integer numbers
88
+ - `demotapeFloat` - Floating point numbers
89
+ - `demotapeDuration` - Duration values
90
+ - `demotapeBoolean` - Boolean values
91
+ - `demotapeSeparator` - Separators (commas)
@@ -0,0 +1,2 @@
1
+ " Detect DemoTape files
2
+ au BufRead,BufNewFile *.tape set filetype=demotape
@@ -0,0 +1,81 @@
1
+ " Vim syntax file
2
+ " Language: DemoTape
3
+ " Maintainer: Nando Vieira
4
+ " Latest Revision: 2024-11-12
5
+
6
+ if exists("b:current_syntax")
7
+ finish
8
+ endif
9
+
10
+ " Comments
11
+ syn match demotapeComment "#.*$"
12
+
13
+ " Commands
14
+ syn keyword demotapeCommand Type TypeFile WaitUntil Set Output Copy Paste Send Include Screenshot
15
+ syn keyword demotapeCommand Wait Sleep Require Pause Resume Clear nextgroup=demotapeString,demotapeDuration,demotapeNumber skipwhite
16
+
17
+ " Special keys
18
+ syn keyword demotapeKey Enter Return Tab Backspace Delete Escape Esc Space
19
+ syn keyword demotapeKey Up Down Left Right Home End PageUp PageDown Insert
20
+ syn keyword demotapeKey Cancel Help Pause Semicolon Colon Equals Slash BackSlash
21
+ syn keyword demotapeKey Multiply Add Separator Subtract Decimal Divide
22
+ syn match demotapeKey "\<Numpad[0-9]\>"
23
+ syn match demotapeKey "\<F\([1-9]\|1[0-2]\)\>"
24
+
25
+ " Modifiers
26
+ syn keyword demotapeModifier Ctrl Control Alt Option Shift Meta Command
27
+
28
+ " Key combination operator
29
+ syn match demotapeOperator "+"
30
+ syn match demotapeOperator "@"
31
+
32
+ " Set options
33
+ syn keyword demotapeOption border_radius shell theme width height font_size font_family
34
+ syn keyword demotapeOption line_height cursor_blink cursor_width cursor_style letter_spacing
35
+ syn keyword demotapeOption padding margin margin_fill fps typing_speed loop loop_delay variable_typing
36
+ syn match demotapeOption "\<\(border_radius\|shell\|theme\|width\|height\|font_size\|font_family\|line_height\|cursor_blink\|cursor_width\|cursor_style\|letter_spacing\|padding\|margin\|margin_fill\|fps\|typing_speed\|loop_delay\|loop\|variable_typing\)\.\w\+\>"
37
+
38
+ " Strings
39
+ syn region demotapeString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=demotapeEscape
40
+ syn region demotapeString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=demotapeEscape
41
+ syn region demotapeStringMulti start=+"""+ end=+"""+ contains=demotapeEscape
42
+
43
+ " String escapes
44
+ syn match demotapeEscape "\\[ntr\\'\"]" contained
45
+ syn match demotapeEscape "\\u[0-9a-fA-F]\{4\}" contained
46
+ syn match demotapeEscape "\\U[0-9a-fA-F]\{8\}" contained
47
+
48
+ " Regular expressions
49
+ syn region demotapeRegex start=+/+ skip=+\\\\\|\\\/+ end=+/+
50
+
51
+ " Numbers
52
+ syn match demotapeNumber "\<\d\+\>"
53
+ syn match demotapeFloat "\<\d\+\.\d\+\>"
54
+
55
+ " Duration with units
56
+ syn match demotapeDuration "\<\d\+\(\.\d\+\)\?\(ms\|s\|m\|h\)\>"
57
+
58
+ " Booleans
59
+ syn keyword demotapeBoolean true false
60
+
61
+ " Separators
62
+ syn match demotapeSeparator ","
63
+
64
+ " Highlight groups
65
+ hi def link demotapeComment Comment
66
+ hi def link demotapeCommand Keyword
67
+ hi def link demotapeKey Function
68
+ hi def link demotapeModifier Special
69
+ hi def link demotapeOperator Operator
70
+ hi def link demotapeOption Identifier
71
+ hi def link demotapeString String
72
+ hi def link demotapeStringMulti String
73
+ hi def link demotapeEscape SpecialChar
74
+ hi def link demotapeRegex String
75
+ hi def link demotapeNumber Number
76
+ hi def link demotapeFloat Float
77
+ hi def link demotapeDuration Number
78
+ hi def link demotapeBoolean Boolean
79
+ hi def link demotapeSeparator Delimiter
80
+
81
+ let b:current_syntax = "demotape"
@@ -0,0 +1,29 @@
1
+ # DemoTape VSCode Extension
2
+
3
+ Syntax highlighting for DemoTape (`.tape`) files in Visual Studio Code.
4
+
5
+ ## Installation
6
+
7
+ Copy this directory to your VSCode extensions folder:
8
+
9
+ - **Windows**: `%USERPROFILE%\.vscode\extensions\demotape`
10
+ - **macOS/Linux**: `~/.vscode/extensions/demotape`
11
+
12
+ Then reload VSCode.
13
+
14
+ ## Features
15
+
16
+ - Syntax highlighting for all DemoTape commands
17
+ - Support for key combinations and special keys
18
+ - String literals (single, double, and triple-quoted multiline)
19
+ - Duration values with time units
20
+ - Comments
21
+ - Set command options
22
+
23
+ ## Development
24
+
25
+ To test during development:
26
+
27
+ 1. Open this folder in VSCode
28
+ 2. Press `F5` to launch Extension Development Host
29
+ 3. Open any `.tape` file to see syntax highlighting