webdump_tests

Testfiles for webdump
git clone git://git.codemadness.org/webdump_tests
Log | Files | Refs | README

commit 43b896040059a55c2447ab74b585ae498c71531f
parent 520ec6267307bee6560c413b5ec11363d56ed09a
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Thu, 17 Aug 2023 17:28:21 +0200

add more tests

Diffstat:
Arealworld/cm_json2tsv.html | 202+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Arealworld/lobsters.html | 1467+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atests/audio.html | 3+++
Atests/lists.html | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Atests/ol.html | 5+++++
Atests/ol_nested.html | 21+++++++++++++++++++++
Atests/table_head.html | 13+++++++++++++
Atests/table_optional.html | 8++++++++
Atests/ul.html | 5+++++
Atests/ul_a.html | 5+++++
Atests/ul_nested.html | 21+++++++++++++++++++++
Atests/ul_whitespace.html | 5+++++
Atests/video.html | 7+++++++
Atests/video_track.html | 7+++++++
14 files changed, 1819 insertions(+), 0 deletions(-)

diff --git a/realworld/cm_json2tsv.html b/realworld/cm_json2tsv.html @@ -0,0 +1,202 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta http-equiv="Content-Language" content="en" /> + <meta name="viewport" content="width=device-width" /> + <meta name="keywords" content="json2tsv, JSON, tsv, TAB-Separated Value Format" /> + <meta name="description" content="json2tsv: a JSON to TAB-Separated Value converter" /> + <meta name="author" content="Hiltjo" /> + <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" /> + <title>json2tsv: a JSON to TSV converter - Codemadness</title> + <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> + <link rel="stylesheet" href="print.css" type="text/css" media="print" /> + <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> + <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" /> + <link rel="icon" href="/favicon.png" type="image/png" /> +</head> +<body> + <nav id="menuwrap"> + <table id="menu" width="100%" border="0"> + <tr> + <td id="links" align="left"> + <a href="index.html">Blog</a> | + <a href="/git/" title="Git repository with some of my projects">Git</a> | + <a href="/releases/">Releases</a> | + <a href="gopher://codemadness.org">Gopherhole</a> + </td> + <td id="links-contact" align="right"> + <span class="hidden"> | </span> + <a href="/donate/">Donate</a> | + <a href="feeds.html">Feeds</a> | + <a href="pgp.asc">PGP</a> | + <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a> + </td> + </tr> + </table> + </nav> + <hr class="hidden" /> + <main id="mainwrap"> + <div id="main"> + <article> +<header> + <h1>json2tsv: a JSON to TSV converter</h1> + <p> + <strong>Last modification on </strong> <time>2021-09-25</time> + </p> +</header> + +<p>Convert JSON to TSV or separated output.</p> +<p>json2tsv reads JSON data from stdin. It outputs each JSON type to a TAB- +Separated Value format per line by default.</p> +<h2>TAB-Separated Value format</h2> +<p>The output format per line is:</p> +<pre><code>nodename&lt;TAB&gt;type&lt;TAB&gt;value&lt;LF&gt; +</code></pre> +<p>Control-characters such as a newline, TAB and backslash (\n, \t and \) are +escaped in the nodename and value fields. Other control-characters are +removed.</p> +<p>The type field is a single byte and can be:</p> +<ul> +<li>a for array</li> +<li>b for bool</li> +<li>n for number</li> +<li>o for object</li> +<li>s for string</li> +<li>? for null</li> +</ul> +<p>Filtering on the first field "nodename" is easy using awk for example.</p> +<h2>Features</h2> +<ul> +<li>Accepts all <strong>valid</strong> JSON.</li> +<li>Designed to work well with existing UNIX programs like awk and grep.</li> +<li>Straightforward and not much lines of code: about 475 lines of C.</li> +<li>Few dependencies: C compiler (C99), libc.</li> +<li>No need to learn a new (meta-)language for processing data.</li> +<li>The parser supports code point decoding and UTF-16 surrogates to UTF-8.</li> +<li>It does not output control-characters to the terminal for security reasons by +default (but it has a -r option if needed).</li> +<li>On OpenBSD it supports <a href="https://man.openbsd.org/pledge">pledge(2)</a> for syscall restriction: +pledge("stdio", NULL).</li> +<li>Supports setting a different field separator and record separator with the -F +and -R option.</li> +</ul> +<h2>Cons</h2> +<ul> +<li>For the tool there is additional overhead by processing and filtering data +from stdin after parsing.</li> +<li>The parser does not do complete validation on numbers.</li> +<li>The parser accepts some bad input such as invalid UTF-8 +(see <a href="https://tools.ietf.org/html/rfc8259#section-8.1">RFC8259 - 8.1. Character Encoding</a>). +json2tsv reads from stdin and does not do assumptions about a "closed +ecosystem" as described in the RFC.</li> +<li>The parser accepts some bad JSON input and "extensions" +(see <a href="https://tools.ietf.org/html/rfc8259#section-9">RFC8259 - 9. Parsers</a>).</li> +<li>Encoded NUL bytes (\u0000) in strings are ignored. +(see <a href="https://tools.ietf.org/html/rfc8259#section-9">RFC8259 - 9. Parsers</a>). +"An implementation may set limits on the length and character contents of +strings."</li> +<li>The parser is not the fastest possible JSON parser (but also not the +slowest). For example: for ease of use, at the cost of performance all +strings are decoded, even though they may be unused.</li> +</ul> +<h2>Why Yet Another JSON parser?</h2> +<p>I wanted a tool that makes parsing JSON easier and work well from the shell, +similar to <a href="https://stedolan.github.io/jq/">jq</a>.</p> +<p>sed and grep often work well enough for matching some value using some regex +pattern, but it is not good enough to parse JSON correctly or to extract all +information: just like parsing HTML/XML using some regex is not good (enough) +or a good idea :P.</p> +<p>I didn't want to learn a new specific <a href="https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions">meta-language</a> which jq has and wanted +something simpler.</p> +<p>While it is more efficient to embed this query language for data aggregation, +it is also less simple. In my opinion it is simpler to separate this and use +pattern-processing by awk or an other filtering/aggregating program.</p> +<p>For the parser, there are many JSON parsers out there, like the efficient +<a href="https://github.com/zserge/jsmn">jsmn parser</a>, however a few parser behaviours I want to have are:</p> +<ul> +<li>jsmn buffers data as tokens, which is very efficient, but also a bit +annoying as an API as it requires another layer of code to interpret the +tokens.</li> +<li>jsmn does not handle decoding strings by default. Which is very efficient +if you don't need parts of the data though.</li> +<li>jsmn does not keep context of nested structures by default, so may require +writing custom utility functions for nested data.</li> +</ul> +<p>This is why I went for a parser design that uses a single callback per "node" +type and keeps track of the current nested structure in a single array and +emits that.</p> +<h2>Clone</h2> +<pre><code>git clone git://git.codemadness.org/json2tsv +</code></pre> +<h2>Browse</h2> +<p>You can browse the source-code at:</p> +<ul> +<li><a href="https://git.codemadness.org/json2tsv/">https://git.codemadness.org/json2tsv/</a></li> +<li><a href="gopher://codemadness.org/1/git/json2tsv">gopher://codemadness.org/1/git/json2tsv</a></li> +</ul> +<h2>Download releases</h2> +<p>Releases are available at:</p> +<ul> +<li><a href="https://codemadness.org/releases/json2tsv/">https://codemadness.org/releases/json2tsv/</a></li> +<li><a href="gopher://codemadness.org/1/releases/json2tsv">gopher://codemadness.org/1/releases/json2tsv</a></li> +</ul> +<h2>Build and install</h2> +<pre><code>$ make +# make install +</code></pre> +<h2>Examples</h2> +<p>An usage example to parse posts of the JSON API of <a href="https://www.reddit.com/">reddit.com</a> and format them +to a plain-text list using awk:</p> +<pre><code>#!/bin/sh +curl -s -H 'User-Agent:' 'https://old.reddit.com/.json?raw_json=1&amp;limit=100' | \ +json2tsv | \ +awk -F '\t' ' +function show() { + if (length(o["title"]) == 0) + return; + print n ". " o["title"] " by " o["author"] " in r/" o["subreddit"]; + print o["url"]; + print ""; +} +$1 == ".data.children[].data" { + show(); + n++; + delete o; +} +$1 ~ /^\.data\.children\[\]\.data\.[a-zA-Z0-9_]*$/ { + o[substr($1, 23)] = $3; +} +END { + show(); +}' +</code></pre> +<h2>References</h2> +<ul> +<li>Sites: +<ul> +<li><a href="http://seriot.ch/parsing_json.php">seriot.ch - Parsing JSON is a Minefield</a></li> +<li><a href="https://github.com/nst/JSONTestSuite">A comprehensive test suite for RFC 8259 compliant JSON parsers</a></li> +<li><a href="https://json.org/">json.org</a></li> +</ul> +</li> +<li>Current standard: +<ul> +<li><a href="https://tools.ietf.org/html/rfc8259">RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format</a></li> +<li><a href="https://www.ecma-international.org/publications/standards/Ecma-404.htm">Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)</a></li> +</ul> +</li> +<li>Historic standards: +<ul> +<li><a href="https://tools.ietf.org/html/rfc7159">RFC7159 - The JavaScript Object Notation (JSON) Data Interchange Format (obsolete)</a></li> +<li><a href="https://tools.ietf.org/html/rfc7158">RFC7158 - The JavaScript Object Notation (JSON) Data Interchange Format (obsolete)</a></li> +<li><a href="https://tools.ietf.org/html/rfc4627">RFC4627 - The JavaScript Object Notation (JSON) Data Interchange Format (obsolete, original)</a></li> +</ul> +</li> +</ul> + + </article> + </div> + </main> +</body> +</html> diff --git a/realworld/lobsters.html b/realworld/lobsters.html @@ -0,0 +1,1467 @@ +<!doctype html> +<html + lang="en" + class='color-scheme-system' +> +<head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> + <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon.png" /> + <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon.png" /> + <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png" /> + <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="referrer" content="always" /> + <meta name="theme-color" content="#AC130D" /> + <link rel="shortcut icon" href="/favicon.ico" /> + <title>Lobsters</title> + <link rel="stylesheet" href="/assets/application-6199295a18f0aaca129e5f43a85732f0bb12b865954d74498dedd958fa14bb53.css" media="all" /> + <meta name="csrf-param" content="authenticity_token" /> +<meta name="csrf-token" content="Xxb5kz_Iwjq-SWV8biCFaUbEqB6OdZ0TaXWaGdNSG8m6yr7Ozj5aVH6CKa1SOqrKhsJYf5iX6zunrEdwX9JhFA" /> + <link rel="alternate" type="application/rss+xml" + title="RSS 2.0" href="/rss" /> + <link rel="alternate" type="application/rss+xml" + title="Comments - RSS 2.0" + href="/comments.rss" /> +</head> +<body data-username=''> + <header id="nav"> + <a id="logo" style="background-color: #520000;" href="/" title="Lobsters (Current traffic: 1%)"></a> + + <div class="navholder"> + <nav class="links"> + <a href="/active">Active</a> + <a href="/recent">Recent</a> + <a href="/comments">Comments</a> + + + <a href="/search">Search</a> + + + <a class="corner" href="/login">Login</a> + </nav> + </div> + + <nav class="corner"> + <a class="corner" href="/login">Login</a> + </nav> + </header> + + + <div id="inside"> + + + + +<ol class="stories list "> + <li id="story_bqcmxg" data-shortid="bqcmxg" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">65</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://bits.debian.org/2023/08/debian-turns-30.html" rel="ugc noreferrer">Debian Celebrates 30 years</a> + </span> + <span class="tags"> + <a class="tag tag_linux" title="Linux" href="/t/linux">linux</a> + </span> + <a class="domain" href="/domains/bits.debian.org">bits.debian.org</a> + + + + <div class="byline"> + <a href="/u/5d22b"><img srcset="/avatars/5d22b-16.png 1x, /avatars/5d22b-32.png 2x" class="avatar" alt="5d22b avatar" loading="lazy" decoding="async" src="/avatars/5d22b-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/5d22b" class="u-author h-card ">5d22b</a> + + <span title="2023-08-16 14:24:56 -0500">17 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_bqcmxg" class="archive_button" type="checkbox"> + <label for="archive_bqcmxg">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fbits.debian.org%2F2023%2F08%2Fdebian-turns-30.html">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fbits.debian.org%2F2023%2F08%2Fdebian-turns-30.html">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fbits.debian.org%2F2023%2F08%2Fdebian-turns-30.html">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/bqcmxg/debian_celebrates_30_years"> + 18 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/bqcmxg/debian_celebrates_30_years" class="mobile_comments " style="display: none;"> + <span>18</span> +</a> +</li> +<li id="story_esnei4" data-shortid="esnei4" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">13</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://rachit.pl/post/you-have-built-a-compiler/" rel="ugc noreferrer">Dear Sir, You have built a compiler (2022)</a> + </span> + <span class="tags"> + <a class="tag tag_compilers" title="Compiler design" href="/t/compilers">compilers</a> + <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a> + </span> + <a class="domain" href="/domains/rachit.pl">rachit.pl</a> + + + + <div class="byline"> + <a href="/u/notypes"><img srcset="/avatars/notypes-16.png 1x, /avatars/notypes-32.png 2x" class="avatar" alt="notypes avatar" loading="lazy" decoding="async" src="/avatars/notypes-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/notypes" class="u-author h-card new_user">notypes</a> + + <span title="2023-08-16 22:43:16 -0500">9 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_esnei4" class="archive_button" type="checkbox"> + <label for="archive_esnei4">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Frachit.pl%2Fpost%2Fyou-have-built-a-compiler%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Frachit.pl%2Fpost%2Fyou-have-built-a-compiler%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Frachit.pl%2Fpost%2Fyou-have-built-a-compiler%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/esnei4/dear_sir_you_have_built_compiler_2022"> + 4 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/esnei4/dear_sir_you_have_built_compiler_2022" class="mobile_comments " style="display: none;"> + <span>4</span> +</a> +</li> +<li id="story_nd5svs" data-shortid="nd5svs" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">14</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://gist.github.com/sharadhr/39b804236c1941e9c30d90af828ad41e" rel="ugc noreferrer">$HOME, Not So Sweet $HOME</a> + </span> + <span class="tags"> + <a class="tag tag_osdev" title="Operating system design and development when no specific OS tag exists" href="/t/osdev">osdev</a> + </span> + <a class="domain" href="/domains/gist.github.com">gist.github.com</a> + + + + <div class="byline"> + <a href="/u/christiano"><img srcset="/avatars/christiano-16.png 1x, /avatars/christiano-32.png 2x" class="avatar" alt="christiano avatar" loading="lazy" decoding="async" src="/avatars/christiano-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/christiano" class="u-author h-card ">christiano</a> + + <span title="2023-08-17 01:42:29 -0500">6 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_nd5svs" class="archive_button" type="checkbox"> + <label for="archive_nd5svs">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fgist.github.com%2Fsharadhr%2F39b804236c1941e9c30d90af828ad41e">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fgist.github.com%2Fsharadhr%2F39b804236c1941e9c30d90af828ad41e">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgist.github.com%2Fsharadhr%2F39b804236c1941e9c30d90af828ad41e">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/nd5svs/home_not_so_sweet_home"> + 6 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/nd5svs/home_not_so_sweet_home" class="mobile_comments " style="display: none;"> + <span>6</span> +</a> +</li> +<li id="story_cuxddq" data-shortid="cuxddq" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">5</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://github.com/ankitpokhrel/jira-cli" rel="ugc noreferrer">jira-cli: Feature-rich interactive Jira command line</a> + </span> + <span class="tags"> + <a class="tag tag_a11y" title="accessibility, assistive technology, standards" href="/t/a11y">a11y</a> + <a class="tag tag_practices" title="Development and team practices" href="/t/practices">practices</a> + </span> + <a class="domain" href="/domains/github.com">github.com</a> + + + + <div class="byline"> + <a href="/u/pekkavaa"><img srcset="/avatars/pekkavaa-16.png 1x, /avatars/pekkavaa-32.png 2x" class="avatar" alt="pekkavaa avatar" loading="lazy" decoding="async" src="/avatars/pekkavaa-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/pekkavaa" class="u-author h-card ">pekkavaa</a> + + <span title="2023-08-17 05:41:00 -0500">2 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_cuxddq" class="archive_button" type="checkbox"> + <label for="archive_cuxddq">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fgithub.com%2Fankitpokhrel%2Fjira-cli">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fgithub.com%2Fankitpokhrel%2Fjira-cli">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgithub.com%2Fankitpokhrel%2Fjira-cli">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/cuxddq/jira_cli_feature_rich_interactive_jira"> + 3 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/cuxddq/jira_cli_feature_rich_interactive_jira" class="mobile_comments " style="display: none;"> + <span>3</span> +</a> +</li> +<li id="story_zpgvkx" data-shortid="zpgvkx" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">21</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://blog.chromium.org/2023/08/towards-https-by-default.html" rel="ugc noreferrer">Towards HTTPS by default</a> + </span> + <span class="tags"> + <a class="tag tag_security" title="Netsec, appsec, and infosec" href="/t/security">security</a> + </span> + <a class="domain" href="/domains/blog.chromium.org">blog.chromium.org</a> + + + + <div class="byline"> + <a href="/u/insanitybit"><img srcset="/avatars/insanitybit-16.png 1x, /avatars/insanitybit-32.png 2x" class="avatar" alt="insanitybit avatar" loading="lazy" decoding="async" src="/avatars/insanitybit-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/insanitybit" class="u-author h-card ">insanitybit</a> + + <span title="2023-08-16 13:41:07 -0500">18 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_zpgvkx" class="archive_button" type="checkbox"> + <label for="archive_zpgvkx">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fblog.chromium.org%2F2023%2F08%2Ftowards-https-by-default.html">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fblog.chromium.org%2F2023%2F08%2Ftowards-https-by-default.html">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fblog.chromium.org%2F2023%2F08%2Ftowards-https-by-default.html">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/zpgvkx/towards_https_by_default"> + 22 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/zpgvkx/towards_https_by_default" class="mobile_comments " style="display: none;"> + <span>22</span> +</a> +</li> +<li id="story_cjxr3m" data-shortid="cjxr3m" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">15</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://prefix.dev/blog/launching_pixi" rel="ugc noreferrer">Let&#39;s stop dependency hell: launching pixi</a> + </span> + <span class="tags"> + <a class="tag tag_python" title="Python programming" href="/t/python">python</a> + <a class="tag tag_release" title="Software releases and announcements" href="/t/release">release</a> + </span> + <a class="domain" href="/domains/prefix.dev">prefix.dev</a> + + + + <div class="byline"> + <a href="/u/frkl"><img srcset="/avatars/frkl-16.png 1x, /avatars/frkl-32.png 2x" class="avatar" alt="frkl avatar" loading="lazy" decoding="async" src="/avatars/frkl-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/frkl" class="u-author h-card ">frkl</a> + + <span title="2023-08-16 11:52:37 -0500">20 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_cjxr3m" class="archive_button" type="checkbox"> + <label for="archive_cjxr3m">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fprefix.dev%2Fblog%2Flaunching_pixi">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fprefix.dev%2Fblog%2Flaunching_pixi">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fprefix.dev%2Fblog%2Flaunching_pixi">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/cjxr3m/let_s_stop_dependency_hell_launching_pixi"> + 13 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/cjxr3m/let_s_stop_dependency_hell_launching_pixi" class="mobile_comments " style="display: none;"> + <span>13</span> +</a> +</li> +<li id="story_gbfe6c" data-shortid="gbfe6c" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">18</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://github.com/antonmedv/expr/releases/tag/v1.14.0" rel="ugc noreferrer">Expr v1.14 release: Go expression language</a> + </span> + <span class="tags"> + <a class="tag tag_go" title="Golang programming" href="/t/go">go</a> + <a class="tag tag_release" title="Software releases and announcements" href="/t/release">release</a> + </span> + <a class="domain" href="/domains/github.com">github.com</a> + + + + <div class="byline"> + <a href="/u/antonmedv"><img srcset="/avatars/antonmedv-16.png 1x, /avatars/antonmedv-32.png 2x" class="avatar" alt="antonmedv avatar" loading="lazy" decoding="async" src="/avatars/antonmedv-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/antonmedv" class="u-author h-card user_is_author">antonmedv</a> + + <span title="2023-08-16 04:59:16 -0500">27 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_gbfe6c" class="archive_button" type="checkbox"> + <label for="archive_gbfe6c">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fgithub.com%2Fantonmedv%2Fexpr%2Freleases%2Ftag%2Fv1.14.0">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fgithub.com%2Fantonmedv%2Fexpr%2Freleases%2Ftag%2Fv1.14.0">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgithub.com%2Fantonmedv%2Fexpr%2Freleases%2Ftag%2Fv1.14.0">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/gbfe6c/expr_v1_14_release_go_expression_language"> + 12 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/gbfe6c/expr_v1_14_release_go_expression_language" class="mobile_comments " style="display: none;"> + <span>12</span> +</a> +</li> +<li id="story_oy3k81" data-shortid="oy3k81" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">13</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://telemachus.me/slogtest" rel="ugc noreferrer">slogtest</a> + </span> + <span class="tags"> + <a class="tag tag_go" title="Golang programming" href="/t/go">go</a> + <a class="tag tag_testing" title="Software testing" href="/t/testing">testing</a> + </span> + <a class="domain" href="/domains/telemachus.me">telemachus.me</a> + + + + <div class="byline"> + <a href="/u/telemachus"><img srcset="/avatars/telemachus-16.png 1x, /avatars/telemachus-32.png 2x" class="avatar" alt="telemachus avatar" loading="lazy" decoding="async" src="/avatars/telemachus-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/telemachus" class="u-author h-card user_is_author">telemachus</a> + + <span title="2023-08-16 06:20:20 -0500">25 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_oy3k81" class="archive_button" type="checkbox"> + <label for="archive_oy3k81">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Ftelemachus.me%2Fslogtest">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Ftelemachus.me%2Fslogtest">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Ftelemachus.me%2Fslogtest">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/oy3k81/slogtest"> + 8 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/oy3k81/slogtest" class="mobile_comments " style="display: none;"> + <span>8</span> +</a> +</li> +<li id="story_vkcnau" data-shortid="vkcnau" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">6</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://two-wrongs.com/optimise-the-expensive-first" rel="ugc noreferrer">Optimise the Expensive First</a> + </span> + <span class="tags"> + <a class="tag tag_performance" title="Performance and optimization" href="/t/performance">performance</a> + </span> + <a class="domain" href="/domains/two-wrongs.com">two-wrongs.com</a> + + + + <div class="byline"> + <a href="/u/chriskrycho"><img srcset="/avatars/chriskrycho-16.png 1x, /avatars/chriskrycho-32.png 2x" class="avatar" alt="chriskrycho avatar" loading="lazy" decoding="async" src="/avatars/chriskrycho-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/chriskrycho" class="u-author h-card ">chriskrycho</a> + + <span title="2023-08-16 19:19:19 -0500">12 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_vkcnau" class="archive_button" type="checkbox"> + <label for="archive_vkcnau">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Ftwo-wrongs.com%2Foptimise-the-expensive-first">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Ftwo-wrongs.com%2Foptimise-the-expensive-first">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Ftwo-wrongs.com%2Foptimise-the-expensive-first">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/vkcnau/optimise_expensive_first"> + 2 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/vkcnau/optimise_expensive_first" class="mobile_comments " style="display: none;"> + <span>2</span> +</a> +</li> +<li id="story_yrntto" data-shortid="yrntto" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">9</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.xorpd.net/pages/xchg_rax/snip_00.html" rel="ugc noreferrer">xchg rax,rax</a> + </span> + <span class="tags"> + <a class="tag tag_book tag_is_media" title="Link to a book (not an ad or review)" href="/t/book">book</a> + <a class="tag tag_assembly" title="Assembly programming" href="/t/assembly">assembly</a> + </span> + <a class="domain" href="/domains/xorpd.net">xorpd.net</a> + + + + <div class="byline"> + <a href="/u/gepardo"><img srcset="/avatars/gepardo-16.png 1x, /avatars/gepardo-32.png 2x" class="avatar" alt="gepardo avatar" loading="lazy" decoding="async" src="/avatars/gepardo-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/gepardo" class="u-author h-card ">gepardo</a> + + <span title="2023-08-16 15:05:51 -0500">17 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_yrntto" class="archive_button" type="checkbox"> + <label for="archive_yrntto">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.xorpd.net%2Fpages%2Fxchg_rax%2Fsnip_00.html">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.xorpd.net%2Fpages%2Fxchg_rax%2Fsnip_00.html">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.xorpd.net%2Fpages%2Fxchg_rax%2Fsnip_00.html">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/yrntto/xchg_rax_rax"> + 3 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/yrntto/xchg_rax_rax" class="mobile_comments " style="display: none;"> + <span>3</span> +</a> +</li> +<li id="story_wnv3ep" data-shortid="wnv3ep" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">2</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.dolthub.com/blog/2023-08-16-go-pitfalls/" rel="ugc noreferrer">Avoiding Pitfalls in Go</a> + </span> + <span class="tags"> + <a class="tag tag_go" title="Golang programming" href="/t/go">go</a> + </span> + <a class="domain" href="/domains/dolthub.com">dolthub.com</a> + + + + <div class="byline"> + <a href="/u/telemachus"><img srcset="/avatars/telemachus-16.png 1x, /avatars/telemachus-32.png 2x" class="avatar" alt="telemachus avatar" loading="lazy" decoding="async" src="/avatars/telemachus-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/telemachus" class="u-author h-card ">telemachus</a> + + <span title="2023-08-17 06:05:01 -0500">2 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_wnv3ep" class="archive_button" type="checkbox"> + <label for="archive_wnv3ep">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.dolthub.com%2Fblog%2F2023-08-16-go-pitfalls%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.dolthub.com%2Fblog%2F2023-08-16-go-pitfalls%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.dolthub.com%2Fblog%2F2023-08-16-go-pitfalls%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/wnv3ep/avoiding_pitfalls_go"> + no comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/wnv3ep/avoiding_pitfalls_go" class="mobile_comments zero" style="display: none;"> + <span>0</span> +</a> +</li> +<li id="story_n4v6a8" data-shortid="n4v6a8" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">43</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://jarvispowered.com/you-dont-hate-jira-you-hate-your-manager/" rel="ugc noreferrer">You don&#39;t hate JIRA, you hate your manager</a> + </span> + <span class="tags"> + <a class="tag tag_practices" title="Development and team practices" href="/t/practices">practices</a> + </span> + <a class="domain" href="/domains/jarvispowered.com">jarvispowered.com</a> + + + + <div class="byline"> + <a href="/u/djx"><img srcset="/avatars/djx-16.png 1x, /avatars/djx-32.png 2x" class="avatar" alt="djx avatar" loading="lazy" decoding="async" src="/avatars/djx-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/djx" class="u-author h-card user_is_author">djx</a> + + <span title="2023-08-15 15:46:17 -0500">40 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_n4v6a8" class="archive_button" type="checkbox"> + <label for="archive_n4v6a8">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fjarvispowered.com%2Fyou-dont-hate-jira-you-hate-your-manager%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fjarvispowered.com%2Fyou-dont-hate-jira-you-hate-your-manager%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fjarvispowered.com%2Fyou-dont-hate-jira-you-hate-your-manager%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/n4v6a8/you_don_t_hate_jira_you_hate_your_manager"> + 84 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/n4v6a8/you_don_t_hate_jira_you_hate_your_manager" class="mobile_comments " style="display: none;"> + <span>84</span> +</a> +</li> +<li id="story_sgw0sb" data-shortid="sgw0sb" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">1</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://cbloomrants.blogspot.com/2023/07/float-to-int-casts-for-data-compression.html" rel="ugc noreferrer">Float to int casts for data compression</a> + </span> + <span class="tags"> + <a class="tag tag_programming" title="Use when every tag or no specific tag applies" href="/t/programming">programming</a> + </span> + <a class="domain" href="/domains/cbloomrants.blogspot.com">cbloomrants.blogspot.com</a> + + + + <div class="byline"> + <a href="/u/mikejsavage"><img srcset="/avatars/mikejsavage-16.png 1x, /avatars/mikejsavage-32.png 2x" class="avatar" alt="mikejsavage avatar" loading="lazy" decoding="async" src="/avatars/mikejsavage-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/mikejsavage" class="u-author h-card ">mikejsavage</a> + + <span title="2023-08-17 06:01:50 -0500">2 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_sgw0sb" class="archive_button" type="checkbox"> + <label for="archive_sgw0sb">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fcbloomrants.blogspot.com%2F2023%2F07%2Ffloat-to-int-casts-for-data-compression.html">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fcbloomrants.blogspot.com%2F2023%2F07%2Ffloat-to-int-casts-for-data-compression.html">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fcbloomrants.blogspot.com%2F2023%2F07%2Ffloat-to-int-casts-for-data-compression.html">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/sgw0sb/float_int_casts_for_data_compression"> + 1 comment</a> + </span> + + </div> + </div> +</div> +<a href="/s/sgw0sb/float_int_casts_for_data_compression" class="mobile_comments " style="display: none;"> + <span>1</span> +</a> +</li> +<li id="story_5facyn" data-shortid="5facyn" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">4</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://dissociatedpress.net/2023/06/24/red-hat-and-the-clone-wars/" rel="ugc noreferrer">Red Hat and the Clone Wars</a> + </span> + <span class="tags"> + <a class="tag tag_historical" title="History and retrospectives (not for things that happen to be old)" href="/t/historical">historical</a> + <a class="tag tag_linux" title="Linux" href="/t/linux">linux</a> + </span> + <a class="domain" href="/domains/dissociatedpress.net">dissociatedpress.net</a> + + + + <div class="byline"> + <a href="/u/df"><img srcset="/avatars/df-16.png 1x, /avatars/df-32.png 2x" class="avatar" alt="df avatar" loading="lazy" decoding="async" src="/avatars/df-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/df" class="u-author h-card ">df</a> + + <span title="2023-08-16 21:22:32 -0500">10 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_5facyn" class="archive_button" type="checkbox"> + <label for="archive_5facyn">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fdissociatedpress.net%2F2023%2F06%2F24%2Fred-hat-and-the-clone-wars%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fdissociatedpress.net%2F2023%2F06%2F24%2Fred-hat-and-the-clone-wars%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fdissociatedpress.net%2F2023%2F06%2F24%2Fred-hat-and-the-clone-wars%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/5facyn/red_hat_clone_wars"> + 2 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/5facyn/red_hat_clone_wars" class="mobile_comments " style="display: none;"> + <span>2</span> +</a> +</li> +<li id="story_qgoksp" data-shortid="qgoksp" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">23</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://notes.eatonphil.com/2023-08-15-thinking-about-functional-programming.html" rel="ugc noreferrer">Thinking about functional programming</a> + </span> + <span class="tags"> + <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a> + </span> + <a class="domain" href="/domains/notes.eatonphil.com">notes.eatonphil.com</a> + + + + <div class="byline"> + <a href="/u/eatonphil"><img srcset="/avatars/eatonphil-16.png 1x, /avatars/eatonphil-32.png 2x" class="avatar" alt="eatonphil avatar" loading="lazy" decoding="async" src="/avatars/eatonphil-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/eatonphil" class="u-author h-card user_is_author">eatonphil</a> + + <span title="2023-08-15 20:20:57 -0500">35 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_qgoksp" class="archive_button" type="checkbox"> + <label for="archive_qgoksp">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fnotes.eatonphil.com%2F2023-08-15-thinking-about-functional-programming.html">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fnotes.eatonphil.com%2F2023-08-15-thinking-about-functional-programming.html">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fnotes.eatonphil.com%2F2023-08-15-thinking-about-functional-programming.html">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/qgoksp/thinking_about_functional_programming"> + 22 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/qgoksp/thinking_about_functional_programming" class="mobile_comments " style="display: none;"> + <span>22</span> +</a> +</li> +<li id="story_jovzxw" data-shortid="jovzxw" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">1</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://codeconfessions.substack.com/p/cpython-reference-counting-internals" rel="ugc noreferrer">How CPython Implements Reference Counting: Dissecting CPython Internals</a> + </span> + <span class="tags"> + <a class="tag tag_c" title="C programming" href="/t/c">c</a> + <a class="tag tag_compilers" title="Compiler design" href="/t/compilers">compilers</a> + <a class="tag tag_python" title="Python programming" href="/t/python">python</a> + </span> + <a class="domain" href="/domains/codeconfessions.substack.com">codeconfessions.substack.com</a> + + + + <div class="byline"> + <a href="/u/abhi9u"><img srcset="/avatars/abhi9u-16.png 1x, /avatars/abhi9u-32.png 2x" class="avatar" alt="abhi9u avatar" loading="lazy" decoding="async" src="/avatars/abhi9u-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/abhi9u" class="u-author h-card user_is_author">abhi9u</a> + + <span title="2023-08-17 00:52:33 -0500">7 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_jovzxw" class="archive_button" type="checkbox"> + <label for="archive_jovzxw">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fcodeconfessions.substack.com%2Fp%2Fcpython-reference-counting-internals">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fcodeconfessions.substack.com%2Fp%2Fcpython-reference-counting-internals">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fcodeconfessions.substack.com%2Fp%2Fcpython-reference-counting-internals">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/jovzxw/how_cpython_implements_reference"> + no comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/jovzxw/how_cpython_implements_reference" class="mobile_comments zero" style="display: none;"> + <span>0</span> +</a> +</li> +<li id="story_usishn" data-shortid="usishn" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">1</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://vksegfault.github.io/posts/gentle-intro-gpu-inner-workings/" rel="ugc noreferrer">Gentle introduction to GPUs inner workings</a> + </span> + <span class="tags"> + <a class="tag tag_graphics" title="Graphics programming" href="/t/graphics">graphics</a> + </span> + <a class="domain" href="/domains/vksegfault.github.io">vksegfault.github.io</a> + + + + <div class="byline"> + <a href="/u/mikejsavage"><img srcset="/avatars/mikejsavage-16.png 1x, /avatars/mikejsavage-32.png 2x" class="avatar" alt="mikejsavage avatar" loading="lazy" decoding="async" src="/avatars/mikejsavage-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/mikejsavage" class="u-author h-card ">mikejsavage</a> + + <span title="2023-08-17 06:00:38 -0500">2 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_usishn" class="archive_button" type="checkbox"> + <label for="archive_usishn">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fvksegfault.github.io%2Fposts%2Fgentle-intro-gpu-inner-workings%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fvksegfault.github.io%2Fposts%2Fgentle-intro-gpu-inner-workings%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fvksegfault.github.io%2Fposts%2Fgentle-intro-gpu-inner-workings%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/usishn/gentle_introduction_gpus_inner_workings"> + no comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/usishn/gentle_introduction_gpus_inner_workings" class="mobile_comments zero" style="display: none;"> + <span>0</span> +</a> +</li> +<li id="story_niscpx" data-shortid="niscpx" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">4</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.youtube.com/watch?v=lvvzolKHt2E" rel="ugc noreferrer">Unit (Visual Programming System)</a> + </span> + <span class="tags"> + <a class="tag tag_video tag_is_media" title="Link to a video" href="/t/video">video</a> + <a class="tag tag_design" title="Visual design" href="/t/design">design</a> + <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a> + </span> + <a class="domain" href="/domains/youtube.com">youtube.com</a> + + + + <div class="byline"> + <a href="/u/ivanreese"><img srcset="/avatars/ivanreese-16.png 1x, /avatars/ivanreese-32.png 2x" class="avatar" alt="ivanreese avatar" loading="lazy" decoding="async" src="/avatars/ivanreese-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/ivanreese" class="u-author h-card ">ivanreese</a> + + <span title="2023-08-16 21:12:11 -0500">10 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_niscpx" class="archive_button" type="checkbox"> + <label for="archive_niscpx">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlvvzolKHt2E">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlvvzolKHt2E">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlvvzolKHt2E">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/niscpx/unit_visual_programming_system"> + no comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/niscpx/unit_visual_programming_system" class="mobile_comments zero" style="display: none;"> + <span>0</span> +</a> +</li> +<li id="story_gh9yu9" data-shortid="gh9yu9" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">24</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.haiku-os.org/blog/waddlesplash/2023-08-15_haiku_activity_contract_report_july_2023/" rel="ugc noreferrer">Haiku Activity &amp; Contract Report, July 2023</a> + </span> + <span class="tags"> + <a class="tag tag_osdev" title="Operating system design and development when no specific OS tag exists" href="/t/osdev">osdev</a> + </span> + <a class="domain" href="/domains/haiku-os.org">haiku-os.org</a> + + + + <div class="byline"> + <a href="/u/calvin"><img srcset="/avatars/calvin-16.png 1x, /avatars/calvin-32.png 2x" class="avatar" alt="calvin avatar" loading="lazy" decoding="async" src="/avatars/calvin-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/calvin" class="u-author h-card ">calvin</a> + + <span title="2023-08-15 23:51:30 -0500">32 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_gh9yu9" class="archive_button" type="checkbox"> + <label for="archive_gh9yu9">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.haiku-os.org%2Fblog%2Fwaddlesplash%2F2023-08-15_haiku_activity_contract_report_july_2023%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.haiku-os.org%2Fblog%2Fwaddlesplash%2F2023-08-15_haiku_activity_contract_report_july_2023%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.haiku-os.org%2Fblog%2Fwaddlesplash%2F2023-08-15_haiku_activity_contract_report_july_2023%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/gh9yu9/haiku_activity_contract_report_july_2023"> + 10 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/gh9yu9/haiku_activity_contract_report_july_2023" class="mobile_comments " style="display: none;"> + <span>10</span> +</a> +</li> +<li id="story_r9o9md" data-shortid="r9o9md" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">1</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.youtube.com/watch?v=lUCegCa7A08" rel="ugc noreferrer">WebAssembly for the rest of us</a> + </span> + <span class="tags"> + <a class="tag tag_video tag_is_media" title="Link to a video" href="/t/video">video</a> + <a class="tag tag_wasm" title="webassembly" href="/t/wasm">wasm</a> + </span> + <a class="domain" href="/domains/youtube.com">youtube.com</a> + + + + <div class="byline"> + <a href="/u/dbremner"><img srcset="/avatars/dbremner-16.png 1x, /avatars/dbremner-32.png 2x" class="avatar" alt="dbremner avatar" loading="lazy" decoding="async" src="/avatars/dbremner-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/dbremner" class="u-author h-card ">dbremner</a> + + <span title="2023-08-17 05:46:28 -0500">2 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_r9o9md" class="archive_button" type="checkbox"> + <label for="archive_r9o9md">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlUCegCa7A08">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlUCegCa7A08">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlUCegCa7A08">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/r9o9md/webassembly_for_rest_us"> + no comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/r9o9md/webassembly_for_rest_us" class="mobile_comments zero" style="display: none;"> + <span>0</span> +</a> +</li> +<li id="story_kyvlzb" data-shortid="kyvlzb" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">5</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.systeminit.com/blog-open-source/" rel="ugc noreferrer">System Initiative Open Source</a> + </span> + <span class="tags"> + <a class="tag tag_devops" title="DevOps" href="/t/devops">devops</a> + <a class="tag tag_release" title="Software releases and announcements" href="/t/release">release</a> + </span> + <a class="domain" href="/domains/systeminit.com">systeminit.com</a> + + + + <div class="byline"> + <a href="/u/caius"><img srcset="/avatars/caius-16.png 1x, /avatars/caius-32.png 2x" class="avatar" alt="caius avatar" loading="lazy" decoding="async" src="/avatars/caius-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/caius" class="u-author h-card ">caius</a> + + <span title="2023-08-16 13:26:57 -0500">18 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_kyvlzb" class="archive_button" type="checkbox"> + <label for="archive_kyvlzb">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.systeminit.com%2Fblog-open-source%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.systeminit.com%2Fblog-open-source%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.systeminit.com%2Fblog-open-source%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/kyvlzb/system_initiative_open_source"> + 4 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/kyvlzb/system_initiative_open_source" class="mobile_comments " style="display: none;"> + <span>4</span> +</a> +</li> +<li id="story_id9jet" data-shortid="id9jet" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">39</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://rachit.pl/post/transpiler/" rel="ugc noreferrer">Transpiler, a meaningless word</a> + </span> + <span class="tags"> + <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a> + </span> + <a class="domain" href="/domains/rachit.pl">rachit.pl</a> + + + + <div class="byline"> + <a href="/u/azhenley"><img srcset="/avatars/azhenley-16.png 1x, /avatars/azhenley-32.png 2x" class="avatar" alt="azhenley avatar" loading="lazy" decoding="async" src="/avatars/azhenley-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/azhenley" class="u-author h-card ">azhenley</a> + + <span title="2023-08-15 11:34:33 -0500">44 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_id9jet" class="archive_button" type="checkbox"> + <label for="archive_id9jet">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Frachit.pl%2Fpost%2Ftranspiler%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Frachit.pl%2Fpost%2Ftranspiler%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Frachit.pl%2Fpost%2Ftranspiler%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/id9jet/transpiler_meaningless_word"> + 53 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/id9jet/transpiler_meaningless_word" class="mobile_comments " style="display: none;"> + <span>53</span> +</a> +</li> +<li id="story_h6vioy" data-shortid="h6vioy" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">28</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://blog.redplanetlabs.com/2023/08/15/how-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x/" rel="ugc noreferrer">How we reduced the cost of building Twitter at Twitter-scale by 100x</a> + </span> + <span class="tags"> + <a class="tag tag_distributed" title="Distributed systems" href="/t/distributed">distributed</a> + </span> + <a class="domain" href="/domains/blog.redplanetlabs.com">blog.redplanetlabs.com</a> + + + + <div class="byline"> + <a href="/u/manuel"><img srcset="/avatars/manuel-16.png 1x, /avatars/manuel-32.png 2x" class="avatar" alt="manuel avatar" loading="lazy" decoding="async" src="/avatars/manuel-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/manuel" class="u-author h-card ">manuel</a> + + <span title="2023-08-15 13:17:27 -0500">42 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_h6vioy" class="archive_button" type="checkbox"> + <label for="archive_h6vioy">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fblog.redplanetlabs.com%2F2023%2F08%2F15%2Fhow-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fblog.redplanetlabs.com%2F2023%2F08%2F15%2Fhow-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fblog.redplanetlabs.com%2F2023%2F08%2F15%2Fhow-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/h6vioy/how_we_reduced_cost_building_twitter_at"> + 29 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/h6vioy/how_we_reduced_cost_building_twitter_at" class="mobile_comments " style="display: none;"> + <span>29</span> +</a> +</li> +<li id="story_aade0u" data-shortid="aade0u" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">15</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://www.wdj-consulting.com/blog/logicpuzzle-z3/" rel="ugc noreferrer">Using z3 To Solve Logic Puzzles</a> + </span> + <span class="tags"> + <a class="tag tag_formalmethods" title="Formal methods" href="/t/formalmethods">formalmethods</a> + </span> + <a class="domain" href="/domains/wdj-consulting.com">wdj-consulting.com</a> + + + + <div class="byline"> + <a href="/u/Screwtape"><img srcset="/avatars/Screwtape-16.png 1x, /avatars/Screwtape-32.png 2x" class="avatar" alt="Screwtape avatar" loading="lazy" decoding="async" src="/avatars/Screwtape-16.png" width="16" height="16" /></a> + <span> via </span> + <a href="/u/Screwtape" class="u-author h-card ">Screwtape</a> + + <span title="2023-08-15 21:03:14 -0500">35 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_aade0u" class="archive_button" type="checkbox"> + <label for="archive_aade0u">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.wdj-consulting.com%2Fblog%2Flogicpuzzle-z3%2F">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fwww.wdj-consulting.com%2Fblog%2Flogicpuzzle-z3%2F">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.wdj-consulting.com%2Fblog%2Flogicpuzzle-z3%2F">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/aade0u/using_z3_solve_logic_puzzles"> + 5 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/aade0u/using_z3_solve_logic_puzzles" class="mobile_comments " style="display: none;"> + <span>5</span> +</a> +</li> +<li id="story_ohewtv" data-shortid="ohewtv" +class="story + + + + + + +"> +<div class="story_liner h-entry"> + <div class="voters"> + <a class="upvoter" href="/login"></a> + <div class="score">14</div> + </div> + <div class="details"> + <span role="heading" aria-level="1" class="link h-cite u-repost-of"> + <a class="u-url" href="https://github.com/mattrose/vimwiki-server" rel="ugc noreferrer">vimwiki-server: Sinatra server that creates a web server from a vimwiki directory</a> + </span> + <span class="tags"> + <a class="tag tag_ruby" title="Ruby programming" href="/t/ruby">ruby</a> + <a class="tag tag_vim" title="Vim editor" href="/t/vim">vim</a> + <a class="tag tag_web" title="Web development and news" href="/t/web">web</a> + </span> + <a class="domain" href="/domains/github.com">github.com</a> + + + + <div class="byline"> + <a href="/u/mattrose"><img srcset="/avatars/mattrose-16.png 1x, /avatars/mattrose-32.png 2x" class="avatar" alt="mattrose avatar" loading="lazy" decoding="async" src="/avatars/mattrose-16.png" width="16" height="16" /></a> + <span> authored by </span> + <a href="/u/mattrose" class="u-author h-card user_is_author">mattrose</a> + + <span title="2023-08-15 16:49:29 -0500">39 hours ago</span> + + <span> | </span> + <span class="dropdown_parent"> + <input id="archive_ohewtv" class="archive_button" type="checkbox"> + <label for="archive_ohewtv">archive</label> + <div class="archive-dropdown"> + <a href="https://web.archive.org/web/3/https%3A%2F%2Fgithub.com%2Fmattrose%2Fvimwiki-server">Archive.org</a> + <a href="https://archive.today/https%3A%2F%2Fgithub.com%2Fmattrose%2Fvimwiki-server">Archive.today</a> + <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgithub.com%2Fmattrose%2Fvimwiki-server">Ghostarchive</a> + </div> + </span> + <span class="comments_label"> + <span> | </span> + <a role="heading" aria-level="2" href="/s/ohewtv/vimwiki_server_sinatra_server_creates"> + 8 comments</a> + </span> + + </div> + </div> +</div> +<a href="/s/ohewtv/vimwiki_server_sinatra_server_creates" class="mobile_comments " style="display: none;"> + <span>8</span> +</a> +</li> + +</ol> + + + +<div class="morelink"> + + <a href="/page/2">Page 2 &gt;&gt;</a> +</div> + + </div> + + <footer> + <a href="/about">About</a> + <a href="/tags">Tags</a> + <a href="/filters">Filter</a> + <a href="/moderations">Moderation Log</a> + </footer> + <span id="iab-pcm-sdk"></span><span id="iab-autofill-sdk"></span> +</body> +</html> diff --git a/tests/audio.html b/tests/audio.html @@ -0,0 +1,3 @@ +<audio src="file1.mp3"></audio> +<audio src="file2.mp3" /> +<audio controls src="file3.mp3"></audio> diff --git a/tests/lists.html b/tests/lists.html @@ -0,0 +1,50 @@ +<h2>List 1: list with hyperlinks</h2> + +<ul> +<li>Sites: +<ul> +<li><a href="http://seriot.ch/parsing_json.php">seriot.ch - Parsing JSON is a Minefield</a></li> +<li><a href="https://github.com/nst/JSONTestSuite">A comprehensive test suite for RFC 8259 compliant JSON parsers</a></li> +<li><a href="https://json.org/">json.org</a></li> +</ul> +</li> +<li>Current standard: +<ul> +<li><a href="https://tools.ietf.org/html/rfc8259">RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format</a></li> +<li><a href="https://www.ecma-international.org/publications/standards/Ecma-404.htm">Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)</a></li> +</ul> +</ul> + +<h2>List 2: no hyperlink</h2> + +<ul> +<li>Sites: +<ul> +<li>seriot.ch - Parsing JSON is a Minefield</li> +<li>A comprehensive test suite for RFC 8259 compliant JSON parsers</li> +<li>json.org</li> +</ul> +</li> +<li>Current standard: +<ul> +<li>RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format</li> +<li>Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)</li> +</ul> +</ul> + +<h2>List 3: autoclose / void tag</h2> + +<ul> +<li>Sites: +<ul> +<li>seriot.ch - Parsing JSON is a Minefield +<li>A comprehensive test suite for RFC 8259 compliant JSON parsers +<li>json.org +</ul> +</li> +<li>Current standard: +<ul> +<li>RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format +<li>Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017) +</ul> +</ul> diff --git a/tests/ol.html b/tests/ol.html @@ -0,0 +1,5 @@ +<ol> +<li>one</li> +<li>two</li> +<li>three</li> +</ol> diff --git a/tests/ol_nested.html b/tests/ol_nested.html @@ -0,0 +1,21 @@ +<ol> +<li>one</li> +<li>two + <ol> + <li>two. one + <ol> + <li>two. one. one</li> + <li>two. one. two</li> + </ol> + </li> + <li>two. two</li> + </ol> +</li> +<li>three + <ol> + <li>three. one</li> + <li>three. two</li> + </ol> +</li> +<li>four</li> +</ol> diff --git a/tests/table_head.html b/tests/table_head.html @@ -0,0 +1,13 @@ +<table> +<thead> +<tr><th>ha</th><th>hb</th><th>hc</th></tr> +</thead> +<tbody> +<tr><td>b1</td><td>b2</td><td>b3</td></tr> +<tr><td>b1</td><td>b2</td><td>b3</td></tr> +<tr><td>b1</td><td>b2</td><td>b3</td></tr> +</tbody> +<tfoot> +<tr><td>f1</td><td>f2</td><td>f3</td></tr> +</tfoot> +</table> diff --git a/tests/table_optional.html b/tests/table_optional.html @@ -0,0 +1,8 @@ +<!-- optional closing of row --> + +<table> +<tr><th>a</th><th>b</th><th>c</th> +<tr><td>1</td><td>2</td><td>3</td> +<tr><td>1</td><td>2</td><td>3</td> +<tr><td>1</td><td>2</td><td>3</td> +</table> diff --git a/tests/ul.html b/tests/ul.html @@ -0,0 +1,5 @@ +<ul> +<li>one</li> +<li>two</li> +<li>three</li> +</ul> diff --git a/tests/ul_a.html b/tests/ul_a.html @@ -0,0 +1,5 @@ +<ul> + <li><a href="#one">one</a></li> + <li><a href="#two">two</a></li> + <li><a href="#three">three</a></li> +</ul> diff --git a/tests/ul_nested.html b/tests/ul_nested.html @@ -0,0 +1,21 @@ +<ul> +<li>one</li> +<li>two + <ul> + <li>two. one + <ul> + <li>two. one. one</li> + <li>two. one. two</li> + </ul> + </li> + <li>two. two</li> + </ul> +</li> +<li>three + <ul> + <li>three. one</li> + <li>three. two</li> + </ul> +</li> +<li>four</li> +</ul> diff --git a/tests/ul_whitespace.html b/tests/ul_whitespace.html @@ -0,0 +1,5 @@ +<ul> + <li>one</li> + <li>two</li> + <li>three</li> +</ul> diff --git a/tests/video.html b/tests/video.html @@ -0,0 +1,7 @@ +<video> +<source src="video1.mp4" type="video/mp4"/> +</video> + +<video controls width="360" preload="none"> +<source src="video2.mp4" type="video/mp4"/> +</video> diff --git a/tests/video_track.html b/tests/video_track.html @@ -0,0 +1,7 @@ +<video controls src="/media/cc0-videos/friday.mp4"> + <track default kind="captions" srclang="en" src="/media/examples/friday.vtt" /> + Download the + <a href="/media/cc0-videos/friday.mp4">MP4</a> + video, and + <a href="/media/examples/friday.vtt">subtitles</a>. +</video>