dail8859 / dail8859/LuaScript

OnStyle callback is never called (confirmed also in the example file)

Abierto
#108 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C
Estrellas
129
Forks
24
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

**[CustomStyle.lua](https://github.com/dail8859/LuaScript/blob/a4dd230779d099f16962bc4c00f465a7d58e36d9/examples/StyleCustom.lua) example file**

```lua
--[[ An example file

proc clip(int a)
« Clip into the positive zone »
if (a > 0) a
0
end
]]

-- Define style numbers
S_DEFAULT = 0
S_IDENTIFIER = 1
S_KEYWORD = 2
S_UNICODECOMMENT = 3

-- Anytime a file is switched, check to see if it needs styled
npp.AddEventHandler("OnSwitchFile", function(filename, bufferid)
if npp:GetExtPart() == ".abc" then
-- Add the event handler for our custom style function
npp.AddEventHandler("OnStyle", CustomStyle)

-- Make sure to set the lexer as a custom container
editor.Lexer = SCLEX_CONTAINER

-- Set up the styles as appropriate
editor.StyleFore[S_DEFAULT] = 0x7f007f
editor.StyleBold[S_DEFAULT] = true
editor.StyleFore[S_IDENTIFIER] = 0x000000
editor.StyleFore[S_KEYWORD] = 0x800000
editor.StyleBold[S_KEYWORD] = true
editor.StyleFore[S_UNICODECOMMENT] = 0x008000
editor.StyleFont[S_UNICODECOMMENT] = "Georgia"
editor.StyleItalic[S_UNICODECOMMENT] = true
editor.StyleSize[S_UNICODECOMMENT] = 9

-- Clear any style and re-lex the entire document
editor:ClearDocumentStyle()
editor:Colourise(0, -1)
else
-- Can remove the handler if it's not needed
npp.RemoveEventHandler("OnStyle", CustomStyle)
end

return false
end)

-- Style the document. Handles UTF-8 characters
function CustomStyle(styler)
identifierCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

styler:StartStyling(styler.startPos, styler.lengthDoc, styler.initStyle)
while styler:More() do
-- Exit state if needed
if styler:State() == S_IDENTIFIER then
if not identifierCharacters:find(styler:Current(), 1, true) then
identifier = styler:Token()
if identifier == "if" or identifier == "end" then
styler:ChangeState(S_KEYWORD)
end
styler:SetState(S_DEFAULT)
end
elseif styler:State() == S_UNICODECOMMENT then
if styler:Match("»") then
styler:ForwardSetState(S_DEFAULT)
end
end

-- Enter state if needed
if styler:State() == S_DEFAULT then
if styler:Match("«") then
styler:SetState(S_UNICODECOMMENT)
elseif identifierCharacters:find(styler:Current(), 1, true) then
styler:SetState(S_IDENTIFIER)
end
end

styler:Forward()
end
styler:EndStyling()
end
```

1. This source defines a function for callback `OnSwitchFile`. It declares to call `CustomStyle` for the event `OnStyle` if the file extension is `abc`.
2. My understanding is that ``editor:Colourise(0, -1)`` should lead to invocation of callback `OnStyle`.
3. Handling the callback ``OnStyle`` and thus calling `CustomStyle` should colorize the document as a consequence.
4. By adding `print()` statements and opening the Lua Console, one can observe which functions are actually run.

**Expected behavior:**

1. Callback `OnSwitchFile` is handled.
2. Callback `OnStyle` is handled.

**Actual behavior:**

1. Callback `OnSwitchFile` is handled.
2. Callback `OnStyle` is never handled, thus the function `CustomStyle` is never called.

This can be confirmed by the resulting styling. The given example document (stored with a filepath ending with `.abc`) leads to the following coloring:

![clip](https://github.com/user-attachments/assets/b9c5c810-130b-4305-849d-4efdfd15b11e)

This coloring (every foreground text color is purple) can be explained by the ``editor.StyleFore[S_DEFAULT] = 0x7f007f`` which is run and sets the default color to purple. But the actual styling function `CustomStyle` is not run.

**Environment:**

* Windows 10
* LuaScript v0.12 (64 bit). Lua 5.3.5
* Seems like the OnStyle handling should be triggered [here](https://github.com/dail8859/LuaScript/blob/a4dd230779d099f16962bc4c00f465a7d58e36d9/src/LuaScript.cpp#L308) but SCN_STYLENEEDED does not seem to be a received Scintilla notification.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.