ch5ex7

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2022 License: GPL-3.0 Imports: 4 Imported by: 0

README

= Exercise 5.7
// Refs:
:url-base: https://github.com/fenegroni/TGPL-exercise-solutions
:workflow: workflows/Exercise 5.7
:action: actions/workflows/ch5ex7.yml
:url-workflow: {url-base}/{workflow}
:url-action: {url-base}/{action}
:badge-exercise: image:{url-workflow}/badge.svg?branch=main[link={url-action}]

{badge-exercise}

Develop `startElement` and `endElement` into a general HTML pretty-printer.
Print comment nodes, `text` nodes, and attributes of each element (`<a href='...'>`).
Use short forms like `<img/>` instead of `<img></img>` when an element has no children.
Write a test to ensure the output can be parsed successfully. (See Chapter 11.)

== Test

We test the implementation of `PrettyPrint`,
which reads from `input`, writes to `output`,
and performs the task in our exercise.

The implementation is a little flaky:

. it uses global variables to keep track of state.

. `startElement` prints the start tag of an HTML element
by relying on being called the first time an element is encountered,
before all child elements are visited.

. `endElement` prints the end tag of the element
by relying on being called after all child nodes are visited.

. indenting the output requires a global `depth`,
incremented by `startElement` and decremented by `endElement`.

=== The image element

The image element uses the tag `<img>` without an end tag and without the `/` character at the end.

We handle that case which corrects the exercise requirement.

=== Parsing the output

The `html.Parse` function does not seem to return an error
when the html is malformed.

We use the `outline` function from the book
to build an outline of the document
and ensure that the output is correctly parsed.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PrettyPrint

func PrettyPrint()

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL