server/src/app/Libraries/Transcript/TranscriptConverterBase.php
author ymh <ymh.work@gmail.com>
Tue, 20 Mar 2018 15:02:40 +0100
changeset 573 25f3d28f51b2
parent 398 a5bd0f6082f3
permissions -rw-r--r--
Added tag 0.0.25 for changeset 190ae1dee68d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
namespace CorpusParole\Libraries\Transcript;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
use CorpusParole\Models\Document;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
use EasyRdf\Literal;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
use DateTime;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
398
a5bd0f6082f3 css corrections + transcript
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    10
abstract class TranscriptConverterBase implements TranscriptConverterInterface {
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    12
    public function __construct(Document $document, $source, $creationDate = null) {
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        $this->resJSON = [];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
        $this->document = $document;
163
59c68fc4848e Add transcript api endpoint
ymh <ymh.work@gmail.com>
parents: 162
diff changeset
    15
59c68fc4848e Add transcript api endpoint
ymh <ymh.work@gmail.com>
parents: 162
diff changeset
    16
        $this->source = new \DOMDocument();
59c68fc4848e Add transcript api endpoint
ymh <ymh.work@gmail.com>
parents: 162
diff changeset
    17
        $this->source->loadXML($source, LIBXML_NOCDATA|LIBXML_NOBLANKS);
59c68fc4848e Add transcript api endpoint
ymh <ymh.work@gmail.com>
parents: 162
diff changeset
    18
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        $this->creationDate = $creationDate;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        $this->mediaRefId = null;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        if(is_null($this->creationDate)) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
            $this->creationDate = (new DateTime())->format(DateTime::ATOM);
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    public function addHeaderMeta() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        $this->resJSON['format'] = 'http://advene.org/ns/cinelab/';
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        $this->resJSON["@context"] = [
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
            "dc" =>  "http://purl.org/dc/elements/1.1/",
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
            "corpus" => "http://corpusdelaparole.huma-num.fr/ns/corpus#"
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        ];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        $title = $this->getSourceTitle();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        if(is_null($title)) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
            $docTitle = $this->document->getTitle();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            if($docTitle instanceof Literal) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
                $titleLanguage = $docTitle->getLang();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
                $title = $titleLanguage?[$titleLanguage => $docTitle->getValue()]:$docTitle->getValue();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
            elseif(!is_null($docTitle)) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
                $title = (string)$docTitle;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
            }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        $this->title = null;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        if(is_string($title)) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
            $this->title = $title;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        elseif(is_array($title) && count($title) == 1) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            $this->title = [ "@language" => key($title),  "@value" => current($title)];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        elseif(is_array($title)) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
            $this->title = array_reduce(array_keys($title),function($res, $k) use ($title) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
                array_push($res, ["@language" => $k, "@value" => $title[$k]]);
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
                return $res;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
            }, []);
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        $this->resJSON['meta'] = [
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
            'dc:creator' => config('corpusparole.transcript_default_creator'),
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
            'dc:contributor' => config('corpusparole.transcript_default_creator'),
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
            'dc:created' => $this->creationDate,
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
            'dc:modified' => $this->creationDate,
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
            'dc:title' => $this->title
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        ];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    // get document title
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    public function getSourceTitle() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        return null;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    // add media
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    public function buildMedias() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        $medias = [];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        $i = 1;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        foreach($this->document->getMediaArray() as $documentMedia)
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            $mId = $this->document->getId()."_m$i";
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            $i++;
168
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 163
diff changeset
    86
            if(is_null($this->mediaRefId) || $documentMedia->isMaster()) {
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
                $this->mediaRefId = $mId;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
            }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
            array_push($medias, [
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                'id' => $mId,
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
                'origin' => 0,
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                'unit' => 'ms',
168
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 163
diff changeset
    93
                'url' => $documentMedia->getUrl(),
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
                'meta' => [
168
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 163
diff changeset
    95
                    'dc:duration' => $documentMedia->getExtentMs(),
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                    'dc:title' => $this->title,
168
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 163
diff changeset
    97
                    'dc:format' => $documentMedia->getFormat(),
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 163
diff changeset
    98
                    'corpus:master' =>  filter_var($documentMedia->isMaster(), FILTER_VALIDATE_BOOLEAN)
162
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                ]
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
            ]);
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        return $medias;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    public function getMediaRefId() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        return $this->mediaRefId;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    public abstract function parseSource();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    // add resources
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    public function buildResources() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        return [];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    // add lists
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    public function buildLists() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        return [];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
    // add annotation types
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    public function buildAnnotationTypes() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
        return [];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    // add annotations
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
    public abstract function buildAnnotations();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    protected function buildTextvalue($text, $language) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        if(empty($language)) {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
            return $text;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        } else {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
            return ['@value' => $text, '@language' => $language];
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
    /**
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
     * Convert xml to json.
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
     * return an PHP array ready for serialization
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
     */
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    function convertToJson() {
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        $this->addHeaderMeta();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
        $this->resJSON['medias'] = $this->buildMedias();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
        $this->parseSource();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
        $this->resJSON['resources'] = $this->buildResources();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        $this->resJSON['lists'] = $this->buildLists();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        $this->resJSON['annotation-types'] = $this->buildAnnotationTypes();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
        $this->resJSON['annotations'] = $this->buildAnnotations();
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
        return $this->resJSON;
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
    }
a6cf5a06f02d add Transcript converters libraries + test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
398
a5bd0f6082f3 css corrections + transcript
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
   159
}