2008-09-18 18 views
7

Estoy escribiendo un editor usando Scintilla.¿Cómo puedo resaltar el texto en Scintilla?

Ya estoy usando un Lexer para hacer resaltado de sintaxis automático, pero ahora me gustaría marcar los resultados de búsqueda. Si quiero marcar solo un hit, puedo establecer la selección, sin embargo, me gustaría marcar (por ejemplo, con fondo amarillo) todos los hits.

Estoy escribiendo esto en Perl, pero si tiene sugerencias en otros idiomas, sería genial también.

Respuesta

2

El editor de "muestra" utiliza la función de marcador para marcar todas las líneas que coincidan con el resultado de la búsqueda.

9

¿Has leído Markers reference in Scintilla doc? Esta referencia puede ser un poco oscura, por lo que recomiendo echar un vistazo al código fuente de SciTE también. Este editor de texto fue originalmente un banco de pruebas para Scintilla. Creció hasta convertirse en un editor de pleno derecho, pero sigue siendo una buena referencia de implementación para todo lo relacionado con Scintilla.

En nuestro caso particular, hay un botón Marcar todo en el cuadro de diálogo Buscar. Puede encontrar su implementación en el método SciTEBase :: MarkAll(). Este método solo realiza un bucle en los resultados de la búsqueda (hasta que se repite en el primer resultado de la búsqueda, si corresponde) y coloca un marcador en las líneas encontradas (y opcionalmente establece un indicador en los elementos encontrados). La línea encontrada se obtiene utilizando SCI_LINEFROMPOSITION (posFound), el marcador es solo una llamada a SCI_MARKERADD (lineno, markerBookmark). Tenga en cuenta que la marca puede ser un símbolo en un margen, o si no está asociado a un margen, resaltará toda la línea.

HTH.

1

Utilicé Indicators para resaltar los resultados de búsqueda.

Cuestiones relacionadas