Restructure .gitignore file
gitignore: Restructure existing rules

Organize the rules into groups corresponding to the tools creating
these files.

Use blank lines and comments for clarity.
gitignore: Keep README and COPYING files
gitignore: Additional cmake rules
gitignore: Merge rules from po/**/.gitignore files
Remove unnecessary translation scripts

The new gitignore rules will automatically ignore these.
gitignore: Merge dozens of "Thumbs.db" rules

It suffices to apply the rule once in the root directory.
gitignore: Reduce number of false positives

Especially in utils/umc_dev/ a massive number of files matched ignore
rules. As tracked files can't be ignored, this had no real consequences.
gitignore: Fix order of rules for Makefiles

The exceptions were applied before the generic rule, thus they had
no effect.
gitignore: Block some extensions
gitignore: Merge rules from projectfiles/
gitignore: Include more rules from subdirectories

That is: data/lua/, scons/, and utils/
gitignore: Merge rules from doc/ and data/tools
Remove remove-potcdate.sin from wescamp-import

If we delete the remove-potcdate.sin scripts, we may as well remove the paragraph importing them.
Fix SDL2 compilation with scons
fix compilation
CodeBlocks project update
gui2/tchat_log: Refactor log formatting and page extents calculation

This functionality will be shared with a new Copy to Clipboard button
and its callback in the next commit, so it has to be refactored so that
we don't wind up with duplicate code. This is also why
gui2::tchat_log::model::stream_log() now has a 'raw' parameter which
defaults to 'false'.

I couldn't resist the temptation so I added some const specifications to
a few write-once variables, in particular those that ended up in
gui2::tchat_log::controller::calculate_log_line_range().

While I didn't change any existing behavior (to my knowledge, anyway), I
changed the algorithm for the 'count_of_pages' value as follows:

  // Before:
  count_of_pages = model_.count_of_pages() != 0
                   ? model_.count_of_pages()
                   : 1;
  // After:
  count_of_pages = model_.count_of_pages() >= 1
                  ? model_.count_of_pages()
                  : 1;

I don't believe model_.count_of_pages() can yield a value less than
zero, so this shouldn't alter the previous behavior in practice.
gui2/tchat_log: Add a button to copy the filtered page contents to clipboard

This copies the current contents of the dialog to clipboard. The button
currently lacks a tooltip because the tooltip has the potential to cause
map labels to glitch through the dialog when displayed (see commit
eab3e6fb646fda8cc6101a3e568c86c2b17b707f and bug #22176).
update_server: Use $HOME/source for SOURCE_ROOT

... instead of hardcoding a path in /usr. This should let server2 and
server3 use an unmodified copy of the script.