Jump to content

Module:Unindent: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
rmv MIT license causing problems with autodoc
Tag: Reverted
No edit summary
Tag: Reverted
Line 2: Line 2:
--- Unindent resets the indentation level of mulitline strings.
--- Unindent resets the indentation level of mulitline strings.
-- It is useful for multiline strings inside functions and large tables.
-- It is useful for multiline strings inside functions and large tables.
-- This module serves as a utility function for string parsing, [[Global
-- Lua Modules/Testharness|Testharness]] test suites, [[Global Lua
-- Modules/I18n|I18n]] datastores.
--
-- Lua supports multiline strings in the format `[[\n...\n]]`. In general,
-- Lua supports multiline strings in the format `[[\n...\n]]`. In general,
-- Lua does not outdent indented multiline strings out of the box. Though
-- Lua does not outdent indented multiline strings out of the box. Though

Revision as of 18:41, 25 February 2025

-- <nowiki>
--- Unindent resets the indentation level of mulitline strings.
--  It is useful for multiline strings inside functions and large tables.
--  Lua supports multiline strings in the format `[[\n...\n]]`. In general,
--  Lua does not outdent indented multiline strings out of the box. Though
--  Lua supports variable indentation in multiline strings, custom logic is
--  necessary to reset the string's indentation. This module adopts a
--  flexible approach based on string scanning.
--  
--  Unlike Penlight's `pl.text.dedent` behaviour where every line has the
--  indentation of the first line removed, the line prefixed with the least
--  non-tab whitespace is reset to zero indentation. Thus, the opening line
--  of the string may retain some indentation *if* there are lines of less
--  indentation terminating the string.
--  
--  @script             unindent
--  @license            MIT
--  @release            stable
--  @author             [[wikia:c:User:8nml|8nml]]
--  @attribution        [https://github.com/kikito @kikito] ([https://github.com/kikito/inspect.lua/blob/master/spec/unindent.lua GitHub])
--  @param              {string} str Multiline string indented consistently.
--  @return             {string} Unindented string.
return function(str)
    str = str:gsub(' +$', ''):gsub('^ +', '') -- remove spaces at start and end
    local level = math.huge
    local minPrefix = ''
    local len
    for prefix in str:gmatch('\n( +)') do
        len = #prefix
        if len < level then
            level = len
            minPrefix = prefix
        end
    end
    return (str:gsub('\n' .. minPrefix, '\n'):gsub('\n$', ''))
end