Commit 2bf10c26 authored by Miguel Angel Reina Ortega's avatar Miguel Angel Reina Ortega
Browse files

Some fixes for tables without header

parent 5b50a6f7
Loading
Loading
Loading
Loading
+14 −19
Original line number Diff line number Diff line
@@ -72,19 +72,6 @@ class GridCell:
					headerDelimiterIndex += 1
			else:
				raise ValueError('Invalid table formatting')
		else:
			bodyDelimiterIndex = 0
			while bodyDelimiterIndex < len(defaultAlignments) and self.position > delimiterPositions[bodyDelimiterIndex]:
				bodyDelimiterIndex += 1
			if bodyDelimiterIndex < len(defaultAlignments):
				if self.position < delimiterPositions[bodyDelimiterIndex]:
					self.alignment = defaultAlignments[bodyDelimiterIndex]
				elif self.position == delimiterPositions[bodyDelimiterIndex]:
					self.alignment = defaultAlignments[bodyDelimiterIndex]
					bodyDelimiterIndex += 1
			else:
				raise ValueError('Invalid table formatting')

	
	def __str__(self):
		return f'(Content: {self.content}, Rowspan: {self.rowspan}, Colspan: {self.colspan}, Alignment: {self.alignment}, Position: {self.position}, ListFlag: {self.listFlag}, AuxiliarIndex: {self.auxiliarIndex})'
@@ -322,20 +309,28 @@ def parseGridTableWithSpans(gridTable:str) -> tuple[GridTableRowList, GridTableR
				headerDelimiterPositions.append(min(delPositions) if delPositions else -1)

	if not hasHeader:
		#Set default alignments from the first separator
		# Set default alignments from the first separator which takes the role of header
		hasHeader = True
		headerSeparatorIndex = 0
		parts = re.split(r'\+', lines[0].strip('+'))
		defaultAlignments = []

        # Calculate default alignments and positions of delimiters
		for part_index in range(len(parts)):
			if parts[part_index].startswith(':') and not parts[part_index].endswith(':'):
		for partIndex in range(len(parts)):
			if parts[partIndex].startswith(':') and not parts[partIndex].endswith(':'):
				defaultAlignments.append(_alignLeft)

			elif not parts[part_index].startswith(':') and parts[part_index].endswith(':'):
			elif not parts[partIndex].startswith(':') and parts[partIndex].endswith(':'):
				defaultAlignments.append(_alignRight)

			else:
				defaultAlignments.append(_alignCenter)

		    # Delimiter position
			delimiterPositionsStart = delimiterPositions[partIndex - 1] if partIndex != 0 else 0
			delPositions = [lines[index].find(delimiter, delimiterPositionsStart + 1)
                            for delimiter in '+' if delimiter in lines[index][delimiterPositionsStart + 1:]]
			headerDelimiterPositions.append(min(delPositions) if delPositions else -1)

	#Check end table delimiter alignment (not checked during the lines processing)
	if not checkDelimiterAlignment(lines[-1], delimiterPositions):
		raise ValueError(f'Misaligned delimiters in end table separator: {lines[-1]}')