C²S Consulting logo
C²S Consulting | Primers | txt2tags vermatim bold

txt2tags - verbatim bold

txt2tags is an absolutely gem of a tool and I have described it in a previous primer here. One thing that annoys me a little is the Verbatim block. While I understand that the verbatium block is to ignore markdowns there is times I like to bold bits within the block. Take for example:


~$ sudo mysql -u root -p
  Enter password: mypassword
  Welcome to the MariaDB monitor.  Commands end with ; or \g.
  Your MariaDB connection id is 228
  Server version: 10.0.28-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
  
  Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
  
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
  MariaDB [(none)]> SHOW DATABASES;
  +--------------------+
  | Database           |
  +--------------------+
  | my_database        |
  | performance_schema |
  +--------------------+
  2 rows in set (0.00 sec)

Now wouldn't it be nice if the commands and the password could be bolded for emphasis. Well I think so and I have written a short program to deal with the problem. The output looks like this.


~$ sudo mysql -u root -p
  Enter password: mypassword
  Welcome to the MariaDB monitor.  Commands end with ; or \g.
  Your MariaDB connection id is 228
  Server version: 10.0.28-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

  Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  MariaDB [(none)]> SHOW DATABASES;
  +--------------------+
  | Database           |
  +--------------------+
  | my_database        |
  | performance_schema |
  +--------------------+
  2 rows in set (0.00 sec)

When writing the t2t file use an additional markdown (£££) around elements within verbatim blocks you would like bolded in the final html file. Put the txt2tags-verbatim-bold-£££.py file in the same directory. Convert the .t2t file to .html in the normal way. Then apply the txt2tags-verbatim-bold-£££.py to the newly created html file. It will create a new html file with the £££ tags removed and replaced with the html bold tags. In the example below filename.t2t is a txt2tags file which has £££ tags surrounding text within verbatim blocks to be bolded in the final output.


~ $ txt2tags --target=html filename.t2t
txt2tags wrote filename.html

~ $ ./txt2tags-verbatim-bold-£££.py filename.html 
Created new file filename-bold.html

Here is the source code for the python script.

~ $ cat txt2tags-verbatim-bold-£££.py

#! /usr/bin/env python3

"""
txt2tags-verbatim-bold-£££.py: Replaces £££ tags in verbatim sections of t2tags outputted html

This program is applied to the .html file not the .t2t file.

~ $ txt2tags --target=html filename.t2t
txt2tags wrote filename.html

~ $ ./txt2tags-verbatim-bold-£££.py filename.html
Created new file filename-bold.html

"""

__author__      = "Diarmuid O'Briain"
__copyright__   = "Copyright 2016, Diarmuid O'Briain"
__license__     = "https://www.gnu.org/licenses/gpl.txt"

import re
import os.path
import sys

# Check for file given as shell command argument

if len(sys.argv) < 2:
   print ("No file given.")
   print ("\n Usage", sys.argv[0], "<filename.html>\n")  
   sys.exit()  
elif (os.path.isfile(sys.argv[1])):
    infile = sys.argv[1]
else:
   print ("The file", sys.argv[1], "does not exist.")
   print ("\n Usage", sys.argv[0], "<filename.html>\n")
   sys.exit()

# Extract main part of filename, dropping the .html extension

matched = re.findall(r'(.*?).html', infile)

# add -bold.html to the matched main part of filename

outfile = "{}-bold.html".format(matched[0])

# Check for existance of outfile and if exists delete

if (os.path.isfile(outfile)):
    os.remove(outfile)
    print ("Removing old", outfile)
    
# Read infile line by line, find lines with '£££'

infh = open(infile, mode='r')
outfh = open(outfile, mode='w', encoding='utf-8')
for line in infh:
    if (re.search('£££(.*?)£££', line)):
        bolded = re.split("£££", line)
        outfh.write(bolded[0]+'<B>'+bolded[1]+'</B>'+bolded[2])
    else:
        outfh.write(line)

# Note to terminal of new outfile 

print("Created new file", outfile)

# Close filehandle

infh.close()
outfh.close()

# End


Copyright © 2020 C²S Consulting