Skip to content

Releases: YGGverse/gemini-php

0.4.0

03 Apr 15:09
Compare
Choose a tag to compare

Includes Body::findLinks method to grab clickable links from Gemtext

Example

$request = new \Yggverse\Gemini\Client\Request(
    'gemini://yggverse.cities.yesterweb.org'
);

$response = new \Yggverse\Gemini\Client\Response(
    $request->getResponse()
);

$body = new \Yggverse\Gemini\Gemtext\Body(
    $response->getBody()
);

var_dump(
    $body->findLinks() // returns array of gemini links
);

var_dump(
    $body->findLinks('http') // returns array of http links
);

Other

  • add response setters
  • reduce default chunk size

Full Changelog: 0.3.0...0.4.0

0.3.0

03 Apr 01:33
Compare
Choose a tag to compare

Add object-oriented API for text/gemini (Gemtext)

Example

$request = new \Yggverse\Gemini\Client\Request(
    'gemini://yggverse.cities.yesterweb.org'
);

$response = new \Yggverse\Gemini\Client\Response(
    $request->getResponse()
);

$body = new \Yggverse\Gemini\Gemtext\Body(
    $response->getBody()
);

var_dump(
    $body->getH2()
);

foreach ($body->getLinks() as $line)
{
    $link = new \Yggverse\Gemini\Gemtext\Link(
        $line
    );

    var_dump(
        $link->getAddress()
    );

    var_dump(
        $link->getAlt()
    );

    var_dump(
        $link->getDate(
            $timestamp // get unix time from this variable
        )
    );

    var_dump(
        $timestamp
    );
}

Full Changelog: 0.2.0...0.3.0

0.2.0

02 Apr 23:28
Compare
Choose a tag to compare

Completed Request / Response Client

This API make TLS socket connection simpler for PHP apps based on Composer

Example

$request = new \Yggverse\Gemini\Client\Request(
    'gemini://yggverse.cities.yesterweb.org:1965/index.gmi'
);

$response = new \Yggverse\Gemini\Client\Response(
    $request->getResponse()
);

var_dump(
    $response->getBody()
);

Links

Full Changelog: 0.1.0...0.2.0

0.1.0

02 Apr 22:44
Compare
Choose a tag to compare

Initial release dedicated to β-Doku project!

At this point, toolkit provides DokuWiki API for Gemini protocol

Example

Reader

Read DokuWiki and convert to Gemini

$reader = new \Yggverse\Gemini\Dokuwiki\Reader(
    // optional regex rule set array
);

Get or change existing regex rule (or just skip by using build-in set)

echo $reader->setRule(
    '/subject/ui',
    'replacement'
);

Convert DokuWiki text to Gemini markup

As wiki has lot of inline links, to make converted document well-readable, this method does not replace links with new line => macros, but uses inline context: Name ( URL ).

This model useful with Reader::getLinks method, that for example appends all those related links to the document footer.

If you don't like this implementation, feel free to change it by Reader::setRule method!

echo $reader->toGemini(
    file_get_contents(
        '/host/data/pages/index.txt'
    )
);

Get document title

$gemini = $reader->toGemini(
    file_get_contents(
        '/host/data/pages/index.txt'
    )
);

echo $reader->getH1(
    $gemini
);

Get document links

$gemini = $reader->toGemini(
    file_get_contents(
        '/host/data/pages/index.txt'
    )
);

echo $reader->getLinks(
    $gemini
);

Filesystem

Provides methods for simple and secure interaction with DokuWiki file storage

$filesystem = new \Yggverse\Gemini\Dokuwiki\Filesystem(
    '/host/data' // storage location
);

Return simple array of all files in storage

var_dump (
    $filesystem->getList(
        'hello:world'
    )
);

Return all files under the storage folder in tree format

var_dump (
    $filesystem->getTree(
        'hello:world'
    )
);

Return pages under the given data directory

var_dump (
    $filesystem->getPagePathsByPath(
        // absolute path to target data directory (e.g. Filesystem::getDirectoryPathByUri)
    )
);

Return absolute path to stored page file

var_dump (
    $filesystem->getPagePathByUri(
        'hello:world'
    )
);

Return page URI in dokuwiki:format

var_dump (
    $filesystem->getPageUriByPath(
        '/full/path/to/page.txt'
    )
);

Return absolute path to stored media file

var_dump (
    $filesystem->getMediaPathByUri(
        'hello:world'
    )
);

Return file MIME if path match storage item

var_dump (
    $filesystem->getMimeByPath(
        '/full/path/to/page.txt'
    )
);

Return file content if path match storage item

var_dump (
    $filesystem->getDataByPath(
        '/full/path/to/page.txt'
    )
);

Check path exist and match storage item

var_dump (
    $filesystem->isPath(
        '/full/path/to/page.txt'
    )
);

Helper

Useful methods to minify controller codebase

$helper = new \Yggverse\Gemini\Dokuwiki\Helper(
    new \Yggverse\Gemini\Dokuwiki\Filesystem(),
    new \Yggverse\Gemini\Dokuwiki\Reader()
);

Return simple array of children section links in Gemini format

var_dump (
    $helper->getChildrenSectionLinksByUri(
        'hello:world'
    )
);

Return simple array of children page links in Gemini format

var_dump (
    $helper->getChildrenPageLinksByUri(
        'hello:world'
    )
);

Return page link (that contain document name) in Gemini format

var_dump (
    $helper->getPageLinkByPath(
        $filesystem->getPagePathByUri(
            'hello:world'
        )
    )
);

Links

Full Changelog: https://github.com/YGGverse/gemini-php/commits/0.1.0