Esto no son más que unas notas por si me da por seguir investigando.

La base de datos se llama books.db y está dentro de config, marcada como oculta.

La tabla "Tags" contiene los subrayados y anotaciones, entre otras cosas que no sé lo que son ni me importan.

El subrayado es un JSON almacenado en el campo Val, parece que precedido por dos registros anteriores, uno que contiene otro JSON con algunos metadatos sobre la posición y otro más con "note" como valor de Val. Si hay texto escrito aparte del subrayado, otro JSON en el campo Val, con la anotación en si.

Hay más campos:

OID es un campo incremental que con toda seguridad es el ID para construir maestro-detalle.

ItemId es el busilis del asunto. En la anotación es 62, y si nos vamos a la tabla Files, ItemID=BookID, lo que me parece una jilipollez y un error de diseño de la base de datos, porque deberían llamarse igual, pero a partir de ahí sabemos a qué libro pertenece la anotación.

Y finalmente TagID, que es el tipo de lo que hay en Val, que sabemos son JSON con lo subrayado y/o anotado. En el caso que nos ocupa, los valores son:

101 para el "anchor", 102 para la palabra "note", 103 para el subrayado, 104 para la anotación que hemos hecho.

En la tabla TagNames, buscamos por el campo OID los valores de arriba y tenemos más info:

"101" "bm.book_mark" "6"
"102" "bm.type" "5"
"103" "bm.subtype" "5"
"104" "bm.quotation" "6"

Y aquí la cosa vuelve a tocarme los OO porque parece simplemente una estructura de datos volcada en la base de datos... Y nos paramos, porque realmente no necesitamos más.

"SELECT tag.Val, file.Name from Tags tag, Files file where Files.BookID=Tags.ItemID and Tag.TagID=103" para listar los subrayados. O algo así, lo he escrito de cabeza. A partir de aquí, es cuestión de hacer un script para sacar los datos, que es de lo que no tengo ganas...