715e2acf2dd9ef6106cc42ce79c724e1e52ad62e
braney
  Thu Mar 12 09:14:28 2026 -0700
NoDots MAF alignment display for hgc mafClick, with i-row preservation and mafFrag -noDots flag

hgMaf.c: add hgMafFragHelperNoDots and public wrappers (hgMafFragNoDots,
hgBigMafFragNoDots, hgMafFragFromMafListNoDots) that return a list of maf
blocks containing only species with actual sequence — no dot-filled rows.
Blocks are broken when the species set changes; gaps between same-species
blocks are filled with native sequence for the reference and dashes for
others.  Preserve i-row data (leftStatus/rightStatus/leftLen/rightLen)
through the NoDots path so insert annotations appear in emitted blocks.
hgMaf.h: declare the new NoDots public functions.
mafClick.c: use NoDots path when mafClickMafFrag is enabled.  Fix block
numbering (aliIx was never incremented in useMafFrag path).  Use full
textSize for NoDots line width.  Use dots instead of spaces in diff mode
for both paths.  Fix species label width computation to check labelHash
consistently so long assembly names don't misalign sequences.  Strip
ref gap columns where no other species has sequence.
mafFrag: add -noDots option to invoke hgMafFragNoDots from the command line,
with 4 new tests (noDots, noDotsRev, noDotsOutName, noDotsLarger).
refs #21477

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

diff --git src/hg/ratStuff/mafFrag/tests/makefile src/hg/ratStuff/mafFrag/tests/makefile
index d532137a413..c742601c9e1 100644
--- src/hg/ratStuff/mafFrag/tests/makefile
+++ src/hg/ratStuff/mafFrag/tests/makefile
@@ -1,35 +1,51 @@
 kentSrc = ../../../..
 include ${kentSrc}/inc/common.mk
 
 MAFFRAG = ${DESTDIR}${BINDIR}/mafFrag
 
 all::
 
-test:: basicTest revStrandTest outNameTest smallTest largerTest
+test:: basicTest revStrandTest outNameTest smallTest largerTest noDotsTest noDotsRevTest noDotsOutNameTest noDotsLargerTest
 	@echo "All mafFrag tests passed."
 
 mkdirs:
 	@${MKDIR} output
 
 basicTest: mkdirs
 	${MAFFRAG} hg38 multiz100way chr1 11000 11100 + output/$@.maf
 	diff expected/basic.maf output/$@.maf
 
 revStrandTest: mkdirs
 	${MAFFRAG} hg38 multiz100way chr1 11000 11100 - output/$@.maf
 	diff expected/revStrand.maf output/$@.maf
 
 outNameTest: mkdirs
 	${MAFFRAG} hg38 multiz100way chr1 11000 11100 + -outName=testSeq output/$@.maf
 	diff expected/outName.maf output/$@.maf
 
 smallTest: mkdirs
 	${MAFFRAG} hg38 multiz100way chr1 11000 11010 + output/$@.maf
 	diff expected/small.maf output/$@.maf
 
 largerTest: mkdirs
 	${MAFFRAG} hg38 multiz100way chr1 100000 100500 + output/$@.maf
 	diff expected/larger.maf output/$@.maf
 
+noDotsTest: mkdirs
+	${MAFFRAG} hg38 multiz100way chr1 11000 11100 + -noDots output/$@.maf
+	diff expected/noDots.maf output/$@.maf
+
+noDotsRevTest: mkdirs
+	${MAFFRAG} hg38 multiz100way chr1 11000 11100 - -noDots output/$@.maf
+	diff expected/noDotsRev.maf output/$@.maf
+
+noDotsOutNameTest: mkdirs
+	${MAFFRAG} hg38 multiz100way chr1 11000 11100 + -noDots -outName=testSeq output/$@.maf
+	diff expected/noDotsOutName.maf output/$@.maf
+
+noDotsLargerTest: mkdirs
+	${MAFFRAG} hg38 multiz100way chr1 100000 100500 + -noDots output/$@.maf
+	diff expected/noDotsLarger.maf output/$@.maf
+
 clean::
 	rm -rf output