HypertextingScript/Implementations

From Esolang
Jump to navigation Jump to search
Back to HypertextingScript

Javascript

function htsToHtml(htsCode) {
    // Universal pattern to match all tag-like structures
    const universalTagPattern = /(\w+)\(\s*"([^"]+)"\s*\)|(\w+)\[([^\]]+)\]\(\)/g;

    // Replace function to handle dynamic tag generation
    const htmlOutput = htsCode.replace(universalTagPattern, (match, tag1, content1, tag2, attributes) => {
        if (tag1) {
            // Matches patterns like tag("content")
            return `<${tag1}>${content1}</${tag1}>`;
        } else if (tag2) {
            // Matches patterns like tag[attributes]()
            const [attributeName, attributeValue] = attributes.split('=');
            if (attributeName && attributeValue) {
                return `<${tag2} ${attributeName}="${attributeValue}">${attributeValue}</${tag2}>`; // very messy code ngl
            } else {
                console.warn(`Invalid attribute syntax: ${attributes}`);
                return match; // Leave unprocessed if the attribute syntax is incorrect
            }
        }
        return match; // Return the original match for any unexpected cases
    });

    return htmlOutput;
}
// easter egg: this im putting random comments on this bc i dont want python to be show as primary language on github :D

Python

import re

def hts_to_html(hts_code):
    """
    Compile HypertextingScript (HTS) code into HTML.
    
    Parameters:
    - hts_code (str): The HTS code to be compiled.
    
    Returns:
    - str: The compiled HTML code.
    """
    
    # Universal pattern to match all tag-like structures
    universal_tag_pattern = re.compile(r"(\w+)\(\s*\"([^\"]+)\"\s*\)|(\w+)\[([^\]]+)\]\(\)")
    
    # Replace function to handle dynamic tag generation
    def replace_match(match):
        tag1, content1, tag2, attributes = match.groups()
        
        if tag1:
            # Matches patterns like tag("content")
            return f"<{tag1}>{content1}</{tag1}>"
        elif tag2:
            # Matches patterns like tag[attributes]()
            attribute_parts = attributes.split('=')
            if len(attribute_parts) == 2:
                attribute_name, attribute_value = attribute_parts
                return f"<{tag2} {attribute_name}=\"{attribute_value}\">{attribute_value}</{tag2}>"
            else:
                print(f"Warning: Invalid attribute syntax: {attributes}")
                return match.group(0)  # Leave unprocessed if the attribute syntax is incorrect
        return match.group(0)  # Return the original match for any unexpected cases
    
    # Apply the replacement to the HTS code
    html_output = universal_tag_pattern.sub(replace_match, hts_code)
    
    return html_output