Skip to main content

htmlxify - A simplified web markup language compiler that transpiles to HTML, CSS, and JavaScript

Project description

HTMLXIFY - Web Markup Compiler

A complete, production-ready compiler for HTMLXIFY - a simplified web markup language that transpiles to clean HTML, CSS, and JavaScript with no configuration needed.

Write cleaner, faster markup. Build modern web pages in seconds.

๐ŸŒŸ What is HTMLXIFY?

HTMLXIFY is a lightweight markup language designed to make web development faster and cleaner. Instead of writing verbose HTML, you write simple, intuitive markup that compiles to production-ready HTML, CSS, and JavaScript.

Before (Regular HTML):

<!DOCTYPE html>
<html>
<head>
  <title>My Page</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div id="app" class="container">
    <h1 class="title">Welcome</h1>
    <p class="subtitle">This is a paragraph</p>
    <button class="primary" onclick="trackClick()">Click Me</button>
  </div>
  <script src="app.js"></script>
</body>
</html>

After (HTMLXIFY):

Write this in a file named page.HTMLXIFY:

html {
  head {
    meta(charset: "UTF-8")
    meta(name: "viewport", content: "width=device-width, initial-scale=1.0")
    title { My Page }
    link(rel: "stylesheet", href: "page.css")
  }
  body {
    div#app.container {
      h1.title { Welcome }
      p.subtitle { This is a paragraph }
      button.primary(โšก-call: "trackClick") { Click Me }
    }
    script(src: "page.js") { }
  }
}

Then compile:

HTMLXIFY page.HTMLXIFY output/

Result: Identical output to the "Before" HTML code!

  • All the boilerplate (doctype, html, head, meta tags) is generated automatically
  • Responsive CSS is auto-generated (7+ KB)
  • JavaScript handlers are auto-generated (10+ KB)

71% less code to write. Same semantic HTML output. Zero boilerplate.

โœจ Key Features

  • โœ… Simple Syntax - Intuitive markup language easy to learn
  • โœ… No Configuration - Works out of the box with sensible defaults
  • โœ… Auto-Generated CSS - Comprehensive stylesheet automatically created
  • โœ… API Integration - Built-in support for backend calls with โšก-call
  • โœ… Dynamic Data Binding - Connect UI to data with โšก-data
  • โœ… Responsive Design - Mobile-first CSS with breakpoints
  • โœ… XSS Protection - Automatic HTML escaping for security
  • โœ… Fast Compilation - Single-pass compiler, instant results
  • โœ… Production Ready - Generates clean, optimized code
  • โœ… Void Elements - Proper <br>, <img>, <input>, <meta>, etc. handling
  • โœ… Escape Sequences - Support for /{, /}, /(, /)
  • โœ… Escape Blocks - Raw content with escape{ } preserving braces, parentheses
  • โœ… Boolean Attributes - HTML5 booleans like disabled, checked, required
  • โœ… @ Alias - Use @-call and @-data as alternatives to โšก-call and โšก-data
  • โœ… Language Server - LSP support for all IDEs (VS Code, Neovim, Sublime, etc.)

๐Ÿ“‹ Implementation Status

Feature Status
Parser โœ… Complete (13/13 tests passing)
HTML Generator โœ… Complete (20+ KB output)
CSS Generator โœ… Complete (7.3 KB with defaults)
JavaScript Generator โœ… Complete (10.6 KB with API handlers)
CLI Tool โœ… Complete & tested
Standalone Executable โœ… Built for distribution (PyPI package)
Backend Integration โœ… Complete (API calls with โšก-call / @-call)
Semantic Validator โœ… Complete
Escape Blocks โœ… Complete (raw content with braces, parens)
Language Server (LSP) โœ… Complete (works with all IDEs)

๐Ÿš€ Quick Start

Installation

Option 1: Install from PyPI (Recommended)

pip install htmlxify

Then use the command:

HTMLXIFY myfile.HTMLXIFY output/
HTMLXIFY hello.HTMLXIFY output/ --verbose  # With verbose output
HTMLXIFY --version                   # Check version
HTMLXIFY --help                      # View help

Option 2: Install from Source (For Development)

# 1. Install dependencies
pip install -r requirements.txt

# 2. Install package in development mode
pip install -e .

# 3. Use the command
HTMLXIFY myfile.HTMLXIFY output/

Option 3: Run Python CLI Directly

# 1. Install dependencies
pip install -r requirements.txt

# 2. Run the CLI
python cli.py myfile.HTMLXIFY output/
python cli.py hello.HTMLXIFY output/ --verbose  # With verbose output

