Вход Регистрация
Файл: vendor/vlucas/phpdotenv/src/Parser/Lines.php
Строк: 148
<?php

declare(strict_types=1);

namespace 
DotenvParser;

use 
DotenvUtilRegex;
use 
DotenvUtilStr;

final class 
Lines
{
    
/**
     * This class is a singleton.
     *
     * @codeCoverageIgnore
     *
     * @return void
     */
    
private function __construct()
    {
        
//
    
}

    
/**
     * Process the array of lines of environment variables.
     *
     * This will produce an array of raw entries, one per variable.
     *
     * @param string[] $lines
     *
     * @return string[]
     */
    
public static function process(array $lines)
    {
        
$output = [];
        
$multiline false;
        
$multilineBuffer = [];

        foreach (
$lines as $line) {
            [
$multiline$line$multilineBuffer] = self::multilineProcess($multiline$line$multilineBuffer);

            if (!
$multiline && !self::isCommentOrWhitespace($line)) {
                
$output[] = $line;
            }
        }

        return 
$output;
    }

    
/**
     * Used to make all multiline variable process.
     *
     * @param bool     $multiline
     * @param string   $line
     * @param string[] $buffer
     *
     * @return array{bool,string,string[]}
     */
    
private static function multilineProcess(bool $multilinestring $line, array $buffer)
    {
        
$startsOnCurrentLine $multiline false self::looksLikeMultilineStart($line);

        
// check if $line can be multiline variable
        
if ($startsOnCurrentLine) {
            
$multiline true;
        }

        if (
$multiline) {
            
array_push($buffer$line);

            if (
self::looksLikeMultilineStop($line$startsOnCurrentLine)) {
                
$multiline false;
                
$line implode("n"$buffer);
                
$buffer = [];
            }
        }

        return [
$multiline$line$buffer];
    }

    
/**
     * Determine if the given line can be the start of a multiline variable.
     *
     * @param string $line
     *
     * @return bool
     */
    
private static function looksLikeMultilineStart(string $line)
    {
        return 
Str::pos($line'="')->map(static function () use ($line) {
            return 
self::looksLikeMultilineStop($linetrue) === false;
        })->
getOrElse(false);
    }

    
/**
     * Determine if the given line can be the start of a multiline variable.
     *
     * @param string $line
     * @param bool   $started
     *
     * @return bool
     */
    
private static function looksLikeMultilineStop(string $linebool $started)
    {
        if (
$line === '"') {
            return 
true;
        }

        return 
Regex::occurrences('/(?=([^\\]"))/'str_replace('\\'''$line))->map(static function (int $count) use ($started) {
            return 
$started $count $count >= 1;
        })->
success()->getOrElse(false);
    }

    
/**
     * Determine if the line in the file is a comment or whitespace.
     *
     * @param string $line
     *
     * @return bool
     */
    
private static function isCommentOrWhitespace(string $line)
    {
        
$line trim($line);

        return 
$line === '' || (isset($line[0]) && $line[0] === '#');
    }
}
Онлайн: 3
Реклама