From 6253daa83d11aa07027476d05b4385295c3fe944 Mon Sep 17 00:00:00 2001 From: "B. Stack" Date: Thu, 7 Apr 2022 09:43:17 -0400 Subject: fix #29: add functions to scite stackrpms.lua --- scite-fedora/stackrpms.lua | 278 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 scite-fedora/stackrpms.lua (limited to 'scite-fedora/stackrpms.lua') diff --git a/scite-fedora/stackrpms.lua b/scite-fedora/stackrpms.lua new file mode 100644 index 0000000..8423feb --- /dev/null +++ b/scite-fedora/stackrpms.lua @@ -0,0 +1,278 @@ +-- DESCRIPTION: +-- Unicode hexadecimal table: https://example.com/copied/unicode.html +-- Source: http://lua-users.org/wiki/SciteUnicodeInput http://sourceforge.net/projects/emitunicodeinscite/ +-- Future reference: http://lua-users.org/wiki/SciteScripts +-- +-- This lua script adds utf8 unicode input, to the scite text editor. +-- +-- The scite text editor should be set to use the UTF-8 encoding +-- , because this script adds utf8, into the text buffer of the +-- scite editor. Select File->Encoding->UTF-8, from the +-- menu bar of scite. +-- +-- For example, it will be possible that you type 2200 CTRL+U +-- , and 2200 is replaced to ∀; (U+2200), in the scite editor. +-- +-- ______________________________________________________________________________ +-- +-- INSTALL: +-- +-- To have scite running this script each time you press Ctrl+U, add next lines +-- into your ~/SciTEUser.properties file, where ~ is your home directory. +-- FILE ~/SciTEUser.properties: +--[[ +ext.lua.startup.script=$(SciteUserHome)/emitUtf8UnicodeIntoTheSciteEditor.lua +command.name.8.*=Emit UTF8 Unicode +command.subsystem.8.*=3 +command.8.*=emitUtf8UnicodeIntoTheSciteEditor +command.mode.8.*=savebefore:no +command.shortcut.8.*=Ctrl+U +--]] +-- ______________________________________________________________________________ +-- THE LUA CODE: +-- +-- Next is the definition of the lua function that is called by scite +-- when CTRL+U is pressed, to replace unicode endpoint encoding, with +-- utf8 encoding of the unicode endpoint. +-- ______________________________________________________________________________ + + +-- Computes the utf8 encoding for a unicode codepoint u +-- , when 0 <= u <= 0x7f +-- +-- @param unicodeValue the unicode codepoint u +-- +-- @return the utf8 encoding of the unicode codepoint u +function case1UnicodeToUtf8(unicodeValue) + --print('case 1') + local u = unicodeValue + local byte0 = (u % 0x80) + local utf8 = string.char(byte0) + return utf8 +end + +-- ______________________________________________________________________________ +-- Computes the utf8 encoding for a unicode codepoint u +-- , when 0x80 <= u <= 0x7ff +-- +-- @param unicodeValue the unicode codepoint u +-- +-- @return the utf8 encoding of the unicode codepoint u +function case2UnicodeToUtf8(unicodeValue) + --print('case 2') + local u = unicodeValue + local byte1 = (0x80 + (u % 0x40) ) + u = math.floor(u / 0x40) + local byte0 = (0xc0 + (u % 0x20) ) + local utf8 = string.char(byte0, byte1) + return utf8 +end + +-- ______________________________________________________________________________ +-- Computes the utf8 encoding for a unicode codepoint u +-- , when 0x800 <= u <= 0xffff. +-- +-- @param unicodeValue the unicode codepoint u +-- +-- @return the utf8 encoding of the unicode codepoint u +function case3UnicodeToUtf8(unicodeValue) + local u = unicodeValue + local byte2 = (0x80 + (u % 0x40)) + -- print('byte2: '..byte2) + u = math.floor(u / 0x40) + local byte1 = (0x80 + (u % 0x40)) + -- print('byte1: '..byte1) + u = math.floor(u / 0x40) + local byte0 = (0xe0 + (u % 0x10)) + -- print('byte0: '..byte0) + local utf8 = string.char(byte0, byte1, byte2) + return utf8 +end + +-- ______________________________________________________________________________ +-- Computes the utf8 encoding for a unicode codepoint u +-- , when 0x10000 <= u <= 0x10ffff. +-- +-- @param unicodeValue the unicode codepoint u +-- +-- @return the utf8 encoding of the unicode codepoint u +function case4UnicodeToUtf8(unicodeValue) + local u = unicodeValue + local byte3 = (0x80 + (u % 0x40)) + u = math.floor(u / 0x40) + local byte2 = (0x80 + (u % 0x40)) + u = math.floor(u / 0x40) + local byte1 = (0x80 + (u % 0x40)) + u = math.floor(u / 0x40) + local byte0 = (0xf0 + (u % 0x8)) + local utf8 = string.char(byte0, byte1, byte2, byte3) + return utf8 +end + +-- ______________________________________________________________________________ +-- Converts a unicode integer value, into a utf8 string value. +-- +-- The unicode integer value is an integer that +-- is greater than or equal to zero. +-- +-- The utf8 string value is a string that is a sequence of +-- 8 bits characters that give the utf8 encoding of the +-- unicode codepoint given by the unicode integer value. +-- +-- @param unicodeValue the unicode integer value; +-- a unicode codepoint +-- +-- @return the utf8 encoding of the unicode codepoint +-- provided by the unicodeValue input argument +function unicodeToUtf8(unicodeValue) + local u = unicodeValue + if ((0x800 <= u) and (0xffff >= u)) + then + return case3UnicodeToUtf8(u) + end + if ((0x80 <= u) and (0x7fff >= u)) + then + return case2UnicodeToUtf8(u) + end + if ((0x0 <= u) and (0x7f >= u)) + then + return case1UnicodeToUtf8(u) + end + if( (0x10000 <= u) and (0x10ffff >= u) ) + then + return case4UnicodeToUtf8(u) + end + return nil +end + +-- ______________________________________________________________________________ +-- Peeks (reads) the character at position i, in the Scite Editor. +-- If the character is the ascii name of a hex digit, it returns +-- the corresponding hex digit, otherwise it returns nil. +-- +-- @param i position in the Scite Editor +-- @return hex digit at position i, or nil +function peekHexdigit(i) + local e = editor + local asciiCode = e.CharAt[i] + if((0>asciiCode) or (0xff < asciiCode)) + then + return nil + end + local charValue = string.char(asciiCode) + local hexDigit = tonumber(charValue,0x10) + return hexDigit -- may be nil +end + +-- ______________________________________________________________________________ +-- Reads the sequence of maximum length at most 5, at the left of the cursor +-- in the Scite Editor. +-- Encodes the longest suffix of this sequence, that is a hex number, into +-- the utf encoding of this hex number. +-- Replaces this longest suffix, with the utf8 sequence. +-- +-- @return true a suffix of length greater than zero, at most 5 existed +-- and was replaced with the utf8 encoding of the number it +-- represented +-- +-- false , when no such suffix existed +function emitUtf8Unicode() + local e = editor + local n = e.TextLength + local i = e.CurrentPos + local maxlen = 5 + if ((0 == n) or (1 > i)) + then + return nil -- Success. No request + end + local len = 1 + local len2 = 0 + local u = 0 + local thePower = 1 + while ( (len <= maxlen) + and (0 <= (i - len) ) + ) + do + local hexDigit = peekHexdigit(i-len,u) + if (nil == hexDigit) + then + break -- out of the while loop + end + u = ( u + (thePower * hexDigit) ) + thePower = (0x10 * thePower ) + len2 = len + --print("u: "..u) + len = len + 1 + end + if (0 == len2) + then + return nil -- Failure. No unicode + end + utf8 = unicodeToUtf8(u) + if(nil == utf8) + then + return nil -- Failure. Unicode to utf8 conversion failed. + end + e:SetSel(i-len2,i) + e:ReplaceSel(utf8) + --print("utf8: "..utf8) + return true -- Success. +end + +-- ______________________________________________________________________________ +-- Emits utf8 encoding in the place of the unicode codepoint +-- in the editor, at the left of the cursor. +-- +-- Writes a message to the Output pane, if no codepoint existed +-- at the left of the cursor. +-- +function emitUnicode() + local ok = emitUtf8Unicode() + if not ok + then + --print("Failed to encode unicode into text editor.") + end +end + +-- ______________________________________________________________________________ +-- +-- Following web pages were useful in writing the lua scite script. +-- +-- http://lua-users.org/wiki/UsingLuaWithScite +-- http://www.scintilla.org/PaneAPI.html +-- http://www.lua.org/manual/5.1/manual.html#pdf-tonumber +-- https://en.wikipedia.org/wiki/UTF-8 +-- +-- http://lua-users.org/lists/lua-l/2007-08/msg00276.html +-- http://keplerproject.github.io/luadoc/ + +-- Reference: http://lua-users.org/wiki/SciteInsertDate +-- Tags used by os.date: +-- %a abbreviated weekday name (e.g., Wed) +-- %A full weekday name (e.g., Wednesday) +-- %b abbreviated month name (e.g., Sep) +-- %B full month name (e.g., September) +-- %c date and time (e.g., 09/16/98 23:48:10) +-- %d day of the month (16) [01-31] +-- %H hour, using a 24-hour clock (23) [00-23] +-- %I hour, using a 12-hour clock (11) [01-12] +-- %M minute (48) [00-59] +-- %m month (09) [01-12] +-- %p either "am" or "pm" (pm) +-- %S second (10) [00-61] +-- %w weekday (3) [0-6 = Sunday-Saturday] +-- %x date (e.g., 09/16/98) +-- %X time (e.g., 23:48:10) +-- %Y full year (1998) +-- %y two-digit year (98) [00-99] +-- %% the character '%' +function InsertDateAH() + local dow = tostring(os.date("%w") + 1) + local d1 = os.date("%Y-%m-%d-") + local d2 = os.date(" %H:%M") + editor:AddText(d1..dow..d2) +end +function InsertDateIso() + local date_string = os.date("%Y-%m-%dT%T") + editor:AddText(date_string) +end -- cgit