diff --git a/.gitignore b/.gitignore index e4c1622..7e6ef83 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,7 @@ .vscode -tests/* -!tests/.keep +samples/t_* build bin diff --git a/samples/bash.sh b/samples/bash.sh new file mode 100644 index 0000000..0d5cba4 --- /dev/null +++ b/samples/bash.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash + +# --------------------------------------------- +# Bash Syntax Highlighter Test Specification +# --------------------------------------------- + +VERSION="1.0.0" +declare -a ITEMS=("alpha" "beta" "gamma" "delta") +declare -A MAP=([one]=1 [two]=2 [three]=3) + +log() { + local level="$1" + shift + echo "[$level] $*" +} + +# Simulated colored output (no real colors, just placeholders) +colorize() { + local color="$1" + shift + echo "<$color>$*" +} + +# Example of error handling +handle_error() { + log ERROR "An error occurred on line $1" +} +trap 'handle_error $LINENO' ERR + +# Multiline string test +read -r -d '' MULTI <<'EOF' +This is a multi-line +string used to test +syntax highlighting for +here-documents. +EOF + +log INFO "Multi-line string loaded" + +# Arithmetic test +counter=0 +while ((counter < 5)); do + log DEBUG "Counter = $counter" + ((counter++)) +done + +# Subshelled loops and alternating quoting +for item in "${ITEMS[@]}"; do + ( + msg="Processing $item" + echo "$(colorize blue "$msg")" + ) +done + +# Case statement test +name="beta" +case "$name" in +alpha) + log INFO "Name is alpha" + ;; +beta) + log INFO "Name is beta" + ;; +*) + log WARN "Unknown name" + ;; +esac + +# Testing associative array +for key in "${!MAP[@]}"; do + value="${MAP[$key]}" + log INFO "MAP[$key] = $value" +done + +# Function recursion demo +factorial() { + local n="$1" + if ((n <= 1)); then + echo 1 + else + local prev + prev=$(factorial $((n - 1))) + echo $((n * prev)) + fi +} + +log INFO "factorial(5) = $(factorial 5)" + +# Test of parameter expansion variety +FOO="hello world" +BAR="${FOO/w/r}" +BAZ=${FOO^^} +QUX=${FOO,,} + +log DEBUG "BAR=$BAR" +log DEBUG "BAZ=$BAZ" +log DEBUG "QUX=$QUX" + +# Simulated config parsing +CONFIG=" +key1=value1 +key2=value two +key3=42 +" + +while IFS='=' read -r key val; do + [[ -z "$key" ]] && continue + log INFO "Config: $key = $val" +done <<<"$CONFIG" + +# Nested loops + array ops +numbers=(1 2 3 4 5) +letters=(a b c) + +for n in "${numbers[@]}"; do + for l in "${letters[@]}"; do + echo "Pair: $n:$l" + done +done + +# Here-string test +grep "world" <<<"$FOO" >/dev/null && log INFO "FOO contains world" + +# Process substitution test +diff <(echo foo) <(echo foo) >/dev/null && log INFO "diff matched" + +# Command substitution with pipeline +timestamp=$(date | sed 's/ /_/g') +log INFO "Timestamp: $timestamp" + +# Testing array slicing +slice=("${numbers[@]:1:3}") +log INFO "Slice: ${slice[*]}" + +# Simple I/O test (safe) +echo "Enter something (test for reading):" +read -r user_input +log INFO "You typed: $user_input" + +# End marker +log INFO "Script finished (version $VERSION)" diff --git a/samples/ruby.rb b/samples/ruby.rb new file mode 100644 index 0000000..4bee5a4 --- /dev/null +++ b/samples/ruby.rb @@ -0,0 +1,195 @@ +#!/usr/bin/env ruby +# Ruby syntax highlighting test + +=begin + This is a multi-line comment. + It spans multiple lines. + Good for testing highlighting. + +This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, This is a wrapped line test, + +=end + +# Constants +PI = 3.14159 +MAX_ITER = 5 + +# Module +module Utilities + def self.random_greeting + ["Hello", "Hi", "Hey", "Hola", "Bonjour", "Merhaba"].sample + end + + def self.factorial(n) + return 1 if n <= 1 + n * factorial(n - 1) + end +end + +# Class +class TestObject + attr_accessor :name, :value + + def initialize(name, value) + @name = name + @value = value + end + + def display + puts "#{@name}: #{@value}" + end + + def double_value + @value * 2 + end +end + +# Inheritance +class SpecialObject < TestObject + def triple_value + @value * 3 + end +end + +# Lambda +adder = ->(x, y) { x + y } + +# Array and hash +numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +hash = { a: 1, b: 2, c: 3 } + +# Iteration +numbers.each do |n| + puts "Number: #{n}" +end + +# Hash iteration +hash.each do |key, value| + puts "#{key} => #{value}" +end + +# Conditional +numbers.each do |n| + if n.even? + puts "#{n} is even" + else + puts "#{n} is odd" + end +end + +# Method definition +def greet_person(name) + puts "#{Utilities.random_greeting}, #{name}!" +end + +# Calling methods +greet_person("Alice") +greet_person("Bob") + +# Loops +i = 0 +while i < 5 + puts "Loop iteration #{i}" + i += 1 +end + +for j in 1..3 + puts "For loop #{j}" +end + +# Begin-rescue-ensure +begin + risky = 10 / 2 + puts "Risky operation succeeded: #{risky}" +rescue ZeroDivisionError => e + puts "Caught an error: #{e}" +ensure + puts "This runs no matter what" +end + +# Arrays of objects +objs = [] +5.times do |k| + objs << TestObject.new("Obj#{k}", k) +end + +objs.each(&:display) + +# Nested arrays +nested = [[1, 2], [3, 4], [5, 6]] +nested.each do |arr| + arr.each { |x| print "#{x} " } + puts +end + +# Case statement +numbers.each do |n| + case n + when 1..3 + puts "#{n} is small" + when 4..7 + puts "#{n} is medium" + else + puts "#{n} is large" + end +end + +# Using factorial +(0..5).each do |n| + puts "Factorial of #{n} is #{Utilities.factorial(n)}" +end + +# Special objects +so = SpecialObject.new("Special", 10) +puts "Double: #{so.double_value}, Triple: #{so.triple_value}" + +# String interpolation and formatting +puts "PI is approximately #{PI.round(2)}" + +# Multi-line strings +multi_line = <<~TEXT + This is a multi-line string. + It spans multiple lines. + Good for testing highlighting. +TEXT + +puts multi_line + +# Symbols and strings +sym = :my_symbol +str = "my string" +puts "Symbol: #{sym}, String: #{str}" + +# Random numbers +rand_nums = Array.new(5) { rand(100) } +puts "Random numbers: #{rand_nums.join(', ')}" + +# More loops +rand_nums.each_with_index do |num, idx| + puts "Index #{idx} has number #{num}" +end + +# Ternary operator +rand_nums.each do |num| + puts num.even? ? "#{num} is even" : "#{num} is odd" +end + +# Block with yield +def wrapper + puts "Before block" + yield if block_given? + puts "After block" +end + +wrapper { puts "Inside block" } + +# Sorting +sorted = rand_nums.sort +puts "Sorted: #{sorted.join(', ')}" + +# Regex +sample_text = "The quick brown fox jumps over the lazy dog" +puts "Match 'fox'?" if sample_text =~ /fox/ + +# End of test script +puts "Ruby syntax highlighting test complete." diff --git a/tests/.keep b/tests/.keep deleted file mode 100644 index e69de29..0000000