Automatic Site Publish by Buildbot
diff --git a/output/docs/HowToContribute.html b/output/docs/HowToContribute.html
index 3f7b71a..71fcd5d 100644
--- a/output/docs/HowToContribute.html
+++ b/output/docs/HowToContribute.html
@@ -99,12 +99,12 @@
     <ul>
       <li>Remember to provide <em>tests</em> for all submitted changes!</li>
       <li>Use test-driven development (TDD): add a test that will isolate the bug <em>before</em> applying the change that fixes it.</li>
-      <li>Verify that you follow <a href="/docs/coding_standards">Thrift Coding Standards</a> (you can run &#8216;make style&#8217;, which ensures proper format for some languages).</li>
+      <li>Verify that you follow <a href="/docs/coding_standards">Thrift Coding Standards</a> (you can run ‘make style’, which ensures proper format for some languages).</li>
       <li>[<em>optional</em>] Verify that your change works on other platforms by adding a GitHub service hook to <a href="http://docs.travis-ci.com/user/getting-started/#Step-one%3A-Sign-in">Travis CI</a> and <a href="http://www.appveyor.com/docs">AppVeyor</a>.  You can use this technique to run the Thrift CI jobs in your account to check your changes before they are made public.  Every GitHub pull request into Thrift will run the full CI build and test suite on your changes.</li>
     </ul>
   </li>
   <li>Squash your changes to a single commit.  This maintains clean change history.</li>
-  <li>Commit and push changes to your branch (please use issue name and description as commit title, e.g. &#8220;THRIFT-9999: make it perfect&#8221;), with the affected languages on the next line of the description.</li>
+  <li>Commit and push changes to your branch (please use issue name and description as commit title, e.g. “THRIFT-9999: make it perfect”), with the affected languages on the next line of the description.</li>
   <li>Use GitHub to create a pull request going from your branch to apache:master.  Ensure that the Jira ticket number is at the beginning of the title of your pull request, same as the commit title.</li>
   <li>Wait for other contributors or committers to review your new addition, and for a CI build to complete.</li>
   <li>Wait for a committer to commit your patch.  You can nudge the committers if necessary by sending a message to the <a href="https://thrift.apache.org/mailing">Apache Thrift mailing list</a>.</li>
@@ -118,18 +118,18 @@
 
 <p>For unix systems, see our detailed instructions on the <a href="/build/docker/README.md">Docker README</a>.</p>
 
-<h2 id="if-you-want-to-review-open-issues">If you want to review open issues&#8230;</h2>
+<h2 id="if-you-want-to-review-open-issues">If you want to review open issues…</h2>
 
 <ol>
   <li>Review the <a href="https://github.com/apache/thrift/pulls">GitHub Pull Request Backlog</a>.  Code reviews are open to all.</li>
   <li>Review the <a href="http://issues.apache.org/jira/browse/THRIFT">Jira issue tracker</a>.  You can search for tickets relating to languages you are interested in or currently using with thrift, for example a Jira search (Issues -&gt; Search For Issues) query of <code>project = THRIFT AND component in ("Erlang - Library") and status not in (resolved, closed)</code> will locate all the open Erlang Library issues.</li>
 </ol>
 
-<h2 id="if-you-discovered-a-defect">If you discovered a defect&#8230;</h2>
+<h2 id="if-you-discovered-a-defect">If you discovered a defect…</h2>
 
 <ol>
   <li>Check to see if the issue is already in the <a href="http://issues.apache.org/jira/browse/THRIFT">Jira issue tracker</a>.</li>
-  <li>If not, create a ticket describing the change you&#8217;re proposing in the Jira issue tracker.</li>
+  <li>If not, create a ticket describing the change you’re proposing in the Jira issue tracker.</li>
   <li>Contribute your code changes using the GitHub pull request method:</li>
 </ol>
 
@@ -153,12 +153,12 @@
 <ol>
   <li>Use the command <code>git log</code> to identify how many commits you made since you began.</li>
   <li>Use the command <code>git rebase -i HEAD~N</code> where N is the number of commits.</li>
-  <li>Leave &#8220;pull&#8221; in the first line.</li>
-  <li>Change all other lines from &#8220;pull&#8221; to &#8220;fixup&#8221;.</li>
+  <li>Leave “pull” in the first line.</li>
+  <li>Change all other lines from “pull” to “fixup”.</li>
   <li>All your changes are now in a single commit.</li>
 </ol>
 
-<p>If you already have a pull request outstanding, you will need to do a &#8220;force push&#8221; to overwrite it since you changed your commit history:</p>
+<p>If you already have a pull request outstanding, you will need to do a “force push” to overwrite it since you changed your commit history:</p>
 
 <pre><code>git push -u origin THRIFT-9999 --force
 </code></pre>
diff --git a/output/docs/Languages.html b/output/docs/Languages.html
index d6285c9..62d31f7 100644
--- a/output/docs/Languages.html
+++ b/output/docs/Languages.html
@@ -85,11 +85,11 @@
 each lib directory for additional details.  Note: while a language may contain
 support for protocols, transports, and servers, the extent to which each is tested
 as part of the overall build process varies.  The definitive integration test for
-the project is called the &#8220;cross&#8221; test which executes a test matrix with clients
+the project is called the “cross” test which executes a test matrix with clients
 and servers communicating across languages.</p>
 
-<p>Thrift&#8217;s core transport (supported by all languages) is TSocket.
-Thrift&#8217;s core protocol is TBinary, supported by all languages except for JavaScript.</p>
+<p>Thrift’s core transport (supported by all languages) is TSocket.
+Thrift’s core protocol is TBinary, supported by all languages except for JavaScript.</p>
 
 <table style="font-size: 60%; padding: 1px;">
 <thead>
@@ -216,7 +216,7 @@
 <td align="left"><a href="https://github.com/apache/thrift/blob/master/lib/go/README.md">Go</a></td>
 <!-- Since -----------------><td>0.7.0</td>
 <!-- Build Systems ---------><td><img src="/doc/images/cgrn.png" alt="Yes" /></td><td><img src="/doc/images/cred.png" alt="" /></td>
-<!-- Language Levels -------><td>1.19.5</td><td>1.20</td>
+<!-- Language Levels -------><td>1.20</td><td>1.21</td>
 <!-- Field types -----------><td><img src="/doc/images/cred.png" alt="" /></td>
 <!-- Low-Level Transports --><td><img src="/doc/images/cred.png" alt="" /></td><td><img src="/doc/images/cred.png" alt="" /></td><td><img src="/doc/images/cgrn.png" alt="Yes" /></td><td><img src="/doc/images/cred.png" alt="" /></td><td><img src="/doc/images/cgrn.png" alt="Yes" /></td><td><img src="/doc/images/cgrn.png" alt="Yes" /></td>
 <!-- Transport Wrappers ----><td><img src="/doc/images/cgrn.png" alt="Yes" /></td><td><img src="/doc/images/cgrn.png" alt="Yes" /></td><td><img src="/doc/images/cgrn.png" alt="Yes" /></td><td><img src="/doc/images/cgrn.png" alt="Yes" /></td>
diff --git a/output/docs/coding_standards.html b/output/docs/coding_standards.html
index e40773f..f648502 100644
--- a/output/docs/coding_standards.html
+++ b/output/docs/coding_standards.html
@@ -54,11 +54,11 @@
 
 <p>Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand.
-                                  &#8211; Martin Fowler, 1999</p>
+                                  – Martin Fowler, 1999</p>
 
-<p>The purpose of this document is to make everyone&#8217;s life easier.</p>
+<p>The purpose of this document is to make everyone’s life easier.</p>
 
-<p>It&#8217;s easier when you read good, well-formatted, with a clearly defined purpose, code.
+<p>It’s easier when you read good, well-formatted, with a clearly defined purpose, code.
 But the only way to read clean code is to write such.</p>
 
 <p>This document can help achieve that, but keep in mind that
@@ -92,8 +92,8 @@
 <ul>
   <li>Each file has to start with a comment containing <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License</a></li>
   <li>Public API of a library should be documented, preferably using format native for language-specific documentation generation tools (Javadoc, Doxygen etc.)</li>
-  <li>Other comments are discouraged - comments are lies. When one has to make comment it means one failed to write readable code. Instead of &#8220;I should write a comment here&#8221; think &#8220;I should clean it up&#8221;</li>
-  <li>Do not leave &#8220;TODO/FIXME&#8221; comments - file <a href="http://issues.apache.org/jira/browse/THRIFT">Jira</a> issue instead</li>
+  <li>Other comments are discouraged - comments are lies. When one has to make comment it means one failed to write readable code. Instead of “I should write a comment here” think “I should clean it up”</li>
+  <li>Do not leave “TODO/FIXME” comments - file <a href="http://issues.apache.org/jira/browse/THRIFT">Jira</a> issue instead</li>
 </ul>
 
 <h3 id="naming">Naming</h3>
diff --git a/output/docs/committers/HowToCommit.html b/output/docs/committers/HowToCommit.html
index bdceabf..fe404e7 100644
--- a/output/docs/committers/HowToCommit.html
+++ b/output/docs/committers/HowToCommit.html
@@ -74,8 +74,8 @@
     <table>
       <tbody>
         <tr>
-          <td>curl https://issues.apache.org/jira/&#8230;</td>
-          <td>git apply &#8211;ignore-space-change</td>
+          <td>curl https://issues.apache.org/jira/…</td>
+          <td>git apply –ignore-space-change</td>
         </tr>
       </tbody>
     </table>
diff --git a/output/docs/committers/HowToThriftWebsite.html b/output/docs/committers/HowToThriftWebsite.html
index a27ee4d..43ce484 100644
--- a/output/docs/committers/HowToThriftWebsite.html
+++ b/output/docs/committers/HowToThriftWebsite.html
@@ -101,8 +101,8 @@
 file” <a href="https://svn.apache.org/repos/asf/thrift/cms-site/trunk/lib/path.pm">lib/path.pm</a>. Update
 the following values and then following <b>Updating the Website</b> section below</p>
 
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>current_release: "0.18.1"
-current_release_date: "2023-MAR-01"
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>current_release: "0.19.0"
+current_release_date: "2023-SEP-02"
 </code></pre></div></div>
 
 <h3 id="updating-the-website">Updating the website</h3>
diff --git a/output/docs/idl.html b/output/docs/idl.html
index 04aca21..7c4ad23 100644
--- a/output/docs/idl.html
+++ b/output/docs/idl.html
@@ -52,7 +52,7 @@
       
 <h2 id="thrift-interface-description-language">Thrift interface description language</h2>
 
-<p>For Thrift version 0.19.0.</p>
+<p>For Thrift version 0.20.0.</p>
 
 <p>The Thrift interface definition language (IDL) allows for the definition of <a href="/docs/types">Thrift Types</a>. A Thrift IDL file is processed by the Thrift code generator to produce code for the various target languages to support the defined structs and services in the IDL file.</p>
 
@@ -90,7 +90,7 @@
 
 <h3 id="namespace">Namespace</h3>
 
-<p>A namespace declares which namespaces/package/module/etc. the type definitions in this file will be declared in for the target languages. The namespace scope indicates which language the namespace applies to; a scope of &#8216;*&#8217; indicates that the namespace applies to all target languages.</p>
+<p>A namespace declares which namespaces/package/module/etc. the type definitions in this file will be declared in for the target languages. The namespace scope indicates which language the namespace applies to; a scope of ‘*’ indicates that the namespace applies to all target languages.</p>
 
 <pre><code>[5]  Namespace       ::=  ( 'namespace' ( NamespaceScope Identifier ) )
 
@@ -192,7 +192,7 @@
   <li>Default values: are written when the isset flag is set</li>
 </ul>
 
-<p>Most language implementations use the recommended practice of so-called &#8220;isset&#8221; flags to indicate whether a particular optional field is set or not. Only fields with this flag set are written, and conversely the flag is only set when a field value has been read from the input stream.</p>
+<p>Most language implementations use the recommended practice of so-called “isset” flags to indicate whether a particular optional field is set or not. Only fields with this flag set are written, and conversely the flag is only set when a field value has been read from the input stream.</p>
 
 <h4 id="default-requiredness-implicit">default requiredness (implicit)</h4>
 
@@ -202,7 +202,7 @@
   <li>Default values: may not be written (see next section)</li>
 </ul>
 
-<p>Default requiredness is a good starting point. The desired behaviour is a mix of optional and required, hence the internal name &#8220;opt-in, req-out&#8221;. Although in theory these fields are supposed to be written (&#8220;req-out&#8221;), in reality unset fields are not always written. This is especially the case, when the field contains a <null> value, which by definition cannot be transported through thrift. The only way to achieve this is by not writing that field at all, and that's what most languages do.</null></p>
+<p>Default requiredness is a good starting point. The desired behaviour is a mix of optional and required, hence the internal name “opt-in, req-out”. Although in theory these fields are supposed to be written (“req-out”), in reality unset fields are not always written. This is especially the case, when the field contains a <null> value, which by definition cannot be transported through thrift. The only way to achieve this is by not writing that field at all, and that's what most languages do.</null></p>
 
 <h4 id="semantics-of-default-values">Semantics of Default Values</h4>
 
@@ -309,8 +309,8 @@
 <ul>
   <li><a href="https://raw.githubusercontent.com/apache/thrift/master/test/ThriftTest.thrift">ThriftTest.thrift</a> used by the Thrift TestFramework</li>
   <li>Thrift <a href="/tutorial/">tutorial</a></li>
-  <li>Facebook&#8217;s <a href="https://raw.githubusercontent.com/apache/thrift/master/contrib/fb303/if/fb303.thrift">fb303.thrift</a></li>
-  <li><a href="http://cassandra.apache.org/">Apache Cassandra&#8217;s</a> Thrift IDL: <a href="https://gitbox.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=interface/cassandra.thrift;hb=refs/heads/cassandra-3.0">cassandra.thrift</a></li>
+  <li>Facebook’s <a href="https://raw.githubusercontent.com/apache/thrift/master/contrib/fb303/if/fb303.thrift">fb303.thrift</a></li>
+  <li><a href="http://cassandra.apache.org/">Apache Cassandra’s</a> Thrift IDL: <a href="https://gitbox.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=interface/cassandra.thrift;hb=refs/heads/cassandra-3.0">cassandra.thrift</a></li>
   <li><a href="https://github.com/evernote/evernote-thrift">Evernote API</a></li>
 </ul>
 
@@ -319,19 +319,19 @@
 <p>Initialization of Base Types for all Languages?</p>
 
 <ul>
-  <li>Do all Languages initialize them to 0, bool=false and string=&#8221;&#8221;? or null, undefined?</li>
+  <li>Do all Languages initialize them to 0, bool=false and string=””? or null, undefined?</li>
 </ul>
 
 <p>Why does position of <code>CppType</code> vary between <code>SetType</code> and <code>ListType</code>?</p>
 
 <ul>
-  <li>std::set does sort the elements automatically, that&#8217;s the design. see <a href="/docs/types">Thrift Types</a> or the <a href="http://www.cplusplus.com/reference/stl/set/">C++ std:set reference</a> for further details</li>
+  <li>std::set does sort the elements automatically, that’s the design. see <a href="/docs/types">Thrift Types</a> or the <a href="http://www.cplusplus.com/reference/stl/set/">C++ std:set reference</a> for further details</li>
   <li>The question is, how other languages are doing that? What about custom objects, do they have a Compare function to set the order correctly?</li>
 </ul>
 
-<p>Why can&#8217;t <code>DefinitionType</code> be the same as <code>FieldType</code> (i.e. include <code>Identifier</code>)?</p>
+<p>Why can’t <code>DefinitionType</code> be the same as <code>FieldType</code> (i.e. include <code>Identifier</code>)?</p>
 
-<p>Examine the <code>smalltalk.prefix</code> and <code>smalltalk.category</code> status (esp <code>smalltalk.category</code>, which takes <code>STIdentifier</code> as its argument)&#8230;</p>
+<p>Examine the <code>smalltalk.prefix</code> and <code>smalltalk.category</code> status (esp <code>smalltalk.category</code>, which takes <code>STIdentifier</code> as its argument)…</p>
 
 <p>What to do about <code>ListSeparator</code>? Do we really want to be as lax as we currently are?</p>
 
diff --git a/output/docs/install/centos.html b/output/docs/install/centos.html
index dea63db..0cfe64c 100644
--- a/output/docs/install/centos.html
+++ b/output/docs/install/centos.html
@@ -132,8 +132,8 @@
 sudo make install
 </code></pre>
 
-<p>This will build the compiler (thrift/compiler/cpp/thrift &#8211;version) and any language libraries supported. The make install step installs the compiler on the path: /usr/local/bin/thrift
-You can use the ./configure &#8211;enable-libs=no switch to build the Apache Thrift IDL Compiler only without lib builds. To run tests use &#8220;make check&#8221;.</p>
+<p>This will build the compiler (thrift/compiler/cpp/thrift –version) and any language libraries supported. The make install step installs the compiler on the path: /usr/local/bin/thrift
+You can use the ./configure –enable-libs=no switch to build the Apache Thrift IDL Compiler only without lib builds. To run tests use “make check”.</p>
 
 <p class="snippet_footer">This page was generated by Apache Thrift's <strong>source tree docs</strong>:
 <a href="https://gitbox.apache.org/repos/asf?p=thrift.git;a=blob;hb=HEAD;f=doc/install/centos.md">doc/install/centos.md</a>
diff --git a/output/docs/install/debian.html b/output/docs/install/debian.html
index bb20054..2f78e6d 100644
--- a/output/docs/install/debian.html
+++ b/output/docs/install/debian.html
@@ -74,7 +74,7 @@
 <ul>
   <li>Java
     <ul>
-      <li>packages: gradle (version 7.5.1)</li>
+      <li>packages: gradle (version 8.0.2)</li>
       <li>You will also need Java JDK v1.8 or higher. Type <strong>javac</strong> to see a list of available packages, pick the one you prefer and <strong>apt-get install</strong> it (e.g. default-jdk).</li>
     </ul>
   </li>
diff --git a/output/docs/install/windows.html b/output/docs/install/windows.html
index 07802ca..23debfd 100644
--- a/output/docs/install/windows.html
+++ b/output/docs/install/windows.html
@@ -54,7 +54,7 @@
 
 <p>The Thrift environment consists of two main parts: The Thrift compiler EXE and the language-dependent libraries. Most of these libraries will require some kind of build and/or installation. But regarding the Thrift compiler utility, there are a number of different alternatives.</p>
 
-<p>The first one of these alternatives is to download the <strong>pre-built Thrift Compiler EXE</strong> and only build the libraries needed from source, following one of the &#8220;Setup from source&#8221; methods outlined below.</p>
+<p>The first one of these alternatives is to download the <strong>pre-built Thrift Compiler EXE</strong> and only build the libraries needed from source, following one of the “Setup from source” methods outlined below.</p>
 
 <p>The other two options are to build the Thrift compiler from source. The most recommended way to achieve this is by means of the <strong>Visual Studio C++ build project</strong>. Alternatively, the Thrift compiler can also be built via <strong>Cygwin</strong> or <strong>MinGW</strong> build environments, however this method is not only less comfortable, but more time-consuming and requires much more manual effort.</p>
 
@@ -62,13 +62,13 @@
 
 <p>The windows Thrift compiler is available as a prebuilt exe available <a href="/download">here</a>. Note that there is no installation tool, rather this EXE file <em>is</em> already the Thrift compiler utility. Download the file and put it into some suitable location of your choice.</p>
 
-<p>Now pick one of the &#8220;Build and install target libraries&#8221; below to continue.</p>
+<p>Now pick one of the “Build and install target libraries” below to continue.</p>
 
 <h2 id="setup-from-source-via-visual-studio-c-recommended">Setup from source via Visual Studio C++ (recommended)</h2>
 
 <h3 id="requirements">Requirements</h3>
 
-<p>Thrift&#8217;s compiler is written in C++ and designed to be portable, but there are some system requirements. Thrift&#8217;s runtime libraries are written in various languages, which are also required for the particular language interface.</p>
+<p>Thrift’s compiler is written in C++ and designed to be portable, but there are some system requirements. Thrift’s runtime libraries are written in various languages, which are also required for the particular language interface.</p>
 
 <ul>
   <li>Visual Studio C++, any recent version should do</li>
@@ -84,13 +84,13 @@
 
 <p>A few of the target language libraries also do provide Visual Studio project files, such as C++ and C#. These are located in the <code>lib/&lt;language&gt;/</code> folders.</p>
 
-<p>Most of the language packages must be built and installed manually using build tools better suited to those languages. Typical examples are Java, Ruby, Delphi, or PHP. Look for the <code>README.md</code> file in the <code>lib/&lt;language&gt;/</code> folder for more details on how to build and install each language&#8217;s library package.</p>
+<p>Most of the language packages must be built and installed manually using build tools better suited to those languages. Typical examples are Java, Ruby, Delphi, or PHP. Look for the <code>README.md</code> file in the <code>lib/&lt;language&gt;/</code> folder for more details on how to build and install each language’s library package.</p>
 
 <h2 id="setup-from-source-via-cygwin">Setup from source via Cygwin</h2>
 
 <h3 id="requirements-1">Requirements</h3>
 
-<p>Thrift&#8217;s compiler is written in C++ and designed to be portable, but there are some system requirements. Thrift&#8217;s runtime libraries are written in various languages, which are also required for the particular language interface.</p>
+<p>Thrift’s compiler is written in C++ and designed to be portable, but there are some system requirements. Thrift’s runtime libraries are written in various languages, which are also required for the particular language interface.</p>
 
 <ul>
   <li>Cygwin or MinGW</li>
@@ -139,12 +139,12 @@
 ./configure: line 21183: `  PKG_CHECK_MODULES(MONO, mono &gt;= 1.2.6, have_mono=yes, have_mono=no)'
 </code></pre>
 
-<p>To resolve this, you&#8217;ll need to find your pkg.m4 (installed by the pkg-config package) file and copy it to the thrift/aclocal directory.  From the top-level thrift directory, you can copy the file by running</p>
+<p>To resolve this, you’ll need to find your pkg.m4 (installed by the pkg-config package) file and copy it to the thrift/aclocal directory.  From the top-level thrift directory, you can copy the file by running</p>
 
 <pre><code>cp /usr/share/aclocal/pkg.m4 aclocal
 </code></pre>
 
-<p>Finally, re-run ./bootstrap.sh and ./configure.  (Note that pkg.m4 is created by the pkg-config tool.  If your /usr/share/aclocal directory doesn&#8217;t contain the pkg.m4 file, you may not have pkg-config installed.)</p>
+<p>Finally, re-run ./bootstrap.sh and ./configure.  (Note that pkg.m4 is created by the pkg-config tool.  If your /usr/share/aclocal directory doesn’t contain the pkg.m4 file, you may not have pkg-config installed.)</p>
 
 <h4 id="installing-perl-runtime-libraries">Installing perl runtime libraries</h4>
 
@@ -152,7 +152,7 @@
 
 <p>A workaround is to avoid installing the perl libraries if they are not needed.</p>
 
-<p>If you don&#8217;t need perl, run configure with &#8211;without-perl.</p>
+<p>If you don’t need perl, run configure with –without-perl.</p>
 
 <p>If you need perl, and are happy to manually install it, replace the contents of thrift/lib/perl/Makefile with the following, after building thrift:</p>
 
@@ -221,7 +221,7 @@
 ./configure
 </code></pre>
 
-<p>'&#8217;Optional:&#8217;&#8217; To make the compiler only, change to the compiler  directory before running make:</p>
+<p>'’Optional:’’ To make the compiler only, change to the compiler  directory before running make:</p>
 
 <pre><code>cd compiler/cpp
 </code></pre>
diff --git a/output/download.html b/output/download.html
index 556b522..575cd35 100644
--- a/output/download.html
+++ b/output/download.html
@@ -50,19 +50,19 @@
 
     <div class="container">
       <h2 id="release">Release</h2>
-<p>The latest stable release of Thrift is 0.18.1 (released on 2023-MAR-01).</p>
+<p>The latest stable release of Thrift is 0.19.0 (released on 2023-SEP-02).</p>
 
 <ul>
-  <li><a href="http://www.apache.org/dyn/closer.cgi?path=/thrift/0.18.1/thrift-0.18.1.tar.gz">thrift-0.18.1.tar.gz</a> [<a href="https://www.apache.org/dist/thrift/0.18.1/thrift-0.18.1.tar.gz.asc">PGP</a>]
-[<a href="https://www.apache.org/dist/thrift/0.18.1/thrift-0.18.1.tar.gz.md5">MD5</a>]</li>
-  <li><a href="http://www.apache.org/dyn/closer.cgi?path=/thrift/0.18.1/thrift-0.18.1.exe">Thrift compiler for Windows (thrift-0.18.1.exe)</a> [<a href="https://www.apache.org/dist/thrift/0.18.1/thrift-0.18.1.exe.asc">PGP</a>] [<a href="https://www.apache.org/dist/thrift/0.18.1/thrift-0.18.1.exe.md5">MD5</a>]</li>
+  <li><a href="http://www.apache.org/dyn/closer.cgi?path=/thrift/0.19.0/thrift-0.19.0.tar.gz">thrift-0.19.0.tar.gz</a> [<a href="https://www.apache.org/dist/thrift/0.19.0/thrift-0.19.0.tar.gz.asc">PGP</a>]
+[<a href="https://www.apache.org/dist/thrift/0.19.0/thrift-0.19.0.tar.gz.md5">MD5</a>]</li>
+  <li><a href="http://www.apache.org/dyn/closer.cgi?path=/thrift/0.19.0/thrift-0.19.0.exe">Thrift compiler for Windows (thrift-0.19.0.exe)</a> [<a href="https://www.apache.org/dist/thrift/0.19.0/thrift-0.19.0.exe.asc">PGP</a>] [<a href="https://www.apache.org/dist/thrift/0.19.0/thrift-0.19.0.exe.md5">MD5</a>]</li>
 </ul>
 
 <h2 id="maven-artifact">Maven artifact</h2>
 <pre><code>&lt;dependency&gt;
   &lt;groupId&gt;org.apache.thrift&lt;/groupId&gt;
   &lt;artifactId&gt;libthrift&lt;/artifactId&gt;
-  &lt;version&gt;0.18.1&lt;/version&gt;
+  &lt;version&gt;0.19.0&lt;/version&gt;
 &lt;/dependency&gt;
 </code></pre>
 
diff --git a/output/index.html b/output/index.html
index d22c143..c2b3ac0 100644
--- a/output/index.html
+++ b/output/index.html
@@ -80,19 +80,19 @@
   </div>
   <div class="span3 well center pull-right">
     <h2>Download</h2>
-    <p>Apache Thrift v0.18.1</p>
+    <p>Apache Thrift v0.19.0</p>
     <p>
-      <a class="btn btn-large" href="http://www.apache.org/dyn/closer.cgi?path=/thrift/0.18.1/thrift-0.18.1.tar.gz">
-          Download <small>v0.18.1</small>
+      <a class="btn btn-large" href="http://www.apache.org/dyn/closer.cgi?path=/thrift/0.19.0/thrift-0.19.0.tar.gz">
+          Download <small>v0.19.0</small>
       </a>
     </p>
     <p>
       <small>
-       <a href="https://www.apache.org/dist/thrift/0.18.1/thrift-0.18.1.tar.gz.md5">MD5</a>
+       <a href="https://www.apache.org/dist/thrift/0.19.0/thrift-0.19.0.tar.gz.md5">MD5</a>
       </small>
       |
       <small>
-       <a href="https://www.apache.org/dist/thrift/0.18.1/thrift-0.18.1.tar.gz.asc">PGP</a>
+       <a href="https://www.apache.org/dist/thrift/0.19.0/thrift-0.19.0.tar.gz.asc">PGP</a>
       </small>
     </p>
     <p>
diff --git a/output/lib/c_glib.html b/output/lib/c_glib.html
index 8e166b4..d5ce73b 100644
--- a/output/lib/c_glib.html
+++ b/output/lib/c_glib.html
@@ -64,16 +64,16 @@
 
 <h2 id="section">0.12.0</h2>
 
-<p>The compiler&#8217;s handling of namespaces when generating the name of types,
+<p>The compiler’s handling of namespaces when generating the name of types,
 functions and header files has been improved. This means code written to use
 classes generated by previous versions of the compiler may need to be updated to
 reflect the proper convention for class names, which is</p>
 
 <ul>
   <li>A lowercase, <a href="https://en.wikipedia.org/wiki/Snake_case">snake-case</a>
-representation of the class&#8217; namespace, followed by</li>
+representation of the class’ namespace, followed by</li>
   <li>An underscore and</li>
-  <li>A lowercase, snake-case representation of the class&#8217; name.</li>
+  <li>A lowercase, snake-case representation of the class’ name.</li>
 </ul>
 
 <p class="snippet_footer">This page was generated by Apache Thrift's <strong>source tree docs</strong>:
diff --git a/output/lib/cl.html b/output/lib/cl.html
index 6f43293..7499561 100644
--- a/output/lib/cl.html
+++ b/output/lib/cl.html
@@ -90,7 +90,7 @@
 
 <ul>
   <li><code>serve (location service)</code> : accepts connections on the designated port and responds to
-requests of the service&#8217;s operations.</li>
+requests of the service’s operations.</li>
 </ul>
 
 <h2 id="building">Building</h2>
@@ -152,7 +152,7 @@
 
 <p>It is suggested to work in the <code>tutorial-implementation</code> package while implementing
 the services - it imports the <code>common-lisp</code> package, while the service-specific ones
-don&#8217;t (to avoid conflicts between Thrift method names and function names in <code>common-lisp</code>).</p>
+don’t (to avoid conflicts between Thrift method names and function names in <code>common-lisp</code>).</p>
 
 <pre><code>;; define the base operations
 
diff --git a/output/lib/cpp.html b/output/lib/cpp.html
index 705c954..f4b84a6 100644
--- a/output/lib/cpp.html
+++ b/output/lib/cpp.html
@@ -124,7 +124,7 @@
 libthriftnb, libevent.</p>
 
 <p>In the project properties you must also set HAVE_CONFIG_H as force include
-the config header: &#8220;windows/config.h&#8221;</p>
+the config header: “windows/config.h”</p>
 
 <h2 id="dependencies-1">Dependencies</h2>
 
@@ -158,7 +158,7 @@
 <p>Named Pipe transport has been added in the TPipe and TPipeServer classes. This
 is currently Windows-only. Named pipe transport for *NIX has not been
 implemented. Domain sockets are a better choice for local IPC under non-Windows
-OS&#8217;s. *NIX named pipes only support 1:1 client-server connection.</p>
+OS’s. *NIX named pipes only support 1:1 client-server connection.</p>
 
 <h1 id="thriftssl">Thrift/SSL</h1>
 
@@ -190,44 +190,44 @@
 
 <p>After SSL handshake completes, additional checks are conducted. Application
 is given the chance to decide whether or not to continue the conversation
-with the remote. Application is queried through the above three &#8220;verify&#8221;
+with the remote. Application is queried through the above three “verify”
 method. They are called at different points of the verification process.</p>
 
 <p>Decisions can be one of ALLOW, DENY, and SKIP. ALLOW and DENY means the
 conversation should be continued or disconnected, respectively. ALLOW and
-DENY decision stops the verification process. SKIP means there&#8217;s no decision
+DENY decision stops the verification process. SKIP means there’s no decision
 based on the given input, continue the verification process.</p>
 
 <p>First, (a) is called with the remote IP. It is called once at the beginning.
-&#8220;sa&#8221; is the IP address of the remote peer.</p>
+“sa” is the IP address of the remote peer.</p>
 
 <p>Then, the certificate of remote peer is loaded. SubjectAltName extensions
 are extracted and sent to application for verification. When a DNS
 subjectAltName field is extracted, (b) is called. When an IP subjectAltName
 field is extracted, (c) is called.</p>
 
-<p>The &#8220;host&#8221; in (b) is the value from TSocket::getHost() if this is a client
+<p>The “host” in (b) is the value from TSocket::getHost() if this is a client
 side socket, or TSocket::getPeerHost() if this is a server side socket. The
 reason is client side socket initiates the connection. TSocket::getHost()
 is the remote host name. On server side, the remote host name is unknown
-unless it&#8217;s retrieved through TSocket::getPeerHost(). Either way, &#8220;host&#8221;
+unless it’s retrieved through TSocket::getPeerHost(). Either way, “host”
 should be the remote host name. Keep in mind, if TSocket::getPeerHost()
 failed, it would return the remote host name in numeric format.</p>
 
-<p>If all subjectAltName extensions were &#8220;skipped&#8221;, the common name field would
-be checked. It is sent to application through (c), where &#8220;sa&#8221; is the remote
-IP address. &#8220;data&#8221; is the IP address extracted from subjectAltName IP
-extension, and &#8220;size&#8221; is the length of the extension data.</p>
+<p>If all subjectAltName extensions were “skipped”, the common name field would
+be checked. It is sent to application through (c), where “sa” is the remote
+IP address. “data” is the IP address extracted from subjectAltName IP
+extension, and “size” is the length of the extension data.</p>
 
-<p>If any of the above &#8220;verify&#8221; methods returned a decision ALLOW or DENY, the
+<p>If any of the above “verify” methods returned a decision ALLOW or DENY, the
 verification process would be stopped.</p>
 
-<p>If any of the above &#8220;verify&#8221; methods returned SKIP, that decision would be
+<p>If any of the above “verify” methods returned SKIP, that decision would be
 ignored and the verification process would move on till the last item is
-examined. At that point, if there&#8217;s still no decision, the connection is
+examined. At that point, if there’s still no decision, the connection is
 terminated.</p>
 
-<p>Thread safety, an access manager should not store state information if it&#8217;s
+<p>Thread safety, an access manager should not store state information if it’s
 to be used by many SSL sockets.</p>
 
 <h2 id="sigpipe-signal">SIGPIPE signal</h2>
@@ -249,7 +249,7 @@
 
 <p>The file names are hard coded in the source code. You need to create these
 certificates before you can run the test code in SSL mode. Make sure at least
-one of the followings is included in &#8220;keys/server.crt&#8221;,</p>
+one of the followings is included in “keys/server.crt”,</p>
 
 <ul>
   <li>subjectAltName, DNS localhost</li>
@@ -263,16 +263,16 @@
      ./cpp/TestClient --ssl
 </code></pre>
 
-<p>If &#8220;-h <host>" is used to run client, the above "localhost" in the above
+<p>If “-h <host>" is used to run client, the above "localhost" in the above
 keys/server.crt has to be replaced with that host name.</host></p>
 
 <h2 id="tsslsocketfactoryrandomize">TSSLSocketFactory::randomize()</h2>
 
 <p>The default implementation of OpenSSLSocketFactory::randomize() simply calls
-OpenSSL&#8217;s RAND_poll() when OpenSSL library is first initialized.</p>
+OpenSSL’s RAND_poll() when OpenSSL library is first initialized.</p>
 
 <p>The PRNG seed is key to the application security. This method should be
-overridden if it&#8217;s not strong enough for you.</p>
+overridden if it’s not strong enough for you.</p>
 
 <h1 id="deprecations">Deprecations</h1>
 
@@ -314,7 +314,7 @@
 
 <p>THRIFT-4762:
 Added <code>const</code> specifier to <code>TTransport::getOrigin()</code>. This changes its function signature.
-It&#8217;s recommended to add the <code>override</code> specifier in implementations derived from <code>TTransport</code>.</p>
+It’s recommended to add the <code>override</code> specifier in implementations derived from <code>TTransport</code>.</p>
 
 <h2 id="section-2">0.11.0</h2>
 
@@ -327,7 +327,7 @@
 <p>In the pthread mutex implementation, the contention profiling code was enabled
 by default in all builds.  This changed to be disabled by default.  (THRIFT-4151)</p>
 
-<p>In older releases, if a TSSLSocketFactory&#8217;s lifetime was not at least as long
+<p>In older releases, if a TSSLSocketFactory’s lifetime was not at least as long
 as the TSSLSockets it created, we silently reverted openssl to unsafe multithread behavior
 and so the results were undefined.  Changes were made in 0.11.0 that cause either an
 assertion or a core instead of undefined behavior.  The lifetime of a TSSLSocketFactory
diff --git a/output/lib/d.html b/output/lib/d.html
index d064a68..c60c567 100644
--- a/output/lib/d.html
+++ b/output/lib/d.html
@@ -56,7 +56,7 @@
 the unit test blocks contained in the D source files, and
 second, the more extensive testing applications in the test/
 subdirectory, which also make use of the Thrift compiler.
-Both are built when running &#8220;make check&#8221;, but only the
+Both are built when running “make check”, but only the
 unit tests are immediately run, however – the separate test
 cases typically run longer or require manual intervention.
 It might also be prudent to run the independent tests,
@@ -68,11 +68,11 @@
 invoke the compiler by running the following in the src/
 directory (PowerShell syntax):</p>
 
-<p>dmd -ofunittest -unittest -w $(dir -r -filter &#8216;*.d&#8217; -name)</p>
+<p>dmd -ofunittest -unittest -w $(dir -r -filter ‘*.d’ -name)</p>
 
 <h2 id="async-and-ssl">Async and SSL</h2>
 <p>Using SSL with async is experimental (always has been) and
-the unit test &#8220;async_test &#8211;ssl&#8221; hangs.  Use at your own
+the unit test “async_test –ssl” hangs.  Use at your own
 risk.</p>
 
 <p class="snippet_footer">This page was generated by Apache Thrift's <strong>source tree docs</strong>:
diff --git a/output/lib/go.html b/output/lib/go.html
index 96e1af2..9a86f05 100644
--- a/output/lib/go.html
+++ b/output/lib/go.html
@@ -61,9 +61,9 @@
 and those are the two Go releases supported by Thrift v0.14.*
 (including v0.14.1 and v0.14.2 patch releases).</p>
 
-<p>Because of Go&#8217;s backward compatibility guarantee,
+<p>Because of Go’s backward compatibility guarantee,
 older Thrift libraries usually works with newer Go releases
-(e.g. Thrift v0.14.* works with go1.16, although it&#8217;s not officially supported),
+(e.g. Thrift v0.14.* works with go1.16, although it’s not officially supported),
 but newer Thrift releases might use new APIs introduced in Go releases and no
 longer work with older Go releases.
 For example, Thrift v0.14.0 used APIs introduced in go1.13,
@@ -102,7 +102,7 @@
 }
 </code></pre>
 
-<p>(Nor is there any other syntax that&#8217;s built in to the language)</p>
+<p>(Nor is there any other syntax that’s built in to the language)</p>
 
 <p>As such, we provide some helpers that do just this under lib/go/thrift/. E.g.,</p>
 
@@ -134,15 +134,21 @@
 
 <p>The context object passed into the server handler function will be canceled when
 the client closes the connection (this is a best effort check, not a guarantee
-&#8211; there&#8217;s no guarantee that the context object is always canceled when client
-closes the connection, but when it&#8217;s canceled you can always assume the client
-closed the connection). When implementing Go Thrift server, you can take
-advantage of that to abandon requests that&#8217;s no longer needed:</p>
+– there’s no guarantee that the context object is always canceled when client
+closes the connection, but when it’s canceled you can always assume the client
+closed the connection). The cause of the cancellation (via <code>context.Cause(ctx)</code>)
+would also be set to <code>thrift.ErrAbandonRequest</code>.</p>
+
+<p>When implementing Go Thrift server, you can take advantage of that to abandon
+requests that’s no longer needed by returning <code>thrift.ErrAbandonRequest</code>:</p>
 
 <pre><code>func MyEndpoint(ctx context.Context, req *thriftRequestType) (*thriftResponseType, error) {
     ...
     if ctx.Err() == context.Canceled {
         return nil, thrift.ErrAbandonRequest
+        // Or just return ctx.Err(), compiler generated processor code will
+        // handle it for you automatically:
+        // return nil, ctx.Err()
     }
     ...
 }
@@ -180,7 +186,7 @@
 <pre><code>thrift.ServerStopTimeout = &lt;max_duration_to_stop&gt;
 </code></pre>
 
-<p>If it&#8217;s set to &lt;=0, the feature will be disabled (by default), and server 
+<p>If it’s set to &lt;=0, the feature will be disabled (by default), and server 
 will wait for all the client connections to be closed gracefully with 
 zero err time. Otherwise, the stop will wait for all the client 
 connections to be closed gracefully util thrift.ServerStopTimeout is 
diff --git a/output/lib/haxe.html b/output/lib/haxe.html
index b27b3c8..c0222e6 100644
--- a/output/lib/haxe.html
+++ b/output/lib/haxe.html
@@ -94,7 +94,7 @@
 <h2 id="thrift-haxe-bindings">Thrift Haxe bindings</h2>
 
 <p>Thrift Haxe bindings can be set up via the <code>haxelib</code> tool  as usual.
-Alternatively, the &#8220;github&#8221; method can be used.</p>
+Alternatively, the “github” method can be used.</p>
 
 <ul>
   <li>
@@ -121,7 +121,7 @@
 downloads and more information can be found at http://thrift.apache.org</p>
 
 <p>To get started, visit the /tutorial/haxe and /test/haxe dirs for examples. 
-If you are using the HaxeDevelop IDE, you&#8217;ll find appropriate project files 
+If you are using the HaxeDevelop IDE, you’ll find appropriate project files 
 in these folders.</p>
 
 <h1 id="breaking-changes">Breaking changes</h1>
@@ -180,7 +180,7 @@
 </code></p>
   </li>
   <li>
-    <p>TSimpleServer doesn&#8217;t stop after first call, so processor.process() should be called instead, or use runOnce property 
+    <p>TSimpleServer doesn’t stop after first call, so processor.process() should be called instead, or use runOnce property 
 <code>haxe
 var server = new TSimpleServer( processor, transport, transfactory, protfactory);
 server.runOnce = true;
diff --git a/output/lib/java.html b/output/lib/java.html
index 4fe695d..70cdf54 100644
--- a/output/lib/java.html
+++ b/output/lib/java.html
@@ -71,7 +71,7 @@
 the Gradle build system, which tends to be predominant amongst Java
 developers.</p>
 
-<p>Currently we use gradle 7.5.1 to build the Thrift Java source. The usual way to setup gradle
+<p>Currently we use gradle 8.0 to build the Thrift Java source. The usual way to setup gradle
 project is to include the gradle-wrapper.jar in the project and then run the gradle wrapper to
 bootstrap setting up gradle binaries. However to avoid putting binary files into the source tree we
 have ignored the gradle wrapper files. You are expected to install it manually, as described in
@@ -79,13 +79,13 @@
 following this step (which is also done in the travis CI docker images):</p>
 
 <p><code>bash
-export GRADLE_VERSION="7.5.1"
+export GRADLE_VERSION="8.0.2"
 # install dependencies
 apt-get install -y --no-install-recommends openjdk-17-jdk-headless wget unzip
 # download gradle distribution
 wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip
 # check binary integrity
-echo "f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4  /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -
+echo "ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7  /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -
 # unzip and install
 unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip
 mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle
@@ -105,7 +105,7 @@
 gradle
 </code></p>
 
-<p>Yep, that&#8217;s easy. Look for <code>libthrift-&lt;version&gt;.jar</code> in the build/libs directory.</p>
+<p>Yep, that’s easy. Look for <code>libthrift-&lt;version&gt;.jar</code> in the build/libs directory.</p>
 
 <p>The default build will run the unit tests which expect a usable
 Thrift compiler to exist on the system. You have two choices for
@@ -119,7 +119,7 @@
     <p>Install the published binary distribution to have Thrift
 executable in a known location and add the path to the
 ~/.gradle/gradle.properties file using the property name
-&#8220;thrift.compiler&#8221;. For example this would set the path in
+“thrift.compiler”. For example this would set the path in
 a Windows box if Thrift was installed under C:\Thrift</p>
 
     <p>thrift.compiler=C:/Thrift/thrift.exe</p>
@@ -246,7 +246,7 @@
 
 <ul>
   <li>
-    <p>The signature of the &#8216;process&#8217; method in TAsyncProcessor and TProcessor has
+    <p>The signature of the ‘process’ method in TAsyncProcessor and TProcessor has
 changed to remove the boolean return type and instead rely on Exceptions.</p>
   </li>
   <li>
diff --git a/output/lib/js.html b/output/lib/js.html
index b88b757..5468729 100644
--- a/output/lib/js.html
+++ b/output/lib/js.html
@@ -169,7 +169,7 @@
 <h2 id="section">0.13.0</h2>
 
 <ol>
-  <li>64-bit integer constants are now generatd using node-int64 e.g.: var x = new Int64(&#8220;7fffffffffffffff&#8221;);</li>
+  <li>64-bit integer constants are now generatd using node-int64 e.g.: var x = new Int64(“7fffffffffffffff”);</li>
 </ol>
 
 <p class="snippet_footer">This page was generated by Apache Thrift's <strong>source tree docs</strong>:
diff --git a/output/lib/netstd.html b/output/lib/netstd.html
index fcefda9..922b2bc 100644
--- a/output/lib/netstd.html
+++ b/output/lib/netstd.html
@@ -77,7 +77,7 @@
 
 <h1 id="migration-to-netstd">Migration to netstd</h1>
 
-<h2 id="from-netcore">&#8230; from netcore</h2>
+<h2 id="from-netcore">… from netcore</h2>
 
 <p>If you are migrating your code from netcore library, you will have to:</p>
 
@@ -94,14 +94,14 @@
 
 <p>You may wonder why we changed so many names. The naming scheme has been revised for two reasons: First, we want to get back the established, well-known naming consistency across the Thrift libraries which the netcore library did not fully respect. Second, by achieving that first objective, we get the additional benefit of making migration at least a bit easier for C# projects.</p>
 
-<h2 id="from-csharp">&#8230; from csharp</h2>
+<h2 id="from-csharp">… from csharp</h2>
 
 <p>Because of the different environment requirements, migration from C# takes slightly more efforts. While the code changes related to Thrift itself are moderate, you may need to upgrade certain dependencies, components or even modules to more recent versions.</p>
 
 <ol>
   <li>Client and server applications must use at least framework 4.6.1, any version below will not work.</li>
   <li>Switch to <code>thrift -gen netstd</code>. The following compiler flags are no longer needed or supported: <code>hashcode</code> and <code>async</code> are now standard, while <code>nullable</code> is no longer supported.</li>
-  <li><a href="https://msdn.microsoft.com/en-us/magazine/jj991977.aspx">Familiarize yourself with the <code>async/await</code> model</a>, if you have not already done so. As netstd does not support <code>ISync</code> anymore, async is mandatory. The synchronous model is simply no longer available (that&#8217;s also the reason why we don&#8217;t need the <code>async</code> flag anymore).</li>
+  <li><a href="https://msdn.microsoft.com/en-us/magazine/jj991977.aspx">Familiarize yourself with the <code>async/await</code> model</a>, if you have not already done so. As netstd does not support <code>ISync</code> anymore, async is mandatory. The synchronous model is simply no longer available (that’s also the reason why we don’t need the <code>async</code> flag anymore).</li>
   <li>Consider proper use of <code>cancellationToken</code> parameters. They are optional but may be quite helpful.</li>
   <li>As you probably already guessed, there are a few names that have been changed:
 - add <code>using Thrift.Processor;</code> in the server code where appropriate
@@ -109,7 +109,7 @@
 - change <code>IProtocolFactory</code> into <code>ITProtocolFactory</code>
 - if you are looking for <code>TSimpleServer</code>, try <code>TSimpleAsyncServer</code> instead
 - similarly, the <code>TThreadPoolServer</code> is now a <code>TThreadPoolAsyncServer</code> 
-- the server&#8217;s <code>Serve()</code> method does now <code>ServeAsync()</code>
+- the server’s <code>Serve()</code> method does now <code>ServeAsync()</code>
 - In case you are using Thrift server event handlers: the <code>SetEventHandler</code> method now starts with an uppercase letter
 - and you will also have to revise the method names of all <code>TServerEventHandler</code> descendants you have in your code</li>
 </ol>
diff --git a/output/lib/nodejs.html b/output/lib/nodejs.html
index daf1ead..e6c1fa5 100644
--- a/output/lib/nodejs.html
+++ b/output/lib/nodejs.html
@@ -71,22 +71,22 @@
 <p>Here is a Cassandra example:</p>
 
 <p>```js
-var thrift = require(&#8216;thrift&#8217;),
-    Cassandra = require(&#8216;./gen-nodejs/Cassandra&#8217;)
-    ttypes = require(&#8216;./gen-nodejs/cassandra_types&#8217;);</p>
+var thrift = require(‘thrift’),
+    Cassandra = require(‘./gen-nodejs/Cassandra’)
+    ttypes = require(‘./gen-nodejs/cassandra_types’);</p>
 
-<p>var connection = thrift.createConnection(&#8220;localhost&#8221;, 9160),
+<p>var connection = thrift.createConnection(“localhost”, 9160),
     client = thrift.createClient(Cassandra, connection);</p>
 
-<p>connection.on(&#8216;error&#8217;, function(err) {
+<p>connection.on(‘error’, function(err) {
   console.error(err);
 });</p>
 
-<p>client.get_slice(&#8220;Keyspace&#8221;, &#8220;key&#8221;, new ttypes.ColumnParent({column_family: &#8220;ExampleCF&#8221;}), new ttypes.SlicePredicate({slice_range: new ttypes.SliceRange({start: &#8216;&#8217;, finish: &#8216;&#8217;})}), ttypes.ConsistencyLevel.ONE, function(err, data) {
+<p>client.get_slice(“Keyspace”, “key”, new ttypes.ColumnParent({column_family: “ExampleCF”}), new ttypes.SlicePredicate({slice_range: new ttypes.SliceRange({start: ‘’, finish: ‘’})}), ttypes.ConsistencyLevel.ONE, function(err, data) {
   if (err) {
     // handle err
   } else {
-    // data == [ttypes.ColumnOrSuperColumn, &#8230;]
+    // data == [ttypes.ColumnOrSuperColumn, …]
   }
   connection.end();
 });
@@ -105,11 +105,11 @@
 
 <p>You can use code generated with js:node on browsers with Webpack. Here is an example.</p>
 
-<p>thrift &#8211;gen js:node,ts,es6,with_ns</p>
+<p>thrift –gen js:node,ts,es6,with_ns</p>
 
 <p>```javascript
-import * as thrift from &#8216;thrift&#8217;;
-import { MyServiceClient } from &#8216;../gen-nodejs/MyService&#8217;;</p>
+import * as thrift from ‘thrift’;
+import { MyServiceClient } from ‘../gen-nodejs/MyService’;</p>
 
 <p>let host = window.location.hostname;
 let port = 443;
@@ -117,17 +117,17 @@
   transport: thrift.TBufferedTransport,
   protocol: thrift.TJSONProtocol, 
     headers: {
-     &#8216;Content-Type&#8217;: &#8216;application/vnd.apache.thrift.json&#8217;,
+     ‘Content-Type’: ‘application/vnd.apache.thrift.json’,
     },
     https: true,
-    path: &#8216;/url/path&#8217;,
+    path: ‘/url/path’,
     useCORS: true,
 };</p>
 
 <p>let connection = thrift.createXHRConnection(host, port, opts);
 let thriftClient = thrift.createXHRClient(MyServiceClient, connection);</p>
 
-<p>connection.on(&#8216;error&#8217;, (err) =&gt; {
+<p>connection.on(‘error’, (err) =&gt; {
   console.error(err);
 });</p>
 
@@ -136,7 +136,7 @@
     console.log(result);
   })
   .catch((err) =&gt; {
-    &#8230;.
+    ….
   });
 ```</p>
 
@@ -145,8 +145,8 @@
 
 <h3 id="browser-example-with-websocket-bufferedtransport-and-binaryprotocol">Browser example with WebSocket, BufferedTransport and BinaryProtocol</h3>
 <p>```javascript
-import thrift from &#8216;thrift&#8217;;
-import { MyServiceClient } from &#8216;../gen-nodejs/MyService&#8217;;</p>
+import thrift from ‘thrift’;
+import { MyServiceClient } from ‘../gen-nodejs/MyService’;</p>
 
 <p>const host = window.location.hostname;
 const port = 9090;
@@ -158,7 +158,7 @@
 connection.open();
 const thriftClient = thrift.createWSClient(MyServiceClient, connection);</p>
 
-<p>connection.on(&#8216;error&#8217;, (err) =&gt; {
+<p>connection.on(‘error’, (err) =&gt; {
   console.error(err);
 });</p>
 
@@ -167,7 +167,7 @@
     console.log(result);
   })
   .catch((err) =&gt; {
-    &#8230;.
+    ….
   });
 ```</p>
 
diff --git a/output/lib/ocaml.html b/output/lib/ocaml.html
index 9ba35b6..c7349e1 100644
--- a/output/lib/ocaml.html
+++ b/output/lib/ocaml.html
@@ -100,8 +100,8 @@
 | SIX
 | EIGHT</p>
 
-<p>let of_i = &#8230;
-let to_i = &#8230;
+<p>let of_i = …
+let to_i = …
 end</p>
 
 <h2 id="typedef-format">typedef format</h2>
@@ -120,17 +120,17 @@
 raise (Xception.E (new Xception.t))
 and
 try
-  &#8230;
-with Xception.E e -&gt; &#8230;</p>
+  …
+with Xception.E e -&gt; …</p>
 
 <h2 id="list-format">list format</h2>
 <p>Lists are turned into OCaml native lists.</p>
 
 <h2 id="mapset-formats">Map/Set formats</h2>
-<p>These are both turned into Hashtbl.t&#8217;s. Set values are bool.</p>
+<p>These are both turned into Hashtbl.t’s. Set values are bool.</p>
 
 <h2 id="services">Services</h2>
-<p>The client is a class &#8220;client&#8221; parametrized on input and output
+<p>The client is a class “client” parametrized on input and output
 protocols. The processor is a class parametrized on a handler. A
 handler is a class inheriting the iface abstract class. Unlike other
 implementations, client does not implement iface since iface functions
diff --git a/output/lib/st.html b/output/lib/st.html
index 01d0b25..263b86a 100644
--- a/output/lib/st.html
+++ b/output/lib/st.html
@@ -56,7 +56,7 @@
 on the tutorial .thrift files (and file in the resulting code), and
 then:</p>
 
-<p>calc := CalculatorClient binaryOnHost: &#8216;localhost&#8217; port: &#8216;9090&#8217;
+<p>calc := CalculatorClient binaryOnHost: ‘localhost’ port: ‘9090’
 calc addNum1: 10 num2: 15</p>
 
 <p>Tested in Squeak 3.7, but should work fine with anything later.</p>
diff --git a/output/test/index.html b/output/test/index.html
index 2a080ea..a2935fb 100644
--- a/output/test/index.html
+++ b/output/test/index.html
@@ -85,7 +85,7 @@
 test/test.py --server nodejs --client cpp,java
 </code></pre>
 
-<p>Another useful flag is &#8211;regex. For example, to run all tests that involve
+<p>Another useful flag is –regex. For example, to run all tests that involve
 Java TBinaryProtocol:</p>
 
 <pre><code>test/test.py --regex "java.*binary"
@@ -144,8 +144,8 @@
 <h2 id="list-of-known-failures">List of known failures</h2>
 
 <p>Since many cross tests currently fail (mainly due to partial incompatibility
-around exception handling), the test script specifically report for &#8220;not known
-before&#8221; failures.</p>
+around exception handling), the test script specifically report for “not known
+before” failures.</p>
 
 <p>For this purpose, test cases known to (occasionally) fail are listed in
 <code>known_failures_&lt;platform&gt;.json</code> where <code>&lt;platform&gt;</code> matches with python
diff --git a/output/test/keys.html b/output/test/keys.html
index a8340b8..ec8e1cb 100644
--- a/output/test/keys.html
+++ b/output/test/keys.html
@@ -80,7 +80,7 @@
 cat server.crt server.key &gt; server.pem
 </code></pre>
 
-<p>Export password is &#8220;thrift&#8221; without the quotes</p>
+<p>Export password is “thrift” without the quotes</p>
 
 <pre><code>openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12
 </code></pre>
@@ -100,7 +100,7 @@
 <pre><code>openssl x509 -req -days 3000 -in client.csr -CA CA.pem -CAkey server.key -set_serial 01 -out client.crt
 </code></pre>
 
-<p>export certificate in PKCS12 format (Export password is &#8220;thrift&#8221; without the quotes)</p>
+<p>export certificate in PKCS12 format (Export password is “thrift” without the quotes)</p>
 
 <pre><code>openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
 </code></pre>
@@ -134,7 +134,7 @@
 </code></pre>
 
 <h2 id="java-key-and-certificate-import">Java key and certificate import</h2>
-<p>Java Test Environment uses key and trust store password &#8220;thrift&#8221; without the quotes</p>
+<p>Java Test Environment uses key and trust store password “thrift” without the quotes</p>
 
 <p>list keystore entries</p>