Commit 44629598 authored by ankraft's avatar ankraft Committed by Miguel Angel Reina Ortega
Browse files

Optionally (default: true) remove hanging paragraphs from clauses with sub-clauses

parent 53875876
Loading
Loading
Loading
Loading
+15 −2
Original line number Original line Diff line number Diff line
@@ -275,12 +275,13 @@ def splitMarkdownDocument(clauses:list[Clause],
	return outClauses
	return outClauses




def prepareForMkdocs(clauses:list[Clause]) -> list[Clause]:
def prepareForMkdocs(clauses:list[Clause], includeHangingParagraphs:bool = False) -> list[Clause]:
	"""	Prepare the clauses for MkDocs. This includes removing the heading
	"""	Prepare the clauses for MkDocs. This includes removing the heading
		from the clauses and marking the clauses that are only for navigation.
		from the clauses and marking the clauses that are only for navigation.


		Args:
		Args:
			clauses: The list of clauses.
			clauses: The list of clauses.
			includeHangingParagraphs: Include hanging paragraphs in the output.
		
		
		Returns:
		Returns:
			The list of clauses.
			The list of clauses.
@@ -298,6 +299,17 @@ def prepareForMkdocs(clauses:list[Clause]) -> list[Clause]:
			while clause.linesCount > 0 and clause.lines[0].text.strip() == '':
			while clause.linesCount > 0 and clause.lines[0].text.strip() == '':
				clause.lines.pop(0)
				clause.lines.pop(0)
	
	
	# Detect and handle hanging paragraphs. This is extra text in a clause, which
	# has sub-clauses. This text is not allowed in oneM2M specifications.
	for i, clause in enumerate(clauses):
		if clause.level > 0 and clause.linesCount > 0:
			# Check if there is a sub-clause in the next clause
			if i + 1 < len(clauses) and clauses[i+1].level > clause.level:
				# This is a hanging paragraph. Remove the text from the current clause.
				print(f'[yellow]Hanging paragraph in clause "{clause.title}" {"(removed)" if not includeHangingParagraphs else "(kept)"}')
				if not includeHangingParagraphs:
					clauses[i].lines = []

	# Repair wrong markdown for indented lines.
	# Repair wrong markdown for indented lines.
	# Add 2 spaces to existing 2-space indentions
	# Add 2 spaces to existing 2-space indentions
	for clause in clauses:
	for clause in clauses:
@@ -495,7 +507,7 @@ def processDocument(args:argparse.Namespace) -> None:
									args.include_title)
									args.include_title)
	clauses = updateLinks(clauses)
	clauses = updateLinks(clauses)
	clauses = updateNotes(clauses)
	clauses = updateNotes(clauses)
	clauses = prepareForMkdocs(clauses)
	clauses = prepareForMkdocs(clauses, args.include_hanging_paragraphs)


	# Write the clauses to files
	# Write the clauses to files
	writeClauses(clauses, document, args.title)
	writeClauses(clauses, document, args.title)
@@ -511,6 +523,7 @@ if __name__ == '__main__':
	parser.add_argument('--verbose', '-v', action = 'store_true', help = 'verbose output during processing')
	parser.add_argument('--verbose', '-v', action = 'store_true', help = 'verbose output during processing')
	parser.add_argument('--very-verbose', '-vv', action = 'store_true', help = 'very verbose output during processing')
	parser.add_argument('--very-verbose', '-vv', action = 'store_true', help = 'very verbose output during processing')
	parser.add_argument('--ignore-clause', '-ic', metavar = 'clause', nargs = '+', default = [ 'Contents', 'History' ], help = 'ignore headers in the markdown document')
	parser.add_argument('--ignore-clause', '-ic', metavar = 'clause', nargs = '+', default = [ 'Contents', 'History' ], help = 'ignore headers in the markdown document')
	parser.add_argument('--include-hanging-paragraphs', '-ihp', action = 'store_true', default = False, help = 'include hanging paragraphs (text in clauses with sub-clauses) in the output files')
	parser.add_argument('--include-title', '-it', action = 'store_true', help = 'include the content before the first heading in the output files as "0.md"')
	parser.add_argument('--include-title', '-it', action = 'store_true', help = 'include the content before the first heading in the output files as "0.md"')
	parser.add_argument('--split-level', '-sl', metavar = 'level', type = int, default = 2, help = 'on which level to split clauses to separate files')
	parser.add_argument('--split-level', '-sl', metavar = 'level', type = int, default = 2, help = 'on which level to split clauses to separate files')
	parser.add_argument('--media-directory', '-md', metavar = 'media-directory', default = 'media', help = 'directory name where media files are stored')
	parser.add_argument('--media-directory', '-md', metavar = 'media-directory', default = 'media', help = 'directory name where media files are stored')