Your First HTMLXIFY File

Create a file named hello.HTMLXIFY:

div#app.container {
  h1 { Hello World }
  p { Welcome to HTMLXIFY }
}

Compile it:

# Using installed package (recommended)
HTMLXIFY hello.HTMLXIFY output/

# Or using Python directly
python cli.py hello.HTMLXIFY output/

This generates:

  • output/hello.html - Clean, semantic HTML (20+ KB)
  • output/hello.css - Responsive stylesheet (7.3 KB)
  • output/hello.js - JavaScript handlers (10.6 KB)
  • output/hello.html.map - Source map for debugging

Open output/hello.html in your browser and you're done! ๐ŸŽ‰

That's it! No configuration, no build tools. Just HTML, CSS, and JS.

๐Ÿ“– Language Syntax Guide

Basic Elements

// Single elements
div { Content }
p { Paragraph }
h1 { Heading }
button { Click Me }

// Void elements (no closing tag)
br
img(src: "photo.jpg", alt: "Photo")
input(type: "text")
meta(charset: "UTF-8")

Classes & IDs

// Single class
div.container { ... }

// Multiple classes
button.primary.large { ... }

// IDs
div#main { ... }

// Classes and IDs together
div.card#featured { ... }

Attributes

// String attributes
button(onclick: "handleClick") { Click }
a(href: "https://example.com", target: "_blank") { Link }

