PrismSpark Demo

Learn about WebSpark.PrismSpark - A powerful .NET syntax highlighting library.

Enhanced Code Syntax Highlighting & Validation

This demo showcases server-side syntax highlighting using WebSpark.PrismSpark with client-side validation capabilities.

JSON - JavaScript Object Notation
{
  "name": "PrismJS Validation Demo",
  "version": "1.0.0",
  "description": "A comprehensive validation example",
  "languages": ["json", "csharp", "javascript"],
  "features": {
    "syntaxHighlighting": true,
    "validation": true,
    "lineNumbers": false
  },
  "author": {
    "name": "Developer",
    "email": "[email protected]"
  },
  "dependencies": {
    "prismjs": "^1.29.0"
  },
  "config": {
    "port": 3000,
    "ssl": false,
    "timeout": 30000
  }
}
C# - .NET Programming Language
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace PrismValidation.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class ValidationController : ControllerBase
    {
        private readonly ILogger<ValidationController> _logger;

        public ValidationController(ILogger<ValidationController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public async Task<ActionResult<IEnumerable<ValidationResult>>> GetValidationResults()
        {
            try
            {
                var results = await ProcessValidationAsync();
                return Ok(results);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error occurred during validation");
                return StatusCode(500, "Internal server error");
            }
        }

        [HttpPost("validate")]
        public ActionResult<bool> ValidateCode([FromBody] CodeValidationRequest request)
        {
            if (string.IsNullOrWhiteSpace(request.Code))
            {
                return BadRequest("Code cannot be empty");
            }

            var isValid = PerformSyntaxValidation(request.Code, request.Language);
            return Ok(new { IsValid = isValid, Message = isValid ? "Valid syntax" : "Invalid syntax" });
        }

        private async Task<List<ValidationResult>> ProcessValidationAsync()
        {
            var tasks = new List<Task<ValidationResult>>();
            var languages = new[] { "json", "csharp", "javascript" };

            foreach (var lang in languages)
            {
                tasks.Add(ValidateLanguageAsync(lang));
            }

            var results = await Task.WhenAll(tasks);
            return results.ToList();
        }

        private async Task<ValidationResult> ValidateLanguageAsync(string language)
        {
            await Task.Delay(100); // Simulate async operation
            return new ValidationResult { Language = language, IsValid = true };
        }

        private bool PerformSyntaxValidation(string code, string language)
        {
            // Basic validation logic here
            return !string.IsNullOrEmpty(code) && code.Length > 10;
        }
    }

    public class CodeValidationRequest
    {
        public string Code { get; set; }
        public string Language { get; set; }
    }

    public class ValidationResult
    {
        public string Language { get; set; }
        public bool IsValid { get; set; }
        public string Message { get; set; }
        public DateTime Timestamp { get; set; } = DateTime.UtcNow;
    }
}
JavaScript - Dynamic Programming Language
// PrismJS Validation Utility Functions
class CodeValidator {
    constructor() {
        this.supportedLanguages = ['json', 'javascript', 'csharp'];
        this.validationHistory = [];
    }

    async validateCode(code, language) {
        if (!this.supportedLanguages.includes(language)) {
            throw new Error(`Unsupported language: ${language}`);
        }

        const startTime = performance.now();

        try {
            let result;

            switch (language) {
                case 'json':
                    result = this.validateJSON(code);
                    break;
                case 'javascript':
                    result = this.validateJavaScript(code);
                    break;
                case 'csharp':
                    result = this.validateCSharp(code);
                    break;
                default:
                    result = { isValid: false, errors: ['Unknown language'] };
            }

            const endTime = performance.now();
            const validationRecord = {
                language,
                isValid: result.isValid,
                executionTime: endTime - startTime,
                timestamp: new Date().toISOString(),
                errors: result.errors || []
            };

            this.validationHistory.push(validationRecord);
            return validationRecord;

        } catch (error) {
            console.error('Validation error:', error);
            return {
                language,
                isValid: false,
                errors: [error.message],
                executionTime: performance.now() - startTime,
                timestamp: new Date().toISOString()
            };
        }
    }

    validateJSON(jsonString) {
        try {
            const parsed = JSON.parse(jsonString);
            return {
                isValid: true,
                parsedObject: parsed,
                size: JSON.stringify(parsed).length
            };
        } catch (error) {
            return {
                isValid: false,
                errors: [error.message]
            };
        }
    }

    validateJavaScript(jsCode) {
        const errors = [];

        // Basic syntax checks
        if (jsCode.includes('eval(')) {
            errors.push('Warning: eval() usage detected');
        }

        // Check for balanced brackets
        const brackets = { '(': ')', '[': ']', '{': '}' };
        const stack = [];

        for (let char of jsCode) {
            if (brackets[char]) {
                stack.push(brackets[char]);
            } else if (Object.values(brackets).includes(char)) {
                if (stack.pop() !== char) {
                    errors.push('Unbalanced brackets detected');
                    break;
                }
            }
        }

        if (stack.length > 0) {
            errors.push('Unclosed brackets detected');
        }

        return {
            isValid: errors.length === 0,
            errors: errors,
            metrics: {
                lines: jsCode.split('\n').length,
                characters: jsCode.length,
                functions: (jsCode.match(/function\s+\w+/g) || []).length
            }
        };
    }

    validateCSharp(csharpCode) {
        const errors = [];
        const warnings = [];

        // Basic C# syntax validation
        if (!csharpCode.includes('using ') && csharpCode.includes('System')) {
            warnings.push('Consider adding using statements');
        }

        // Check for balanced braces
        const openBraces = (csharpCode.match(/{/g) || []).length;
        const closeBraces = (csharpCode.match(/}/g) || []).length;

        if (openBraces !== closeBraces) {
            errors.push(`Unbalanced braces: ${openBraces} open, ${closeBraces} close`);
        }

        return {
            isValid: errors.length === 0,
            errors: errors,
            warnings: warnings,
            metrics: {
                lines: csharpCode.split('\n').length,
                classes: (csharpCode.match(/class\s+\w+/g) || []).length,
                methods: (csharpCode.match(/public\s+\w+\s+\w+\s*\(/g) || []).length
            }
        };
    }

    getValidationStats() {
        const stats = {
            totalValidations: this.validationHistory.length,
            validCount: this.validationHistory.filter(v => v.isValid).length,
            averageExecutionTime: 0,
            languageBreakdown: {}
        };

        if (stats.totalValidations > 0) {
            stats.averageExecutionTime = this.validationHistory.reduce(
                (sum, v) => sum + v.executionTime, 0
            ) / stats.totalValidations;

            this.supportedLanguages.forEach(lang => {
                const langValidations = this.validationHistory.filter(v => v.language === lang);
                stats.languageBreakdown[lang] = {
                    total: langValidations.length,
                    valid: langValidations.filter(v => v.isValid).length
                };
            });
        }

        return stats;
    }

    exportValidationHistory() {
        return {
            exportDate: new Date().toISOString(),
            totalRecords: this.validationHistory.length,
            data: this.validationHistory
        };
    }
}

// Initialize validator
const validator = new CodeValidator();

// Export for global usage
window.codeValidator = validator;
0
Total Validations
0%
Success Rate
0ms
Avg Execution Time
3
Languages Supported

Want to try the Live Editor?

Test your own code with interactive syntax highlighting and validation.

Open Live Editor