라이브러리

[PHP] CommonMarkNode::replace - AST 조작




CommonMarkNode::replace 메서드 소개


CommonMarkNode는 Markdown 문법을 분석하고 변환하는 데 사용되는 클래스입니다. replace 메서드는 CommonMarkNode의 자식 노드를 찾고, 지정된 패턴에 해당하는 노드를 교체하는 메서드입니다.

replace 메서드의 사용법


replace 메서드는 두 가지 매개변수를 받습니다.

* `$pattern`: 교체할 패턴을 지정하는 정규표현식 또는 CommonMarkNode의 자식 노드입니다.
* `$replacement`: 교체할 패턴을 대체할 내용입니다.

예제


다음 예제에서는 CommonMarkNode::replace 메서드를 사용하여 Markdown 문법에서 강조를 제거하는 방법을 보여줍니다.

#hostingforum.kr
php

use LeagueCommonMarkNodeNode;

use LeagueCommonMarkNodeText;

use LeagueCommonMarkNodeTextNode;

use LeagueCommonMarkParserParser;

use LeagueCommonMarkRendererRenderer;

use LeagueCommonMarkRendererRendererInterface;

use LeagueCommonMarkEnvironmentEnvironment;

use LeagueCommonMarkNodeInlineEmphasis;

use LeagueCommonMarkNodeInlineStrong;

use LeagueCommonMarkNodeInlineText as InlineText;



class CustomRenderer implements RendererInterface

{

    public function render(Node $node, Environment $env)

    {

        if ($node instanceof Emphasis) {

            return $this->renderChildren($node, $env);

        }



        if ($node instanceof Strong) {

            return $this->renderChildren($node, $env);

        }



        return $this->renderChildren($node, $env);

    }



    private function renderChildren(Node $node, Environment $env)

    {

        $children = [];

        foreach ($node->children() as $child) {

            $children[] = $this->render($child, $env);

        }



        return implode('', $children);

    }

}



$parser = new Parser();

$env = new Environment();

$renderer = new CustomRenderer();



$markdown = "Hello, world! This is a *test*.";

$parser->parse($markdown);



$node = $parser->getDocument()->getFirstChild();



$renderer->render($node, $env);



이 예제에서는 CustomRenderer 클래스를 정의하여 Emphasis와 Strong 노드를 렌더링할 때 대체하는 방법을 보여줍니다. replace 메서드는 사용되지 않았지만, CustomRenderer 클래스에서 Emphasis와 Strong 노드를 렌더링할 때 대체하는 방법을 보여줍니다.

replace 메서드의 사용 예


다음 예제에서는 CommonMarkNode::replace 메서드를 사용하여 Markdown 문법에서 강조를 제거하는 방법을 보여줍니다.

#hostingforum.kr
php

use LeagueCommonMarkNodeNode;

use LeagueCommonMarkNodeText;

use LeagueCommonMarkNodeTextNode;

use LeagueCommonMarkParserParser;

use LeagueCommonMarkRendererRenderer;

use LeagueCommonMarkRendererRendererInterface;

use LeagueCommonMarkEnvironmentEnvironment;

use LeagueCommonMarkNodeInlineEmphasis;

use LeagueCommonMarkNodeInlineStrong;

use LeagueCommonMarkNodeInlineText as InlineText;



$parser = new Parser();

$env = new Environment();



$markdown = "Hello, world! This is a *test*.";

$parser->parse($markdown);



$node = $parser->getDocument()->getFirstChild();



// Emphasis 노드를 찾고 대체

$emphases = $node->find('LeagueCommonMarkNodeInlineEmphasis');

foreach ($emphases as $emphasis) {

    $emphasis->replace(new Text($emphasis->getFirstChild()->getText()));

}



// Strong 노드를 찾고 대체

$strongs = $node->find('LeagueCommonMarkNodeInlineStrong');

foreach ($strongs as $strong) {

    $strong->replace(new Text($strong->getFirstChild()->getText()));

}



// 렌더링

$renderer = new Renderer();

echo $renderer->render($node, $env);



이 예제에서는 Emphasis와 Strong 노드를 찾고 대체하는 방법을 보여줍니다. replace 메서드는 사용되며, Emphasis와 Strong 노드를 찾고 대체하는 방법을 보여줍니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 581 페이지

검색

게시물 검색