// Boolean attributes (no value)
input(type: "checkbox", checked)
input(type: "text", disabled)
button(disabled) { Can't Click }
form(novalidate) { ... }

Escape Sequences

When you need characters that conflict with syntax, use escape sequences:

// Escaped curly braces
p { JSON: /{ "key": "value" /} }

// Escaped parentheses  
code { function/(/)/() /{ return true; /} }

// Real-world example
p { Price: $99.99 (50% off) and formula: x^2 }

Escape Blocks

For larger blocks of raw content with special characters, use escape{ }:

// Code with braces and parentheses
pre {
  escape{
    function greet() {
      console.log("Hello!");
    }
  }
}

// Preserves everything: {}, (), whitespace, special chars
article {
  h3 { Code Example }
  pre { escape{
    {}
    ()
    โšก-call
    @-data
    #$%^&*()
    
    Blank lines preserved!
  } }
}

The escape{ } block:

  • Preserves all special characters literally
  • Maintains whitespace and blank lines
  • Handles nested braces correctly
  • Perfect for code snippets, formulas, JSON

Nesting

div.container {
  h1 { Title }
  p { First paragraph }
  p { Second paragraph }
  button { Action }
}

Text Content

// Simple text
p { This is a paragraph }

// Multiple lines of text (preserved)
p {
  This is a longer
  paragraph spanning
  multiple lines
}

// Mixed content (elements and text)
div {
  h1 { Title }
  This is text after heading
  p { Another element }
}

๐Ÿ”ฅ Advanced Features

Backend Integration

// Using โšก symbol
button(โšก-call: "selectPlan", data-plan: "starter") {
  Select Plan
}

// Using @ alias (same functionality)
button(@-call: "selectPlan", data-plan: "starter") {
  Select Plan
}

This generates:

  • HTML: <button data-api-call="selectPlan" data-plan="starter">
  • JS: Auto-triggers mock API handler with sample response

Available endpoints with mock data:

  • trackCTAClick - CTA click tracking
  • submitForm - Form submission handler
  • selectPlan - Plan selection
  • contactSales - Sales inquiry
  • getData - Generic data retrieval

Dynamic Data Binding

// Using โšก symbol
div(โšก-data: "userData") {
  p { User information }
}

// Using @ alias
div(@-data: "userData") {
  p { User information }
}

In JavaScript, update it dynamically:

updateBinding('userData', 'new value');

Semantic HTML

header.navbar {
  nav { Links }
}

main {
  article.post { Content }
}

footer { Copyright }

Common Patterns

Navigation Bar

nav.navbar {
  div.brand { Logo }
  div.menu {
    a(href: "/") { Home }
    a(href: "/about") { About }
    a(href: "/contact") { Contact }
  }
}

Hero Section

div.hero {
  h1.hero-title { Welcome }
  p.hero-subtitle { Get started today }
  button.cta(โšก-call: "trackCTAClick") { Learn More }
}

Feature Grid

div.feature-grid {
  div.feature-card {
    h3 { Feature 1 }
    p { Description }
  }
  div.feature-card {
    h3 { Feature 2 }
    p { Description }
  }
  div.feature-card {
    h3 { Feature 3 }
    p { Description }
  }
}

Pricing Cards

div.pricing-grid {
  div.pricing-card {
    h3 { Starter }
    p.price { $9/month }
    button(โšก-call: "selectPlan", data-plan: "starter") { Choose }
  }
  div.pricing-card.featured {
    h3 { Pro }
    p.price { $29/month }
    button(โšก-call: "selectPlan", data-plan: "pro") { Choose }
  }
}

Comparison Table

table.comparison {
  thead {
    tr {
      th { Feature }
      th { Starter }
      th { Pro }
    }
  }
  tbody {
    tr {
      td { Users }
      td { Up to 10 }
      td { Unlimited }
    }
  }
}

๐Ÿ’ป CLI Usage

Basic Compilation

# Using executable (recommended - no Python needed)
HTMLXIFY.exe input.HTMLXIFY output/
HTMLXIFY.exe input.HTMLXIFY output/ --verbose
HTMLXIFY.exe --version
HTMLXIFY.exe --help

# Or using Python (if you prefer)
python cli.py input.HTMLXIFY output/
python cli.py input.HTMLXIFY output/ --verbose
python cli.py --version
python cli.py --help

Note: Both commands do exactly the same thing. The .exe is faster and doesn't require Python installed.

Output Files

For input file mypage.HTMLXIFY, the compiler generates:

output/
โ”œโ”€โ”€ mypage.html         # Semantic HTML structure
โ”œโ”€โ”€ mypage.css          # Responsive stylesheet (7+ KB)
โ”œโ”€โ”€ mypage.js           # JavaScript handlers & utilities
โ””โ”€โ”€ mypage.html.map     # Source map for debugging

๐Ÿ“‚ Project Structure

HTMLXIFY/
โ”œโ”€โ”€ HTMLXIFY/                         # Main compiler package
โ”‚   โ”œโ”€โ”€ cli.py                     # Command-line interface
โ”‚   โ”œโ”€โ”€ parser/
โ”‚   โ”‚   โ”œโ”€โ”€ grammar.lark           # HTMLXIFY grammar
โ”‚   โ”‚   โ”œโ”€โ”€ ast_builder.py         # Parse tree to AST converter
โ”‚   โ”‚   โ””โ”€โ”€ indent_processor.py    # Indentation hierarchy
โ”‚   โ”œโ”€โ”€ generators/
โ”‚   โ”‚   โ”œโ”€โ”€ html_gen.py            # HTML output generator
โ”‚   โ”‚   โ”œโ”€โ”€ css_gen.py             # CSS output generator (650+ lines)
โ”‚   โ”‚   โ””โ”€โ”€ js_gen.py              # JavaScript output generator
โ”‚   โ”œโ”€โ”€ validator/
โ”‚   โ”‚   โ””โ”€โ”€ semantic.py            # Semantic validation
โ”‚   โ””โ”€โ”€ utils/
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ unit/test_parser.py        # 13 comprehensive tests
โ”œโ”€โ”€ example.HTMLXIFY                     # Full feature demonstration
โ”œโ”€โ”€ language_server/               # Future LSP support (planned)
โ”œโ”€โ”€ dist/
โ”‚   โ””โ”€โ”€ HTMLXIFY.exe                  # Standalone executable (Windows)
โ”œโ”€โ”€ build/
โ”‚   โ””โ”€โ”€ HTMLXIFY/                     # Build directory with dependencies
โ”œโ”€โ”€ example_backend.py             # Example Flask backend
โ”œโ”€โ”€ setup.py                       # Package configuration for PyPI
โ”œโ”€โ”€ requirements.txt               # Python dependencies
โ””โ”€โ”€ README.md                      # This file

๐Ÿงช Testing

The compiler includes comprehensive tests:

# Run all tests
pytest tests/unit/test_parser.py -v

# Run specific test
pytest tests/unit/test_parser.py::test_basic_element -v

# Run with coverage report
pytest tests/unit/ --cov=HTMLXIFY --cov-report=html

Test Coverage:

  • Basic elements (div, p, button, etc.)
  • Classes (single and multiple)
  • IDs
  • Attributes
  • Special attributes (โšก-call, โšก-data)
  • Nesting and hierarchy
  • Text content handling
  • Mixed content (text + elements)
  • Complex real-world structures

๐Ÿ“Š Output Examples

Generated HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Page</title>
  <link rel="stylesheet" href="page.css">
</head>
<body>
  <div id="app" class="container">
    <h1 class="title">Hello World</h1>
    <p>Welcome to HTMLXIFY</p>
  </div>
  <script src="page.js"></script>
</body>
</html>

Generated CSS (650+ lines of defaults)

/* Reset & Base Styles */
* { margin: 0; padding: 0; box-sizing: border-box; }
html { font-size: 16px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto; }

/* Typography */
h1 { font-size: 2.5rem; font-weight: 600; }
h2 { font-size: 2rem; font-weight: 600; }

/* Responsive Design */
@media (max-width: 768px) {
  .feature-grid { grid-template-columns: 1fr; }
  body { font-size: 14px; }
}

/* And much more... */

Generated JavaScript

// Smart API URL Detection (4-level priority)
const API_BASE_URL = window.API_BASE_URL 
  || (function() {
    const meta = document.querySelector('meta[name="api-url"]');
    if (meta) return meta.getAttribute('content');
    if (window.location.hostname !== 'localhost') {
      return '/api';  // Same domain backend
    }
    return 'http://localhost:5000/api';  // Local development
  })();

// API Handlers (auto-wired to buttons with โšก-call attribute)
const apiHandlers = {
  'trackCTAClick': async function(element) { ... },
  'selectPlan': async function(element) { ... },
  'submitForm': async function(element) { ... },
  // ... more handlers
};

// Data Bindings
const dataBindings = { ... };

// Animation Utilities
const animationUtils = { ... };

๐ŸŽฏ Real-World Examples

Complete Landing Page

nav.navbar {
  div.brand { MyCompany }
  div.nav-links {
    a(href: "/") { Home }
    a(href: "/features") { Features }
    a(href: "/pricing") { Pricing }
  }
}

div.hero {
  h1 { Build Faster With HTMLXIFY }
  p { Write 72% less code. Ship in days, not weeks. }
  button.cta(โšก-call: "trackCTAClick") { Get Started }
}

div.features {
  div.feature-grid {
    div.feature-card {
      h3 { Fast }
      p { Compiles in milliseconds }
    }
    div.feature-card {
      h3 { Simple }
      p { Intuitive syntax anyone can learn }
    }
    div.feature-card {
      h3 { Powerful }
      p { Generates production-ready code }
    }
  }
}

footer.footer {
  p { Copyright 2025 }
}

๐Ÿ”’ Security

The compiler includes built-in security features:

  • XSS Prevention: All user content is HTML-escaped automatically
  • Attribute Validation: Prevents malicious attribute values
  • Safe Defaults: Strict mode for all generated code
  • No Inline Scripts: All JavaScript is external and sandboxed

๐Ÿ› Troubleshooting

Issue: "File not found" error

# Make sure file has .HTMLXIFY extension
python cli.py myfile.HTMLXIFY output/

# Make sure output directory exists or will be created
python cli.py input.HTMLXIFY ./dist/

Issue: Classes or IDs not styling

Make sure you're using the correct syntax:

// Correct
div.my-class { ... }
div#my-id { ... }

// Wrong (won't work)
div .my-class { ... }
div #my-id { ... }

Issue: Verbose mode not showing errors

Run with --verbose flag:

python cli.py input.HTMLXIFY output/ --verbose

๐Ÿ“š Learning Resources

  1. Start Simple: Try the Quick Start above
  2. Language Syntax: Read the syntax guide section
  3. Advanced Features: Explore โšก-call and โšก-data attributes
  4. Real Examples: Check example.HTMLXIFY for a complete demo
  5. Test Suite: Review tests/unit/test_parser.py for patterns

๐Ÿš€ Distribution & Deployment

Share the Executable

  1. Give users HTMLXIFY.exe from the dist/ folder
  2. Users can compile ANY .HTMLXIFY file with one command:
    HTMLXIFY.exe mysite.HTMLXIFY output/
    
  3. No Python installation, no dependencies, no configuration needed

Deploy Generated Files

  1. Compile your .HTMLXIFY file to get HTML, CSS, JS
  2. Configure API URL (3 simple ways):
    <!-- Option 1: Meta tag -->
    <meta name="api-url" content="https://api.yourdomain.com">
    
    <!-- Option 2: Script variable -->
    <script>window.API_BASE_URL = 'https://api.yourdomain.com';</script>
    
    <!-- Option 3: Same domain (automatic) -->
    <!-- No configuration needed! Uses /api automatically -->
    
  3. Upload HTML, CSS, JS to any web server
  4. Done! Your site is live ๐Ÿš€

๐Ÿ–ฅ๏ธ IDE Support (Language Server)

HTMLXIFY includes a professional-grade Language Server Protocol (LSP) implementation that works with any IDE:

Features (18+ LSP capabilities)

Core Features:

  • โœ… Real-time error detection (parser diagnostics)
  • โœ… Code completion (100+ HTML tags, attributes, escape blocks, snippets)
  • โœ… Hover documentation (tags, @-call/@-data, escape blocks)
  • โœ… Document outline/symbols (tags, IDs, classes hierarchy)
  • โœ… Auto-formatting (smart indentation)

Navigation:

  • โœ… Go-to-definition (jump to ID/class definitions)
  • โœ… Find all references (locate all usages of ID/class)
  • โœ… Workspace symbol search (Ctrl+T to find symbols across files)

Editing:

  • โœ… Rename support (rename IDs/classes across document)
  • โœ… Code actions (quick fixes for void elements, missing braces)
  • โœ… Signature help (attribute hints while typing)
  • โœ… Document highlight (highlight matching symbols)

Code Intelligence:

  • โœ… Folding ranges (collapse/expand code blocks)
  • โœ… Selection range (smart expand/shrink selection)
  • โœ… Document links (clickable URLs in code)

VS Code Setup

// .vscode/settings.json
{
  "htmlxify.languageServer.command": "htmlxify-lsp"
}

Neovim Setup

-- init.lua
require('lspconfig').htmlxify.setup{
  cmd = { 'htmlxify-lsp' },
  filetypes = { 'htmlx', 'htmlxify' },
}

Other IDEs

The language server works with Sublime Text, Emacs, JetBrains IDEs, Helix, and any editor supporting LSP.

See language_server/README.md for detailed setup instructions.

Running the Server

# After pip install
htmlxify-lsp

# Or directly
python -m language_server

๐ŸŽฏ Next Steps

After installing and creating your first file:

  1. Create a portfolio page - Use feature cards and hero section
  2. Build a landing page - Try navbar, hero, features, pricing, footer
  3. Make it dynamic - Add โšก-call endpoints for buttons
  4. Deploy to internet - Upload files and configure API URL
  5. Share the compiler - Give others HTMLXIFY.exe to build their own sites

๐Ÿ’ก Tips & Tricks

Reusable Components

Create template files you can copy and modify:

// pricing-card.HTMLXIFY
div.pricing-card {
  h3 { Plan Name }
  p.price { $X/month }
  ul {
    li { Feature 1 }
    li { Feature 2 }
  }
  button(โšก-call: "selectPlan") { Choose }
}

Responsive Images

img(
  src: "image.jpg",
  alt: "Description",
  loading: "lazy"
)

Form Patterns

form {
  input(type: "email", placeholder: "Email", required: true)
  input(type: "password", placeholder: "Password", required: true)
  button(type: "submit") { Sign In }
}

๐Ÿ“„ License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for the full license text and details.

๐Ÿค Contributing

To contribute:

  1. Create a feature branch
  2. Write tests in tests/unit/
  3. Submit a pull request

๐Ÿ“ž Support

For questions or issues:

  1. Check the troubleshooting section above
  2. Review the example.HTMLXIFY example
  3. Check generated HTML/CSS/JS for clues

Happy markup writing! ๐ŸŽ‰

Made with โค๏ธ for faster web development


HTMLXIFY - Because simpler markup means faster development. ๐Ÿš€

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

htmlxify-1.0.2.tar.gz (57.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

htmlxify-1.0.2-py3-none-any.whl (54.0 kB view details)

Uploaded Python 3

File details

Details for the file htmlxify-1.0.2.tar.gz.

File metadata

  • Download URL: htmlxify-1.0.2.tar.gz
  • Upload date:
  • Size: 57.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for htmlxify-1.0.2.tar.gz
Algorithm Hash digest
SHA256 314e434c30dbd0f5ab80022d82e047ea534cc4a522ff1e7244e0daa1826ed066
MD5 35868264eb778ab879a128ca8be837a7
BLAKE2b-256 f8c63748b87150f0a07c05bcee3a4bb23df67c30a45103d5f01d52485e88ec44

See more details on using hashes here.

File details

Details for the file htmlxify-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: htmlxify-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 54.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for htmlxify-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 309682dab8c5ed35138d3333fbf0055771177a7f890ec4135a5b67e9ee45eee4
MD5 369bbf1c0e953f2d051c175e04bb8ae5
BLAKE2b-256 8ba87641936eb13f878cc14dc818f14590ac0b6cba2c54c4129efbbe4c5d501c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page