---
name: "hxincl"
section: "1"
platform: "linux"
package: "html-xml-utils"
version: "8.8-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/hxincl"
---

# hxincl(1)

expand included HTML or XML files

## NAME

hxincl - expand included HTML or XML files

## SYNOPSIS

**hxincl** \[ **-x** \] \[ **-f** \] \[ **-s** *name=subst* \] \[ **-s** *name=subst* \]... \[ **-b** *base* \] \[ *file-or-URL* \]

**hxincl** **-M** *target* \[ **-s** *name=subst* \] \[ **-s** *name=subst* \]... \[ **-b** *base* \] \[ **-G** \] \[ *file-or-URL* \]

## DESCRIPTION

Without **-M**, the **hxincl** command copies an HTML or XML file to standard output, looking for comments with a certain structure.  Such a comment is replaced by the file whose name is given as the attribute of the directive. For example:

```
...<!-- include "foo.html" -->...
```

will be replaced by the content of the file *foo.html*.

The comment is replaced by

```
<!-- begin-include "foo.html" -->
```

before the included text and

```
<!-- end-include "foo.html" -->
```

after it. These comments make it possible to run **hxincl** on the resulting file again to update the inclusions.

Single quotes are allowed instead of double quotes. And if the file name contains no spaces, the quotes may also be omitted.

With **-M**, the **hxincl** command outputs a line of dependencies that is suitable for inclusion in a Makefile. The *target* is the target of the Makefile rule and **hxincl** will list after the ':' all the files that are included, recursively. E.g., the result of

```
hxincl -M myfile.html inputfile
```

might be

```
myfile.html: foo.html bar.html
```

## OPTIONS

The following options are supported:

- **-x**

  Use XML conventions: empty elements are written with a slash at the end: \<IMG /\>.

- **-b** *base*

  Sets the base URL for resolving relative URLs. By default the file given as argument is the base URL.

- **-f**

  Removes the comments after including the files. This means **hxincl** cannot be run on the resulting file later to update the inclusions. (Mnemonic: **f**inal or **f**rozen.)

- **-s** *name=substitution*

  Include a different file than the one mentioned in the directive. If the comment is

  ```
  <!-- include "name" -->
  ```

  the file *substitution* is included instead. And if the file name in the comment includes a variable called *name* delimited by %, e.g.,

  ```
  <!-- include "xxx-%name%" -->
  ```

  then %*name*% is replaced by *substitution* and thus the file xxx-*substitution* is included. The option **-s** may occur multiple times. %-delimited variables are expanded recursively, i.e., if the substitution text contains a variable, that variable is expanded, too. E.g., if the two options **-s name=%p1%.rrr** and **-s p1=subst** are given, then the "xxx-%name%" will expand to "xxx-subst.rrr".

- **-M** *target*

  Instead of outputting the input file with all inclusions expanded, output just the list of all files that the input includes, recursively, in the form of a rule that is suitable for a Makefile. The *target* is printed as the target of that rule.

- **-G**

  Suppress error messages if a file to include cannot be found. (Only with **-M**.)

## OPERANDS

The following operand is supported:

- *file-or-URL*

  The name of an HTML or XML file or the URL of one. If absent, standard input is read instead.

## EXIT STATUS

The following exit values are returned:

- **0**

  Successful completion.

- **\> 0**

  An error occurred in the parsing of one of the HTML or XML files.

## ENVIRONMENT

To use a proxy to retrieve remote files, set the environment variables **http\_proxy** or **ftp\_proxy**. E.g., **http\_proxy="http://localhost:8080/"**

## BUGS

Assumes UTF-8 as input. Doesn't expand character entities. Instead pipe the input through [**hxunent**(1)](/hxunent/1.md) and [**asc2xml**(1)](/asc2xml/1.md) to convert it to UTF-8.

Remote files (specified with a URL) are currently only supported for HTTP. Password-protected files or files that depend on HTTP "cookies" are not handled. (You can use tools such as [**curl**(1)](/curl/1.md) or [**wget**(1)](/wget/1.md) to retrieve such files.)

## SEE ALSO

[**asc2xml**(1)](/asc2xml/1.md), [**hxnormalize**(1)](/hxnormalize/1.md), [**hxnum**(1)](/hxnum/1.md), [**hxprune**(1)](/hxprune/1.md), [**hxtoc**(1)](/hxtoc/1.md), [**hxunent**(1)](/hxunent/1.md), [**xml2asc**(1)](/xml2asc/1.md), **UTF-8** (RFC 2279)
