iselp50
clone your own copy | download snapshot

Snapshots | iceberg

No images in this repository’s iceberg at this time

Inside this repository

combine-indexes.py
text/x-python

Download raw (2.8 KB)

import glob
import json
import sys
import locale
locale.setlocale(locale.LC_ALL, "")

index = {}

inpatt = sys.argv[1] if len(sys.argv) > 1 else 'index-*.json'
outpath = sys.argv[2] if len(sys.argv) > 2 else 'index.json'
outpath_html = outpath + '.html'

for path in glob.glob(inpatt):
  local_index = json.load(open(path, 'r'))

  for k in local_index:
    if k in index:
      index[k] = sorted(set(index[k] + local_index[k]))
    else:
      index[k] = sorted(set(local_index[k]))


with open(outpath, 'w') as out:
  json.dump(index, out, ensure_ascii=False)

print('Wrote {}'.format(outpath))

######
# Templates for generated html

global_template = """
  <div id="my-toc-content" style="display:none;"></div>
  <div class="cartouche">
  <p class="cartouche-titre">Index</p>
  </div>
  <section class="index-body">
     <p class="cartouche-role">Cet index inclus les noms propres cités dans la publication, hormis ceux de la liste de cours, conférences et colloques et de la liste des expositions.</p>
    {index}
  </section>
"""

index_letter_template = """
  <div id="{letter}" class='lettre'><h3>{letter}</h3><span></span></div>
  <section class="index-letter-section">
    {index}
  </section>
"""

index_row_template = """
  <section class="index-row">
    <span class="index-row-key"><p>{key}</p></span>
    <section class="index-row-pagenumbers"><p>{pagenumbers}</p></section>
  </section>
"""

page_number_template = """<span class="index-page-number">{number}</span>"""

page_number_separator = ', ' # also possible to make this empty and use an :after in CSS


######
# Constructing the index

last_letter = None
letter_index = {}
letter_index_html = ""
index_html = ""

indexKeys = sorted(index.keys(), key=locale.strxfrm )



for k in indexKeys:
  current_letter = k[0].lower()

  if last_letter != current_letter:
    if letter_index_html:
      index_html += index_letter_template.format(letter=last_letter, index=letter_index_html)
      letter_index_html = ""

  pagenumbers_html = page_number_separator.join([page_number_template.format(number=number) for number in index[k]])
  index_row_html = index_row_template.format(key=k, pagenumbers=pagenumbers_html)

  letter_index_html += index_row_html

  last_letter = current_letter

index_html += index_letter_template.format(letter=last_letter, index=letter_index_html)

body = global_template.format(index=index_html)

#######
# Write to an html file

with open("header.html", "r", encoding="utf-8") as input_file:
    h = input_file.read()
    # Insert id in header based on filename
    h = h.replace("{{ id }}",  "index")

with open("footer.html", "r", encoding="utf-8") as input_file:
    f = input_file.read()

with open(outpath_html, "w", encoding="utf-8") as o:
  o.write('{header} {body} {footer}'.format(header=h, body=body, footer=f))

print('Wrote {}'.format(outpath_html))