1#!python 2# 3# Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 4# 5# SPDX-License-Identifier: BSD-2-Clause 6# 7 8import sys 9import re 10 11 12def strip_comments(s): 13 s2 = '' 14 d = 0 15 quote = False 16 i, l = 0, len(s) 17 while i < l: 18 if quote == False and s[i:i+2] == '(*': 19 d += 1 20 i += 2 21 elif quote == False and s[i:i+2] == '*)' and d > 0: 22 d -= 1 23 i += 2 24 else: 25 if d == 0: 26 s2 += s[i] 27 if quote == s[i]: 28 quote = False 29 elif s[i] in ['"', "'"]: 30 quote = s[i] 31 i += 1 32 return s2 33 34 35def unquote(s): 36 if s[:1] == '"' and s[-1:] == '"': 37 return s[1:-1] 38 return s 39 40 41def get(dir): 42 sessions = [] 43 try: 44 root = strip_comments(''.join(open(dir + '/ROOT').readlines())) 45 sessions += [unquote(s) for s in re.findall('session\s+("[^"]*"|\S+)', root)] 46 except IOError: 47 pass 48 try: 49 roots = [l.strip() for l in open(dir + '/ROOTS').readlines() if l.strip()[:1] != '#'] 50 for dir2 in roots: 51 sessions += get(dir + '/' + dir2) 52 except IOError: 53 pass 54 return sessions 55 56 57if '-h' in sys.argv or '--help' in sys.argv: 58 print('Usage: %s DIRS...' % sys.argv[0]) 59 print('Print Isabelle session names defined in DIRS.') 60else: 61 sessions = [] 62 for dir in sys.argv[1:]: 63 sessions += get(dir) 64 print('\n'.join(sessions)) 65