diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..6129f8f
Binary files /dev/null and b/.DS_Store differ
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..5a1981d
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+* linguist-vendored
+*.py linguist-vendored=false
diff --git a/.gitignore b/.gitignore
index 072940e..e8ebad7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
*.pyc
-*.html
+//*.html
*.exe
_out_.txt
*~
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..de288e1
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "python.formatting.provider": "black"
+}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a32513a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+cpp-fqa
+=======
+
+_All the vitriol from the original cpp-fqa ported to Python3_
+
+NEW: Saves the generated html files in their own /html directory to keep everything tidy.
+
+
+FAQ Lite: http://www.parashift.com/c++-faq-lite
+
+FQA Lite: http://yosefk.com/c++fqa/
+
+Super FAQ: http://isocpp.org/faq
diff --git a/assign.fqa b/assign.fqa
index 0dca788..d11de7c 100644
--- a/assign.fqa
+++ b/assign.fqa
@@ -34,7 +34,7 @@ YetAnotherSoCalledSmartPointer& YetAnotherSoCalledSmartPointer::operator=(const
Self assignment will first delete |_p|, and then dereference it, which is nasty. And it is all /your/ fault - you
should have handled self assignment!
-FQA: Oh, so it's my fault, isn't it? Then why isn't this question listed in any other programming language FAQ on the planet?
+FQA: Oh, so it's my fault, is it? Then why isn't this question listed in any other programming language FAQ on the planet?
I mean, it's the same me all the time, it's the languages that are different. So why don't we lose the feelings of guilt
and check what it is about C++ that causes the problem?
diff --git a/defective.fqa b/defective.fqa
index aa36a53..03fe4c4 100644
--- a/defective.fqa
+++ b/defective.fqa
@@ -113,7 +113,7 @@ But if we leave the claims about being object-oriented aside, the fact that a la
check things at run time to prevent illegal operations, which translates to a certain (though frequently overestimated)
performance penalty. So when performance isn't that important, a managed environment is the way to go.
But when it's critical, you just have to deal
- with the difficulties in debugging. However, C++ (compared to C, for example) makes /that/ much harder that it already has to be, because there are...
+ with the difficulties in debugging. However, C++ (compared to C, for example) makes /that/ much harder than it already has to be, because there are...
`
No binary implementation rules
`
@@ -177,7 +177,7 @@ In C++, we have standard and compiler-specific built-in types, structures, enume
multiple, virtual and non-virtual inheritance, |const| and |volatile| qualifiers, pointers, references and arrays,
|typedef|s, global and member functions and function pointers, and /templates/, which can have specializations on (again) /types/ (or integral constants),
and you can "partially specialize" templates by /pattern matching their type structure/
- (for example, have a specialization for |std::vector >| for arbitrary values of |T|), and each template can have base classes
+ (for example, have a specialization for |std::vector >| for arbitrary values of |T|), and each template can have base classes
(in particular, it can be /derived from its own instantiations recursively/, which is a /well-known practice documented
in books/), and inner |typedef|s, and... We have lots of kinds of types.
diff --git a/faq.fqa b/faq.fqa
index 62a2731..96ee4bd 100644
--- a/faq.fqa
+++ b/faq.fqa
@@ -31,7 +31,7 @@ of articles replying to other articles make sense some of the time. Comment thre
Special case: Usenet conversations are futile. If they are moderated, they are futile and (almost) polite.
An example of a futile, (almost) polite discussion of the C++ FQA can be found in
-[http://groups.google.co.il/group/comp.lang.c++.moderated/browse_frm/thread/870d15c57e831fc5/5868fd6e57f6ae2c?hl=en&tvc=1#5868fd6e57f6ae2c this comp.lang.c++.moderated thread]. For some reason, several people
+[http://groups.google.co.il/group/comp.lang.c++.moderated/browse_frm/thread/870d15c57e831fc5/5868fd6e57f6ae2c?hl=en&tvc=1#5868fd6e57f6ae2c this comp.lang.c++.moderated thread]. For some reason, several people
well-known in the C++ community decided to have a bunch of off-topic arguments in that thread
(like how bad it is that some obscure features are going into C++0x and other obscure features aren't).
Off-topic and futile, but amusing and (almost) polite.
diff --git a/fqa2html.py b/fqa2html.py
index 5cf46db..9224462 100644
--- a/fqa2html.py
+++ b/fqa2html.py
@@ -1,361 +1,416 @@
-#!/opt/python-2.3.5_mob/bin/python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-'''convert a C++ FQA page to HTML'''
+"""convert a C++ FQA page to HTML"""
import sys
import re
import os
-site = os.environ.get('FQA_SITE','') #'http://geocities.com/yossi_kreinin/'
+site = os.environ.get("FQA_SITE", "") #'http://geocities.com/yossi_kreinin/'
# in October 2007, parashift.com disappeared from the DNS
-faq_site = 'http://www.parashift.com/c++-faq-lite'
-#faq_site = 'http://www.dietmar-kuehl.de/mirror/c++-faq'
-#faq_site = 'http://www.ensta.fr/~diam/c++/online/c++-faq-lite'
-
-style = '''
-
-'''
+faq_site = "http://www.parashift.com/c++-faq-lite"
+# faq_site = 'http://www.dietmar-kuehl.de/mirror/c++-faq'
+# faq_site = 'http://www.ensta.fr/~diam/c++/online/c++-faq-lite'
+
+style = """"""
import time
import datetime
-ga = open('ga.js').read()
-end_of_doc = '''
+
+hga = open("ga.js")
+ga = hga.read()
+hga.close()
+end_of_doc = """
-Copyright \xc2\xa9 2007-%d Yossi Kreinin
+Copyright © 2007-%d Yossi Kreinin
revised %s
%s