Module:WikitextProcessor: Difference between revisions

// via Wikitext Extension for VSCode
Tag: Reverted
// via Wikitext Extension for VSCode
Tag: Manual revert
Line 115: Line 115:


-- Replaces placeholder patterns ($VARIABLE$) with actual values
-- Replaces placeholder patterns ($VARIABLE$) with actual values
function p.replacePlaceholders(content, placeholderMap, errorContext)
function p.replacePlaceholders(content, placeholderMap)
     if not content then
     if not content or not placeholderMap then
         return content
         return content
    end
   
    -- DEFENSIVE: Input validation with detailed logging
    if not placeholderMap or type(placeholderMap) ~= "table" then
        if errorContext then
            ErrorHandling.addStatus(errorContext, CONTEXT_NAME, 'Invalid placeholder map', 'Type: ' .. type(placeholderMap))
        end
        return content
    end
   
    -- DEFENSIVE: Validate critical placeholders with detailed logging
    local validPlaceholders = {}
    local invalidPlaceholders = {}
   
    for key, value in pairs(placeholderMap) do
        if value and type(value) == "string" and value ~= "" then
            validPlaceholders[key] = value
            if errorContext then
                ErrorHandling.addStatus(errorContext, CONTEXT_NAME, 'Valid placeholder received', 'Key: ' .. key .. ', Value: "' .. value .. '"')
            end
        else
            invalidPlaceholders[key] = tostring(value)
            if errorContext then
                ErrorHandling.addStatus(errorContext, CONTEXT_NAME, 'Invalid placeholder detected', 'Key: ' .. key .. ', Value: "' .. tostring(value) .. '", Type: ' .. type(value))
            end
        end
     end
     end
      
      
Line 149: Line 123:
      
      
     -- Apply placeholder replacement exactly like the original T-Campaign code
     -- Apply placeholder replacement exactly like the original T-Campaign code
     for key, value in pairs(validPlaceholders) do
     for key, value in pairs(placeholderMap) do
         local beforeReplace = result
         if value and value ~= "" then
        result = result:gsub("%$" .. key .. "%$", value)
            result = result:gsub("%$" .. key .. "%$", value)
       
        -- Log successful replacements
        if beforeReplace ~= result and errorContext then
            ErrorHandling.addStatus(errorContext, CONTEXT_NAME, 'Placeholder replaced successfully', 'Key: ' .. key .. ', Replacements made')
         end
         end
     end
     end
      
      
     -- Clean up any remaining unfilled placeholders (TemplateStarter's removeEmptyPlaceholders logic)
     -- Clean up any remaining unfilled placeholders (TemplateStarter's removeEmptyPlaceholders logic)
    local beforeCleanup = result
     result = result:gsub("%$[A-Z_]+%$", "")
     result = result:gsub("%$[A-Z_]+%$", "")
     result = result:gsub("%s+", " "):gsub("^%s+", ""):gsub("%s+$", "")
     result = result:gsub("%s+", " "):gsub("^%s+", ""):gsub("%s+$", "")
   
    -- Log cleanup if any unfilled placeholders were removed
    if beforeCleanup ~= result and errorContext then
        ErrorHandling.addStatus(errorContext, CONTEXT_NAME, 'Unfilled placeholders cleaned up', 'Content normalized')
    end
      
      
     return result
     return result
Line 207: Line 171:
     -- Step 2: Replace placeholders if provided
     -- Step 2: Replace placeholders if provided
     if placeholders then
     if placeholders then
         processedContent = p.replacePlaceholders(processedContent, placeholders, errorContext)
         processedContent = p.replacePlaceholders(processedContent, placeholders)
     end
     end