Pregunta

Estoy utilizando "ExuberantCtags", también conocido como "ctags -e", también conocido simplemente como "etags"

y estoy tratando de entender el formato de fichero de etiquetas que se genera por las etags mandar, en particular, quiero entender la línea # 2 del fichero de etiquetas.

Wikipedia dice que línea # 2 se describe así:

{src_file},{size_of_tag_definition_data_in_bytes}

En la práctica sin embargo fichero línea TAGS: 2 para las miradas "Foo.c" como éste

foo.c,1683

Mi dilema es cómo es exactamente lo que encontrar este número: 1683

Sé que es el tamaño de la "tag_definition" así que lo que quiero saber es lo que es la "tag_definition"?

He intentado mirar a través del ctags código fuente , pero tal vez alguien mejor en C que yo tendré más éxito calcular esto.

Gracias!

EDITAR # 2:

^L^J
hello.c,79^J
float foo (float x) {^?foo^A3,20^J
float bar () {^?bar^A7,59^J
int main() {^?main^A11,91^J

Muy bien, así que si he entendido bien, "79" se refiere al número de bytes en el archivo de etiquetas de después de 79 hasta e incluyendo "91 ^ J".

tiene mucho sentido.

Ahora los números 20, 59, 91 en este ejemplo wikipedia dice consulte la {byte_offset}

¿Cuál es el {} byte_offset desplazamiento desde?

Gracias por toda la ayuda Ken!

¿Fue útil?

Solución

Es el número de bytes de datos de la etiqueta después de la nueva línea después del número.

Edit: También no incluye el carácter ^ L entre los datos de identificación de ficheros. Recuerde etags proviene de una época hace tiempo en la lectura de un archivo de 500 KB fue una operación costosa. ;)

Aquí hay un archivo de etiquetas completa. Estoy mostrando que dos caminos, el primero con caracteres de control como ^ X y no hay caracteres invisibles. Los caracteres de fin de línea implícitas en su ejemplo son ^ J aquí:

^L^J
hello.cc,45^J
int main(^?5,41^J
int foo(^?9,92^J
int bar(^?13,121^J
^L^J
hello.h,15^J
#define X ^?2,1^J

Este es el mismo archivo está representada en hexadecimal:

0000000    0c  0a  68  65  6c  6c  6f  2e  63  63  2c  34  35  0a  69  6e
          ff  nl   h   e   l   l   o   .   c   c   ,   4   5  nl   i   n
0000020    74  20  6d  61  69  6e  28  7f  35  2c  34  31  0a  69  6e  74
           t  sp   m   a   i   n   ( del   5   ,   4   1  nl   i   n   t
0000040    20  66  6f  6f  28  7f  39  2c  39  32  0a  69  6e  74  20  62
          sp   f   o   o   ( del   9   ,   9   2  nl   i   n   t  sp   b
0000060    61  72  28  7f  31  33  2c  31  32  31  0a  0c  0a  68  65  6c
           a   r   ( del   1   3   ,   1   2   1  nl  ff  nl   h   e   l
0000100    6c  6f  2e  68  2c  31  35  0a  23  64  65  66  69  6e  65  20
           l   o   .   h   ,   1   5  nl   #   d   e   f   i   n   e  sp
0000120    58  20  7f  32  2c  31  0a                                    
           X  sp del   2   ,   1  nl

Hay dos conjuntos de datos de la etiqueta en este ejemplo:. 45 bytes de datos para hello.cc y 15 bytes para hello.h

Los datos hello.cc se inicia en la línea siguiente "hello.cc, 45 ^ J" y carreras para 45 bytes - esto también pasa a ser líneas completas. La razón por la cual se dan bytes es tan código de lectura del archivo solo puede asignar espacio para una cadena de 45 bytes y leer 45 bytes. La línea "^ L ^ J" es después de los 45 bytes de datos de la etiqueta. Se utiliza esto como un marcador que hay más archivos restantes y también para comprobar que el archivo tiene el formato correcto.

Los datos hello.h se inicia en la línea siguiente "hello.h, 15 ^ J" y se ejecuta durante 15 bytes.

Otros consejos

El byte_offset {} para una entrada de etiqueta es el número de bytes desde el comienzo del archivo de la función se define. El número antes del desplazamiento de bytes es el número de línea. En su ejemplo:

hello.c,79^J
float foo (float x) {^?foo^A3,20^J

la función foo comienza 20 bytes desde el comienzo del hola.c. Se puede comprobar que con un editor de texto que muestra la posición del cursor en el archivo. También puede utilizar el comando de la cola de Unix para mostrar un archivo de un número de bytes en:

tail -c +20 hello.c
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top