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

๐Ÿ“‹ 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)
Semantic Validator โœ… Complete
VS Code Extension ๐Ÿ”„ Planned
Language Server ๐Ÿ”„ Planned

๐Ÿš€ Quick Start

Installation

Option 1: Install from TestPyPI (Recommended)

pip install -i https://test.pypi.org/simple/ 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 }

Classes & IDs

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

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

// IDs
div#main { ... }

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

Attributes

// Simple attributes
button(onclick: "handleClick") { Click }

// Multiple attributes
input(type: "email", placeholder: "Enter email", required: true)

// String values
a(href: "https://example.com", target: "_blank") { Link }

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

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

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 ๐Ÿš€

๐ŸŽฏ 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.0.tar.gz (39.1 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.0-py3-none-any.whl (35.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: htmlxify-1.0.0.tar.gz
  • Upload date:
  • Size: 39.1 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.0.tar.gz
Algorithm Hash digest
SHA256 3d3b768106dfde67a185ae050c83072673fc59fe5a5373e3665ddc7b5ecbd5e0
MD5 06a789deb27441f007abc0489ee1c214
BLAKE2b-256 97cf36526406d0f18c4040219f19380558b3db2568bcf131cd4a998fdfc0f2c5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: htmlxify-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 35.8 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c52572da88d3b3792b1ef1a4c924676ae35bc67d6fba364932671bb0b85530e2
MD5 3744c0a000b27e06b7452510b6905472
BLAKE2b-256 627f2610ab59160729d27c9ca246a3938f046984bed815a75bd4fd484fa3c5e2

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