Commit 8e335a7c authored by JOE Thunyathep S's avatar JOE Thunyathep S
Browse files

up

parent 43ea69a2
Pipeline #1969 passed with stage
in 36 seconds
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 166.2 166.2" style="enable-background:new 0 0 166.2 166.2;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{fill:#D90F15;opacity:0.8}
.st2{enable-background:new ;}
.st3{fill:#FFFFFF;}
</style>
<g id="Group_1316" transform="translate(-140)">
<g id="Group_519" transform="translate(140)">
<g>
<defs>
<rect id="SVGID_1_" width="166.2" height="166.2"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="Group_518" class="st0">
<g id="Path_371">
<path class="st1" d="M-8.3-6.6v180.7h184.9V-6.6H-8.3z"/>
</g>
</g>
</g>
</g>
<g class="st2">
<path class="st3" d="M157.5,44.6V26.7h1.2V35h11.2v-8.3h1.2v17.9h-1.2v-8.4h-11.2v8.4H157.5z"/>
<path class="st3" d="M180.2,31.3c0.3,0,0.6,0,0.9,0.1c0.3,0.1,0.7,0.2,1.1,0.3c0.4,0.1,0.7,0.3,1.1,0.6s0.6,0.5,0.9,0.9
s0.5,0.8,0.6,1.3c0.2,0.5,0.2,1.1,0.2,1.8v3.7c0,0.1,0,0.4,0,0.7c0,0.3-0.1,0.6-0.2,1c-0.1,0.4-0.2,0.7-0.4,1.1s-0.5,0.7-0.8,1.1
c-0.4,0.3-0.8,0.6-1.4,0.8c-0.6,0.2-1.2,0.3-2,0.3c-0.8,0-1.5-0.1-2-0.3c-0.6-0.2-1-0.5-1.4-0.8c-0.4-0.3-0.6-0.7-0.8-1.1
c-0.2-0.4-0.4-0.8-0.4-1.1c-0.1-0.4-0.2-0.7-0.2-1c0-0.3,0-0.5,0-0.7v-3.7c0-0.7,0.1-1.3,0.3-1.8c0.2-0.5,0.4-0.9,0.7-1.3
c0.3-0.4,0.6-0.7,0.9-0.9c0.3-0.2,0.7-0.4,1.1-0.6c0.4-0.1,0.7-0.2,1.1-0.3C179.6,31.4,179.9,31.3,180.2,31.3z M180.2,32.6
c-0.3,0-0.7,0.1-1.1,0.2c-0.4,0.1-0.8,0.3-1.2,0.6c-0.4,0.3-0.7,0.6-1,1.1c-0.3,0.5-0.4,1.1-0.4,1.8v3.7c0,0.1,0,0.3,0,0.5
c0,0.2,0.1,0.5,0.1,0.8c0.1,0.3,0.2,0.6,0.3,0.9c0.2,0.3,0.4,0.6,0.6,0.8c0.3,0.2,0.6,0.4,1,0.6c0.4,0.2,0.9,0.2,1.5,0.2
c0.6,0,1.1-0.1,1.5-0.2c0.4-0.2,0.8-0.4,1-0.6c0.3-0.2,0.5-0.5,0.6-0.8c0.1-0.3,0.3-0.6,0.3-0.9c0.1-0.3,0.1-0.5,0.1-0.8
c0-0.2,0-0.4,0-0.5v-3.7c0-0.5-0.1-0.9-0.2-1.3c-0.1-0.4-0.3-0.7-0.5-1c-0.2-0.3-0.4-0.5-0.7-0.7c-0.3-0.2-0.5-0.3-0.8-0.4
c-0.3-0.1-0.5-0.2-0.8-0.2C180.6,32.6,180.4,32.6,180.2,32.6z"/>
<path class="st3" d="M196.8,32.9h-3.7c-0.1,0-0.2,0-0.4,0c-0.2,0-0.4,0-0.7,0.1c-0.3,0.1-0.5,0.2-0.8,0.3
c-0.3,0.1-0.5,0.3-0.8,0.6c-0.2,0.2-0.4,0.6-0.6,0.9c-0.2,0.4-0.2,0.8-0.2,1.4v4.3c0,0.2,0,0.3,0,0.6c0,0.2,0,0.4,0.1,0.7
s0.1,0.5,0.2,0.7c0.1,0.2,0.2,0.4,0.4,0.6c0.2,0.2,0.4,0.3,0.7,0.4c0.3,0.1,0.6,0.2,1,0.2c0.2,0,0.4,0,0.7,0
c0.2,0,0.5-0.1,0.8-0.1c0.3-0.1,0.5-0.1,0.8-0.2c0.3-0.1,0.5-0.1,0.7-0.2c0.6-0.2,1.1-0.4,1.7-0.6l0.4,1.1
c-0.6,0.2-1.2,0.4-1.8,0.6c-0.3,0.1-0.5,0.2-0.8,0.2c-0.3,0.1-0.6,0.1-0.8,0.2c-0.3,0.1-0.6,0.1-0.8,0.1c-0.3,0-0.5,0.1-0.8,0.1
c-0.6,0-1.1-0.1-1.5-0.2c-0.4-0.2-0.8-0.4-1-0.6c-0.3-0.3-0.5-0.5-0.6-0.9c-0.2-0.3-0.3-0.6-0.3-1c-0.1-0.3-0.1-0.6-0.1-0.9
c0-0.3,0-0.6,0-0.8v-4.3c0-0.8,0.1-1.4,0.3-1.9c0.2-0.5,0.5-0.9,0.8-1.3c0.3-0.3,0.7-0.6,1-0.8c0.4-0.2,0.7-0.3,1.1-0.4
c0.3-0.1,0.6-0.1,0.9-0.1c0.3,0,0.4,0,0.5,0h3.7V32.9z"/>
<path class="st3" d="M200.5,44.6V26.7h1.2V33c0.2-0.1,0.5-0.2,0.7-0.3c0.3-0.1,0.5-0.2,0.8-0.3c0.3-0.1,0.5-0.2,0.7-0.3
c0.2-0.1,0.4-0.2,0.5-0.2c0.3-0.1,0.5-0.2,0.7-0.2c0.2-0.1,0.4-0.1,0.6-0.2c0.2,0,0.4-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0
c0.6,0,1.2,0.1,1.6,0.4c0.4,0.3,0.7,0.6,1,1c0.2,0.4,0.4,0.8,0.5,1.3c0.1,0.4,0.1,0.8,0.1,1.2v9.4h-1.2v-9.4c0-0.2,0-0.5-0.1-0.8
c-0.1-0.3-0.2-0.6-0.3-0.9c-0.1-0.3-0.3-0.5-0.6-0.7c-0.3-0.2-0.6-0.3-1-0.3c-0.5,0-1.2,0.1-1.9,0.4c-0.2,0.1-0.4,0.2-0.7,0.3
c-0.3,0.1-0.6,0.2-0.9,0.4c-0.3,0.1-0.6,0.3-0.9,0.4s-0.5,0.2-0.7,0.3v10.3H200.5z"/>
<path class="st3" d="M213.6,42.6c0.2,0.1,0.4,0.2,0.7,0.3c0.3,0.1,0.6,0.3,1,0.4c0.4,0.1,0.8,0.2,1.2,0.3c0.5,0.1,1,0.1,1.5,0.1
c0.6,0,1.2-0.1,1.6-0.2c0.5-0.1,0.8-0.3,1.1-0.5c0.3-0.2,0.5-0.5,0.6-0.8c0.1-0.3,0.2-0.7,0.2-1.1c0-0.4-0.1-0.7-0.2-0.9
c-0.1-0.3-0.3-0.5-0.6-0.7s-0.6-0.4-1-0.5c-0.4-0.2-1-0.3-1.6-0.4c-0.9-0.2-1.6-0.5-2.2-0.7c-0.6-0.2-1-0.5-1.4-0.8
c-0.3-0.3-0.6-0.6-0.7-1c-0.1-0.4-0.2-0.8-0.2-1.3c0-1.1,0.4-2,1.1-2.6c0.7-0.6,1.8-0.9,3.1-0.9c1,0,1.9,0.1,2.6,0.2
c0.7,0.1,1.2,0.3,1.6,0.4l-0.4,1.1c-0.2-0.1-0.5-0.1-0.7-0.2c-0.2-0.1-0.5-0.1-0.8-0.2c-0.3-0.1-0.6-0.1-1-0.1c-0.4,0-0.8,0-1.3,0
c-1,0-1.8,0.2-2.3,0.6c-0.5,0.4-0.7,1-0.7,1.8c0,0.4,0.1,0.7,0.2,0.9c0.1,0.2,0.3,0.5,0.6,0.7c0.3,0.2,0.6,0.4,1.1,0.5
c0.5,0.2,1,0.3,1.7,0.5c0.8,0.2,1.5,0.4,2.1,0.6c0.6,0.2,1,0.4,1.4,0.7c0.3,0.3,0.6,0.6,0.7,1c0.2,0.4,0.2,0.9,0.2,1.4
c0,1.2-0.4,2.1-1.2,2.7c-0.8,0.6-2,1-3.6,1c-0.6,0-1.2,0-1.7-0.1s-1-0.2-1.4-0.3c-0.4-0.1-0.8-0.3-1.1-0.4
c-0.3-0.1-0.5-0.3-0.7-0.4L213.6,42.6z"/>
<path class="st3" d="M233.9,32.9h-3.7c-0.1,0-0.2,0-0.4,0c-0.2,0-0.4,0-0.7,0.1c-0.3,0.1-0.5,0.2-0.8,0.3
c-0.3,0.1-0.5,0.3-0.8,0.6c-0.2,0.2-0.4,0.6-0.6,0.9c-0.2,0.4-0.2,0.8-0.2,1.4v4.3c0,0.2,0,0.3,0,0.6c0,0.2,0,0.4,0.1,0.7
s0.1,0.5,0.2,0.7c0.1,0.2,0.2,0.4,0.4,0.6c0.2,0.2,0.4,0.3,0.7,0.4c0.3,0.1,0.6,0.2,1,0.2c0.2,0,0.4,0,0.7,0
c0.2,0,0.5-0.1,0.8-0.1c0.3-0.1,0.5-0.1,0.8-0.2c0.3-0.1,0.5-0.1,0.7-0.2c0.6-0.2,1.1-0.4,1.7-0.6l0.4,1.1
c-0.6,0.2-1.2,0.4-1.8,0.6c-0.3,0.1-0.5,0.2-0.8,0.2c-0.3,0.1-0.6,0.1-0.8,0.2c-0.3,0.1-0.6,0.1-0.8,0.1c-0.3,0-0.5,0.1-0.8,0.1
c-0.6,0-1.1-0.1-1.5-0.2c-0.4-0.2-0.8-0.4-1-0.6c-0.3-0.3-0.5-0.5-0.6-0.9c-0.2-0.3-0.3-0.6-0.3-1c-0.1-0.3-0.1-0.6-0.1-0.9
c0-0.3,0-0.6,0-0.8v-4.3c0-0.8,0.1-1.4,0.3-1.9c0.2-0.5,0.5-0.9,0.8-1.3c0.3-0.3,0.7-0.6,1-0.8c0.4-0.2,0.7-0.3,1.1-0.4
c0.3-0.1,0.6-0.1,0.9-0.1c0.3,0,0.4,0,0.5,0h3.7V32.9z"/>
<path class="st3" d="M237.6,44.6V26.7h1.2V33c0.2-0.1,0.5-0.2,0.7-0.3c0.3-0.1,0.5-0.2,0.8-0.3c0.3-0.1,0.5-0.2,0.7-0.3
c0.2-0.1,0.4-0.2,0.5-0.2c0.3-0.1,0.5-0.2,0.7-0.2c0.2-0.1,0.4-0.1,0.6-0.2c0.2,0,0.4-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0
c0.6,0,1.2,0.1,1.6,0.4c0.4,0.3,0.7,0.6,1,1c0.2,0.4,0.4,0.8,0.5,1.3c0.1,0.4,0.1,0.8,0.1,1.2v9.4H246v-9.4c0-0.2,0-0.5-0.1-0.8
c-0.1-0.3-0.2-0.6-0.3-0.9c-0.1-0.3-0.3-0.5-0.6-0.7c-0.3-0.2-0.6-0.3-1-0.3c-0.5,0-1.2,0.1-1.9,0.4c-0.2,0.1-0.4,0.2-0.7,0.3
c-0.3,0.1-0.6,0.2-0.9,0.4c-0.3,0.1-0.6,0.3-0.9,0.4s-0.5,0.2-0.7,0.3v10.3H237.6z"/>
<path class="st3" d="M252.8,31.6v9.4c0,0.2,0,0.5,0.1,0.8c0.1,0.3,0.2,0.6,0.3,0.9s0.3,0.5,0.6,0.7c0.3,0.2,0.6,0.3,1,0.3
c0.5,0,1.2-0.1,1.9-0.4c0.2-0.1,0.4-0.2,0.7-0.3c0.3-0.1,0.6-0.2,0.9-0.4c0.3-0.1,0.6-0.3,0.9-0.4c0.3-0.1,0.5-0.2,0.7-0.3V31.6
h1.2v13h-1.2v-1.3c-0.2,0.1-0.5,0.2-0.8,0.3c-0.3,0.1-0.5,0.2-0.8,0.3c-0.3,0.1-0.5,0.2-0.7,0.3c-0.2,0.1-0.4,0.2-0.5,0.2
c-0.3,0.1-0.5,0.2-0.7,0.2c-0.2,0.1-0.4,0.1-0.6,0.2c-0.2,0-0.4,0.1-0.5,0.1c-0.2,0-0.3,0-0.5,0c-0.6,0-1.2-0.1-1.6-0.4
c-0.4-0.3-0.7-0.6-1-1c-0.2-0.4-0.4-0.8-0.5-1.3c-0.1-0.4-0.1-0.8-0.1-1.2v-9.4H252.8z"/>
<path class="st3" d="M266.8,26.7v17.9h-1.2V26.7H266.8z"/>
<path class="st3" d="M280.6,43.8c-0.3,0.1-0.7,0.2-1.1,0.4c-0.4,0.1-0.8,0.3-1.3,0.4c-0.4,0.1-0.9,0.2-1.4,0.3
c-0.5,0.1-1,0.1-1.6,0.1c-0.7,0-1.3-0.1-1.8-0.3c-0.6-0.2-1-0.5-1.4-0.9c-0.4-0.4-0.7-0.9-0.9-1.6c-0.2-0.6-0.3-1.4-0.3-2.2v-3.3
c0-0.9,0.1-1.6,0.4-2.3c0.2-0.7,0.6-1.2,1-1.7c0.4-0.5,1-0.8,1.6-1c0.6-0.2,1.4-0.3,2.1-0.3c0.8,0,1.5,0.1,2.1,0.4
c0.6,0.3,1.1,0.6,1.5,1.1c0.4,0.5,0.7,1,0.9,1.6c0.2,0.6,0.3,1.3,0.3,2.1v2.2H272v1.1c0,0.7,0.1,1.2,0.2,1.7
c0.2,0.5,0.4,0.9,0.7,1.2c0.3,0.3,0.6,0.5,1,0.7c0.4,0.1,0.9,0.2,1.4,0.2c0.5,0,1,0,1.4-0.1c0.5-0.1,0.9-0.2,1.4-0.3
s0.8-0.2,1.2-0.4c0.4-0.1,0.7-0.2,0.9-0.3L280.6,43.8z M272,37.5h7.4v-1.1c0-1.3-0.3-2.3-0.8-3c-0.6-0.7-1.5-1.1-2.7-1.1
c-0.6,0-1.2,0.1-1.7,0.2c-0.5,0.2-0.9,0.4-1.2,0.7c-0.3,0.3-0.6,0.8-0.8,1.3c-0.2,0.5-0.3,1.2-0.3,1.9V37.5z"/>
</g>
<g class="st2">
<path class="st3" d="M156.2,58h1.9v-0.6c0-0.6,0.1-1.1,0.2-1.6s0.4-1,0.7-1.3c0.3-0.4,0.7-0.7,1.2-0.9s1.1-0.3,1.8-0.3
c0.5,0,0.9,0,1.2,0.1c0.3,0.1,0.6,0.2,0.8,0.3l-0.7,1.9c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2,0-0.4-0.1-0.7-0.1c-0.6,0-1,0.2-1.3,0.5
c-0.3,0.4-0.5,0.9-0.5,1.6V58h2.5v2.1h-2.5V71H158V60.1h-1.9V58z"/>
<path class="st3" d="M175.9,71h-2.2v-1.1l-1.9,0.7c-0.1,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.4,0.1-0.7,0.2s-0.5,0.1-0.8,0.2
c-0.3,0-0.6,0.1-0.9,0.1c-0.4,0-0.8-0.1-1.3-0.2c-0.4-0.1-0.8-0.4-1.1-0.7c-0.3-0.3-0.6-0.8-0.8-1.3c-0.2-0.6-0.3-1.3-0.3-2.2V58
h2.2v8.9c0,0.2,0,0.4,0,0.6s0.1,0.5,0.2,0.8c0.1,0.3,0.3,0.5,0.5,0.7c0.2,0.2,0.6,0.3,1,0.3c0.3,0,0.5,0,0.8-0.1
c0.3-0.1,0.5-0.2,0.8-0.3l2.7-1.1V58h2.2V71z M167.3,55.6v-2.5h2.3v2.5H167.3z M171.9,55.6v-2.5h2.3v2.5H171.9z"/>
<path class="st3" d="M184.6,57.7c0.3,0,0.7,0,0.9,0.1c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.1,0.4,0.2,0.6,0.4l-0.8,2.1
c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.6-0.1c-0.2,0-0.4,0-0.6,0.1c-0.2,0.1-0.4,0.2-0.6,0.4
c-0.2,0.1-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.3-0.4,0.5s-0.3,0.3-0.4,0.5V71h-2.2V58h2.2v1.4c0,0,0,0,0.1-0.1
c0.1-0.1,0.1-0.2,0.3-0.3c0.1-0.1,0.2-0.3,0.4-0.4c0.2-0.1,0.3-0.3,0.5-0.4c0.2-0.1,0.4-0.2,0.6-0.3
C184.1,57.8,184.4,57.7,184.6,57.7z"/>
<path class="st3" d="M209.6,55.2h-6.7V71h-2.4V55.2h-6.7v-2.1h15.7V55.2z"/>
</g>
<g class="st2">
<path class="st3" d="M220.8,70.2c-0.4,0.1-0.8,0.2-1.2,0.4c-0.4,0.1-0.8,0.2-1.3,0.3c-0.5,0.1-0.9,0.2-1.4,0.3
c-0.5,0.1-1,0.1-1.6,0.1c-0.6,0-1.3-0.1-1.9-0.3c-0.6-0.2-1.1-0.5-1.6-0.9c-0.5-0.4-0.9-1-1.2-1.7c-0.3-0.7-0.4-1.6-0.4-2.7v-2.1
c0-0.8,0.1-1.6,0.3-2.3c0.2-0.7,0.6-1.3,1-1.9c0.5-0.5,1-0.9,1.7-1.2c0.7-0.3,1.5-0.4,2.5-0.4c0.7,0,1.3,0.1,1.8,0.2
c0.5,0.1,1,0.3,1.3,0.6c0.4,0.3,0.7,0.6,1,0.9c0.3,0.3,0.5,0.7,0.6,1.1c0.2,0.4,0.3,0.8,0.3,1.3c0.1,0.4,0.1,0.9,0.1,1.3v2.3h-8.5
v0.6c0,0.6,0.1,1.1,0.2,1.5c0.1,0.4,0.3,0.7,0.6,1c0.3,0.3,0.6,0.4,0.9,0.6c0.3,0.1,0.7,0.2,1.1,0.2c0.5,0,0.9,0,1.4-0.1
c0.5-0.1,0.9-0.2,1.3-0.3c0.4-0.1,0.8-0.2,1.2-0.3c0.4-0.1,0.7-0.2,1-0.3L220.8,70.2z M212.4,63.6h6.3c0-0.6,0-1.2-0.1-1.7
c-0.1-0.5-0.2-0.9-0.4-1.3c-0.2-0.4-0.5-0.6-0.9-0.8c-0.4-0.2-0.9-0.3-1.5-0.3c-0.6,0-1.1,0.1-1.5,0.3c-0.4,0.2-0.8,0.4-1,0.7
s-0.5,0.7-0.6,1.1c-0.1,0.4-0.2,0.9-0.2,1.5V63.6z"/>
<path class="st3" d="M232.7,60h-3.3c-0.5,0-1,0.1-1.4,0.2c-0.4,0.1-0.7,0.3-0.9,0.5s-0.4,0.4-0.6,0.7c-0.1,0.2-0.2,0.5-0.3,0.7
c-0.1,0.2-0.1,0.5-0.1,0.7c0,0.2,0,0.4,0,0.5v3.7c0,0.4,0.1,0.8,0.2,1.1c0.1,0.3,0.2,0.6,0.4,0.7s0.4,0.3,0.6,0.4
c0.2,0.1,0.5,0.1,0.7,0.1c0.4,0,0.8,0,1.2-0.1c0.5-0.1,0.9-0.2,1.3-0.3c0.4-0.1,0.9-0.2,1.2-0.3c0.4-0.1,0.7-0.2,0.9-0.3
c0.1,0.4,0.2,0.7,0.2,1c0.1,0.2,0.1,0.5,0.2,0.7s0.1,0.3,0.1,0.3c-0.4,0.1-0.8,0.3-1.2,0.4c-0.4,0.1-0.8,0.3-1.3,0.4
c-0.4,0.1-0.9,0.2-1.4,0.2c-0.5,0.1-1.1,0.1-1.7,0.1c-0.4,0-0.9-0.1-1.3-0.2c-0.4-0.1-0.8-0.4-1.2-0.7c-0.4-0.3-0.6-0.8-0.9-1.4
c-0.2-0.6-0.3-1.3-0.3-2.2v-3.6c0-0.7,0.1-1.4,0.2-1.9c0.2-0.5,0.4-1,0.7-1.4c0.3-0.4,0.6-0.7,1-1c0.4-0.2,0.8-0.4,1.2-0.6
c0.4-0.1,0.8-0.2,1.3-0.3c0.4-0.1,0.8-0.1,1.2-0.1h3.3V60z"/>
<path class="st3" d="M236.4,53.1h2.2v6l1.9-0.7c0.1-0.1,0.3-0.1,0.5-0.2c0.2-0.1,0.4-0.1,0.6-0.2c0.2-0.1,0.5-0.1,0.8-0.2
c0.3,0,0.6-0.1,1-0.1c0.4,0,0.8,0.1,1.3,0.2c0.4,0.1,0.8,0.4,1.1,0.7c0.3,0.3,0.6,0.8,0.8,1.3c0.2,0.6,0.3,1.3,0.3,2.2V71h-2.2
v-8.9c0-0.2,0-0.4,0-0.6c0-0.3-0.1-0.5-0.2-0.8c-0.1-0.3-0.3-0.5-0.5-0.7c-0.2-0.2-0.6-0.3-1-0.3c-0.3,0-0.5,0-0.8,0.1
c-0.3,0.1-0.5,0.2-0.7,0.2l-2.8,1.1V71h-2.2V53.1z"/>
<path class="st3" d="M250.8,58h2.1v1.1l1.9-0.7c0.1,0,0.3-0.1,0.5-0.2c0.2-0.1,0.4-0.2,0.7-0.2c0.3-0.1,0.5-0.1,0.9-0.2
c0.3-0.1,0.6-0.1,1-0.1c0.4,0,0.8,0.1,1.3,0.2c0.4,0.1,0.8,0.4,1.1,0.7c0.3,0.3,0.6,0.8,0.8,1.3c0.2,0.6,0.3,1.3,0.3,2.2V71h-2.2
v-8.9c0-0.2,0-0.4,0-0.6c0-0.3-0.1-0.5-0.2-0.8c-0.1-0.3-0.3-0.5-0.5-0.7c-0.2-0.2-0.6-0.3-1-0.3c-0.3,0-0.5,0-0.8,0.1
c-0.3,0.1-0.5,0.2-0.7,0.2l-2.8,1.1V71h-2.2V58z"/>
<path class="st3" d="M267.5,56h-2.2v-2.2h2.2V56z M267.5,71h-2.2V58h2.2V71z"/>
<path class="st3" d="M271.4,71V53.1h2.2v10.5l6-5.5h2.8l-5.7,5.3l5.7,7.6h-2.7l-4.6-6.2l-1.5,1.4V71H271.4z"/>
</g>
<g class="st2">
<path class="st3" d="M158,93.1c0.4,0.3,0.9,0.5,1.4,0.7c0.4,0.2,1,0.3,1.6,0.5c0.6,0.1,1.3,0.2,2,0.2c1.1,0,2-0.2,2.6-0.5
c0.6-0.3,0.9-0.9,0.9-1.8c0-0.4-0.1-0.7-0.2-0.9c-0.1-0.2-0.3-0.4-0.6-0.6c-0.3-0.1-0.6-0.3-1.1-0.4c-0.5-0.1-1-0.2-1.7-0.4
c-1.1-0.3-2.1-0.5-2.8-0.8c-0.8-0.3-1.4-0.6-1.9-1c-0.5-0.4-0.9-0.9-1.1-1.5c-0.2-0.6-0.3-1.4-0.3-2.3c0-0.9,0.1-1.7,0.4-2.4
c0.3-0.7,0.7-1.2,1.3-1.6c0.5-0.4,1.2-0.7,2-0.9c0.8-0.2,1.7-0.3,2.6-0.3c0.7,0,1.3,0,1.9,0.1c0.6,0.1,1.2,0.1,1.7,0.2
c0.5,0.1,1,0.2,1.4,0.3c0.4,0.1,0.8,0.2,1,0.3l-1,3c-0.3-0.1-0.6-0.2-1-0.3c-0.4-0.1-0.8-0.2-1.2-0.3c-0.4-0.1-0.9-0.2-1.3-0.2
c-0.5-0.1-0.9-0.1-1.4-0.1c-0.5,0-0.9,0-1.3,0.1c-0.4,0.1-0.6,0.2-0.9,0.4c-0.2,0.2-0.4,0.4-0.5,0.6c-0.1,0.3-0.2,0.6-0.2,0.9
c0,0.4,0.1,0.6,0.2,0.9c0.1,0.2,0.3,0.4,0.6,0.6c0.3,0.2,0.6,0.3,1.1,0.4c0.4,0.1,1,0.3,1.7,0.4c0.7,0.2,1.4,0.3,2,0.5
c0.6,0.2,1.1,0.3,1.6,0.5s0.9,0.4,1.2,0.7c0.3,0.3,0.6,0.6,0.8,0.9c0.2,0.4,0.4,0.8,0.5,1.3c0.1,0.5,0.2,1,0.2,1.7
c0,1-0.2,1.8-0.5,2.5c-0.3,0.7-0.8,1.3-1.4,1.7c-0.6,0.4-1.3,0.7-2.2,0.9c-0.9,0.2-1.9,0.3-3,0.3c-0.5,0-0.9,0-1.4-0.1
c-0.4-0.1-0.9-0.1-1.3-0.2c-0.4-0.1-0.8-0.2-1.1-0.3c-0.4-0.1-0.7-0.2-1-0.4c-0.7-0.3-1.3-0.6-1.9-1L158,93.1z"/>
<path class="st3" d="M176.1,79.9v4.5h2.7v3h-2.7v5.8c0,0.6,0.1,1,0.3,1.2c0.2,0.2,0.5,0.3,1,0.3c0.1,0,0.3,0,0.4,0
c0.1,0,0.3-0.1,0.4-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1l0.9,2.8c-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0.2
c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0-0.6,0.1-0.9,0.1c-0.8,0-1.4-0.1-2-0.3c-0.5-0.2-1-0.5-1.3-0.9c-0.3-0.4-0.6-0.9-0.7-1.4
c-0.1-0.6-0.2-1.2-0.2-1.9v-5.8h-1.5v-3h1.5v-3.5L176.1,79.9z"/>
<path class="st3" d="M192.6,97.4h-3.1v-0.9c-0.2,0.1-0.3,0.2-0.5,0.2c-0.2,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.3,0.1-0.5,0.2
c-0.1,0-0.3,0.1-0.5,0.2c-0.2,0.1-0.4,0.1-0.6,0.2c-0.2,0.1-0.5,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.9,0.1c-0.4,0-0.8-0.1-1.3-0.2
c-0.4-0.1-0.8-0.4-1.2-0.7c-0.4-0.3-0.6-0.8-0.9-1.3c-0.2-0.6-0.3-1.3-0.3-2.2v-8.9h3.2V93c0,0.3,0,0.6,0.1,0.8
c0,0.2,0.1,0.4,0.2,0.6c0.1,0.2,0.2,0.3,0.4,0.4c0.2,0.1,0.4,0.1,0.7,0.1c0.2,0,0.3,0,0.5-0.1c0.2-0.1,0.4-0.1,0.7-0.2
c0.2-0.1,0.4-0.1,0.7-0.2c0.2-0.1,0.5-0.2,0.7-0.3c0.2-0.1,0.5-0.2,0.7-0.3v-9.4h3.2V97.4z"/>
<path class="st3" d="M199.2,79.9v4.5h2.7v3h-2.7v5.8c0,0.6,0.1,1,0.3,1.2c0.2,0.2,0.5,0.3,1,0.3c0.1,0,0.3,0,0.4,0
c0.1,0,0.3-0.1,0.4-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1l0.9,2.8c-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0.2
c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0-0.6,0.1-0.9,0.1c-0.8,0-1.4-0.1-2-0.3c-0.5-0.2-1-0.5-1.3-0.9c-0.3-0.4-0.6-0.9-0.7-1.4
c-0.1-0.6-0.2-1.2-0.2-1.9v-5.8h-1.5v-3h1.5v-3.5L199.2,79.9z"/>
<path class="st3" d="M207.9,79.9v4.5h2.7v3h-2.7v5.8c0,0.6,0.1,1,0.3,1.2c0.2,0.2,0.5,0.3,1,0.3c0.1,0,0.3,0,0.4,0
c0.1,0,0.3-0.1,0.4-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1l0.9,2.8c-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0.2
c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0-0.6,0.1-0.9,0.1c-0.8,0-1.4-0.1-2-0.3c-0.5-0.2-1-0.5-1.3-0.9c-0.3-0.4-0.6-0.9-0.7-1.4
c-0.1-0.6-0.2-1.2-0.2-1.9v-5.8h-1.5v-3h1.5v-3.5L207.9,79.9z"/>
<path class="st3" d="M218.3,99.7c0.5,0,0.9-0.1,1.2-0.2c0.3-0.1,0.6-0.3,0.8-0.6c0.2-0.2,0.4-0.5,0.5-0.8c0.1-0.3,0.1-0.6,0.1-1
v-0.8l-0.6,0.3c-0.4,0.2-0.8,0.3-1.2,0.5c-0.5,0.2-1,0.2-1.6,0.2c-0.7,0-1.3-0.1-1.8-0.3c-0.5-0.2-0.9-0.5-1.3-0.8
c-0.3-0.3-0.6-0.7-0.8-1.1c-0.2-0.4-0.3-0.8-0.4-1.1c-0.1-0.4-0.2-0.7-0.2-1c0-0.3,0-0.6,0-0.7v-2c0-0.9,0.1-1.7,0.3-2.4
c0.2-0.7,0.5-1.2,0.8-1.7c0.3-0.4,0.7-0.8,1.1-1c0.4-0.3,0.8-0.5,1.2-0.6c0.4-0.1,0.7-0.2,1-0.2c0.3,0,0.5,0,0.7,0h6v12.3
c0,0.8-0.1,1.5-0.3,2.2c-0.2,0.7-0.5,1.3-1,1.9c-0.5,0.5-1,1-1.8,1.3c-0.7,0.3-1.6,0.5-2.7,0.5c-0.5,0-0.9,0-1.3-0.1
c-0.4-0.1-0.8-0.2-1.1-0.3c-0.3-0.1-0.6-0.2-0.9-0.4c-0.3-0.1-0.5-0.3-0.7-0.5c-0.5-0.4-0.9-0.8-1.1-1.2l2.5-1.7
c0.2,0.2,0.4,0.4,0.6,0.6c0.2,0.2,0.5,0.3,0.8,0.4C217.4,99.7,217.8,99.7,218.3,99.7z M219.3,94.1c0.2-0.1,0.3-0.1,0.5-0.2
c0.2-0.1,0.3-0.1,0.5-0.2c0.2-0.1,0.4-0.1,0.5-0.2v-6.1h-2.8c0,0-0.1,0-0.2,0c-0.1,0-0.2,0-0.4,0.1c-0.1,0.1-0.3,0.1-0.4,0.3
c-0.2,0.1-0.3,0.3-0.4,0.4c-0.1,0.2-0.2,0.4-0.3,0.7c-0.1,0.3-0.1,0.6-0.1,1v2.4c0,0.2,0,0.3,0.1,0.6c0,0.2,0.1,0.5,0.3,0.7
c0.1,0.2,0.3,0.4,0.5,0.6c0.2,0.2,0.5,0.2,0.8,0.2c0.2,0,0.4,0,0.7-0.1C218.7,94.3,219,94.2,219.3,94.1z"/>
<path class="st3" d="M234.8,97.4v-0.9l-2.1,0.9c-0.3,0.1-0.6,0.2-0.9,0.3c-0.3,0.1-0.7,0.1-1,0.1c-0.8,0-1.5-0.1-2-0.4
c-0.5-0.3-0.9-0.6-1.2-1.1c-0.3-0.5-0.5-1-0.6-1.6c-0.1-0.6-0.2-1.3-0.2-2v-2.2c0-0.9,0.1-1.6,0.3-2.3c0.2-0.6,0.4-1.2,0.7-1.6
c0.3-0.4,0.6-0.8,1-1.1c0.4-0.3,0.8-0.5,1.1-0.6c0.4-0.1,0.7-0.2,1.1-0.3c0.3,0,0.7-0.1,0.9-0.1h5.9v13H234.8z M231.4,94.8
c0.3,0,0.6,0,0.8-0.1c0.3-0.1,0.6-0.2,1-0.4l1.6-0.7v-6.3h-2.8c-0.2,0-0.5,0-0.7,0.1c-0.2,0.1-0.4,0.2-0.6,0.4
c-0.2,0.2-0.3,0.4-0.5,0.8c-0.1,0.3-0.2,0.7-0.2,1.2v2.9c0,0.3,0,0.6,0,0.8c0,0.2,0.1,0.5,0.2,0.6c0.1,0.2,0.2,0.3,0.4,0.4
C230.9,94.8,231.1,94.8,231.4,94.8z"/>
<path class="st3" d="M241.3,97.4v-13h3.2v0.9c0.1-0.1,0.3-0.3,0.4-0.4c0.2-0.1,0.3-0.3,0.5-0.4c0.2-0.1,0.4-0.2,0.6-0.3
c0.2-0.1,0.4-0.1,0.7-0.1c0.3,0,0.6,0,0.9,0.1c0.3,0.1,0.6,0.2,0.8,0.3c0.3,0.1,0.5,0.3,0.8,0.5l-0.9,2.5
c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.4-0.2-0.5-0.2c-0.2-0.1-0.4-0.1-0.5-0.1c-0.2,0-0.4,0-0.6,0.1c-0.2,0.1-0.4,0.2-0.6,0.3
c-0.2,0.1-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.3-0.4,0.5v9.1H241.3z"/>
<path class="st3" d="M254.1,79.9v4.5h2.7v3h-2.7v5.8c0,0.6,0.1,1,0.3,1.2c0.2,0.2,0.5,0.3,1,0.3c0.1,0,0.3,0,0.4,0
c0.1,0,0.3-0.1,0.4-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1l0.9,2.8c-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.3,0.1-0.5,0.2
c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0-0.6,0.1-0.9,0.1c-0.8,0-1.4-0.1-2-0.3c-0.5-0.2-1-0.5-1.3-0.9c-0.3-0.4-0.6-0.9-0.7-1.4
c-0.1-0.6-0.2-1.2-0.2-1.9v-5.8h-1.5v-3h1.5v-3.5L254.1,79.9z"/>
</g>
</g>
</svg>
# 3DClient4SimStadtAPI
3D Client as an example how to use the SimStadt API
\ No newline at end of file
List of CodeMirror contributors. Updated before every release.
4oo4
4r2r
Aaron Brooks
Abdelouahab
Abdussalam Abdurrahman
Abe Fettig
Abhishek Gahlot
Adam Ahmed
Adam King
Adam Particka
adanlobato
Adán Lobato
Aditya Toshniwal
Adrian Aichner
Adrian Heine
Adrien Bertrand
aeroson
Ahmad Amireh
Ahmad M. Zawawi
ahoward
Akeksandr Motsjonov
Alasdair Smith
AlbertHilb
Alberto González Palomo
Alberto Pose
Albert Xing
Alexander Pavlov
Alexander Schepanovski
Alexander Shvets
Alexander Solovyov
Alexandre Bique
alexey-k
Alex Piggott
Aliaksei Chapyzhenka
Allen Sarkisyan
Ami Fischman
Amin Shali
Amin Ullah Khan
amshali@google.com
Amsul
amuntean
Amy
Ananya Sen
anaran
AndersMad
Anders Nawroth
Anderson Mesquita
Anders Wåglund
Andrea G
Andreas Reischuck
Andres Taylor
Andre von Houck
Andrew Cheng
Andrew Dassonville
Andrey Fedorov
Andrey Klyuchnikov
Andrey Lushnikov
Andrey Shchekin
Andy Joslin
Andy Kimball
Andy Li
Angelo
angelozerr
angelo.zerr@gmail.com
Ankit
Ankit Ahuja
Ansel Santosa
Anthony Dugois
anthonygego
Anthony Gégo
Anthony Grimes
Anton Kovalyov
antosarho
Apollo Zhu
AQNOUCH Mohammed
Aram Shatakhtsyan
areos
Arnab Bose
Arnoud Buzing
Arsène von Wyss
Arthur Müller
Arun Narasani
as3boyan
asolove
atelierbram
AtomicPages LLC
Atul Bhouraskar
Aurelian Oancea
Axel Lewenhaupt
Baptiste Augrain
Barret Rennie
Bartosz Dziewoński
Basarat Ali Syed
Bastian Müller
belhaj
Bem Jones-Bey
benbro
Beni Cherniavsky-Paskin
Benjamin DeCoste
Benjamin Young
Ben Keen
Ben Miller
Ben Mosher
Bernhard Sirlinger
Bert Chang
Bharad
BigBlueHat
Billy Moon
binny
Bjorn Hansen
B Krishna Chaitanya
Blaine G
blukat29
Bo
boomyjee
Bo Peng
borawjm
Brad Metcalf
Brandon Frohs
Brandon Wamboldt
Bret Little
Brett Zamir
Brian Grinstead
Brian Sletten
brrd
Bruce Mitchener
Bruno Logerfo
Bryan Gin-ge Chen
Bryan Massoth
Caitlin Potter
Calin Barbat
callodacity
Camilo Roca
Casey Klebba
César González Íñiguez
Chad Jolly
Chandra Sekhar Pydi
Charles Skelton
Cheah Chu Yeow
Chhekur
Chris Colborne
Chris Coyier
Chris Ford
Chris Granger
Chris Houseknecht
Chris Lohfink
Chris Morgan
Chris Reeves
Chris Smith
Christian Gruen
Christian Oyarzun
Christian Petrov
christopherblaser
Christopher Brown
Christopher Kramer
Christopher Mitchell
Christopher Pfohl
Christopher Wallis
Chunliang Lyu
ciaranj
clso
CodeAnimal
CodeBitt
coderaiser
Cole R Lawrence
ComFreek
Cristian Prieto
Curran Kelleher
Curtis Gagliardi
dagsta
daines
Dale Jung
Dan Bentley
Dan Heberden
Daniel, Dao Quang Minh
Daniele Di Sarli
Daniel Faust
Daniel Hanggi
Daniel Huigens
Daniel Kesler
Daniel KJ
Daniel Neel
Daniel Parnell
Daniel Thwaites
Danila Malyutin
Danny Yoo
darealshinji
Darius Roberts
databricks-david-lewis
Dave Brondsema
Dave MacLachlan
Dave Myers
David Barnett
David H. Bronke
David Mignot
David Pathakjee
David Rodrigues
David Santana
David Vázquez
David Whittington
deebugger
Deep Thought
Denis Ovsienko
Devin Abbott
Devon Carew
Dick Choi
Diego Fernandez
dignifiedquire
Dimage Sapelkin
dmaclach
Dmitry Kiselyov
domagoj412
Dominator008
Domizio Demichelis
Doug Blank
Doug Wikle
Drew Bratcher
Drew Hintz
Drew Khoury
Drini Cami
Dror BG
Duncan Lilley
duralog
dwelle
eborden
edoroshenko
edsharp
ekhaled
Elisée
elpnt
Emmanuel Schanzer
Enam Mijbah Noor
Eric Allam
Eric Bogard
Erik Demaine
Erik Welander
eustas
Evan Minsk
Fabien Dubosson
Fabien O'Carroll
Fabio Zendhi Nagao
Faiza Alsaied
Fauntleroy
fbuchinger
feizhang365
Felipe Lalanne
Felix Raab
ficristo
Filip Noetzel
Filip Stollár
Filype Pereira
finalfantasia
flack
Florian Felten
Forbes Lindesay
ForbesLindesay
Ford_Lawnmower
Forrest Oliphant
Franco Catena
Frank Seifferth
Frank Wiegand
fraxx001
Fredrik Borg
FUJI Goro (gfx)
Gabriel Gheorghian
Gabriel Horner
Gabriel Nahmias
galambalazs
Gary Sheng
Gautam Mehta
Gavin Douglas
gekkoe
Geordie Hall
George Stephanis
geowarin
Gerard Braad
Gergely Hegykozi
Germain Chazot
Giovanni Calò
Glebov Boris
Glenn Jorde
Glenn Ruehle
goldsmcb
Golevka
Google LLC
Gordon Smith
Grant Skinner
greengiant
Gregory Koberger
Grzegorz Mazur
Guang Li
Guan Gui
Guillaume Massé
Guillaume Massé
guraga
Gustavo Rodrigues
Hakan Tunc
Hanno Fellmann
Hans Engel
Hanzhao Deng
Harald Schilly
Hardest
Harshvardhan Gupta
Hasan Delibaş
Hasan Karahan
Heanes
Hector Oswaldo Caballero
Hélio
Hendrik Wallbaum
Henrik Haugbølle
Herculano Campos
hidaiy
Hiroyuki Makino
hitsthings
Hocdoc
Hugues Malphettes
Ian Beck
Ian Davies
Ian Dickinson
Ian Rose
Ian Wehrman
Ian Wetherbee
Ice White
ICHIKAWA, Yuji
idleberg
Igor Petruk
ilvalle
Ilya Kharlamov
Ingo Richter
Irakli Gozalishvili
Ivan Kurnosov
Ivoah
Jacob Lee
Jaimin
Jake Peyser
Jakob Miland
Jakub Vrana
Jakub Vrána
James Campos
James Cockshull
James Howard
James Thorne
Jamie Hill
Jamie Morris
Janice Leung
Jan Jongboom
jankeromnes
Jan Keromnes
Jan Odvarko
Jan Schär
Jan T. Sott
Jared Dean
Jared Forsyth
Jared Jacobs
Jason
Jason Barnabe
Jason Grout
Jason Heeris
Jason Johnston
Jason San Jose
Jason Siefken
Jayaprabhakar
Jaydeep Solanki
Jean Boussier
Jeff Blaisdell
Jeff Hanke
Jeff Jenkins
jeffkenton
Jeff Pickhardt
jem (graphite)
Jeremy Parmenter
Jim
Jim Avery
jkaplon
JobJob
jochenberger
Jochen Berger
Joel Einbinder
joelpinheiro
joewalsh
Johan Ask
Johannes
John Connor
John-David Dalton
John Engler
John Lees-Miller
John Ryan
John Snelson
John Van Der Loo
Jon Ander Peñalba
Jonas Döbertin
Jonas Helfer
Jonathan Dierksen
Jonathan Hart
Jonathan Malmaud
Jon Gacnik
jongalloway
Jon Malmaud
Jon Sangster
Joo
Joost-Wim Boekesteijn
Joseph Pecoraro
Josh Barnes
Josh Cohen
Josh Soref
Joshua Newman
Josh Watzman
jots
Joy Zhong
jsoojeon
ju1ius
Juan Benavides Romero
Jucovschi Constantin
Juho Vuori
Julien CROUZET
Julien Rebetez
Justin Andresen
Justin Hileman
jwallers@gmail.com
kaniga
karevn
Karol
Kayur Patel
Kazuhito Hokamura
kcwiakala
Kees de Kooter
Kenan Christian Dimas
Ken Newman
ken restivo
Ken Rockot
Kevin Earls
Kevin Kwok
Kevin Muret
Kevin Sawicki
Kevin Ushey
Kier Darby
Klaus Silveira
Koh Zi Han, Cliff
komakino
Konstantin Lopuhin
koops
Kris Ciccarello
ks-ifware
kubelsmieci
kvncp
KwanEsq
Kyle Kelley
KyleMcNutt
LaKing
Lanfei
Lanny
laobubu
Laszlo Vidacs
leaf
leaf corcoran
Lemmon
Leo Baschy
Leonid Khachaturov
Leon Sorokin
Leonya Khachaturov
Liam Newman
Libo Cannici
Lior Goldberg
Lior Shub
LloydMilligan
LM
lochel
Lonnie Abelbeck
Lorenzo Simionato
Lorenzo Stoakes
Louis Mauchet
Luca Fabbri
Luciano Longo
Luciano Santana
Lu Fangjian
Luke Browning
Luke Granger-Brown
Luke Stagner
lynschinzer
M1cha
Madhura Jayaratne
Maksim Lin
Maksym Taran
Malay Majithia
Manideep
Manuel Rego Casasnovas
Marat Dreizin
Marcel Gerber
Marcelo Camargo
Marco Aurélio
Marco Munizaga
Marcus Bointon
Marek Rudnicki
Marijn Haverbeke
Mário Gonçalves
Mario Pietsch
Mark Anderson
Mark Dalgleish
Mark Hamstra
Mark Lentczner
Marko Bonaci
Mark Peace
Markus Bordihn
Markus Olsson
Martin Balek
Martín Gaitán
Martin Hasoň
Martin Hunt
Martin Laine
Martin Zagora
Mason Malone
Mateusz Paprocki
Mathias Bynens
mats cronqvist
Matt Gaide
Matthew Bauer
Matthew Beale
matthewhayes
Matthew Rathbone
Matthew Suozzo
Matthias Bussonnier
Matthias BUSSONNIER
Mattia Astorino
Matt MacPherson
Matt McDonald
Matt Pass
Matt Sacks
mauricio
Maximilian Hils
Maxim Kraev
Max Kirsch
Max Schaefer
Max Wu
Max Xiantu
mbarkhau
McBrainy
mce2
melpon
meshuamam
Metatheos
Micah Dubinko
Michael
Michael Goderbauer
Michael Grey
Michael Kaminsky
Michael Lehenbauer
Michael Wadman
Michael Walker
Michael Zhou
Michal Čihař
Michal Dorner
Michal Kapiczynski
Mighty Guava
Miguel Castillo
mihailik
Mika Andrianarijaona
Mike
Mike Bostock
Mike Brevoort
Mike Diaz
Mike Ivanov
Mike Kadin
Mike Kobit
Milan Szekely
MinRK
Miraculix87
misfo
mkaminsky11
mloginov
Moritz Schubotz (physikerwelt)
Moritz Schwörer
Moshe Wajnberg
mps
ms
mtaran-google
Mu-An ✌️ Chiou
Mu-An Chiou
mzabuawala
Narciso Jaramillo
Nathan Williams
ndr
Neil Anderson
neon-dev
nerbert
NetworkNode
nextrevision
ngn
nguillaumin
Ng Zhi An
Nicholas Bollweg
Nicholas Bollweg (Nick)
NickKolok
Nick Kreeger
Nick Small
Nicolas Chevobbe
Nicolas Kick
Nicolò Ribaudo
Niels van Groningen
nightwing
Nikita Beloglazov
Nikita Vasilyev
Nikolaj Kappler
Nikolay Kostov
nilp0inter
Nils Knappmeier
Nisarg Jhaveri
nlwillia
noragrossman
Norman Rzepka
Nouzbe
Oleksandr Yakovenko
Olivia Ytterbrink
Opender Singh
opl-
Oreoluwa Onatemowo
oscar.lofwenhamn
Oskar Segersvärd
ossdev
overdodactyl
pablo
pabloferz
Pablo Zubieta
paddya
Page
paladox
Panupong Pasupat
paris
Paris
Paris Kasidiaris
Patil Arpith
Patrick Stoica
Patrick Strawderman
Paul Garvin
Paul Ivanov
Paul Masson
Pavel
Pavel Feldman
Pavel Petržela
Pavel Strashkin
Paweł Bartkiewicz
peteguhl
peter
Peter Flynn
peterkroon
Peter Kroon
Philipp A
Philipp Markovics
Philip Stadermann
Pi Delport
Pierre Gerold
Pieter Ouwerkerk
Pontus Melke
prasanthj
Prasanth J
Prayag Verma
prendota
Prendota
Qiang Li
Radek Piórkowski
Rahul
Rahul Anand
ramwin1
Randall Mason
Randy Burden
Randy Edmunds
Randy Luecke
Raphael Amorim
Rasmus Erik Voel Jensen
Rasmus Schultz
raymondf
Raymond Hill
ray ratchup
Ray Ratchup
Remi Nyborg
Renaud Durlin
Reynold Xin
Richard Denton
Richard van der Meer
Richard Z.H. Wang
Rishi Goomar
Robert Brignull
Robert Crossfield
Robert Martin
Roberto Abdelkader Martínez Pérez
robertop23
Robert Plummer
Roman Janusz
Rrandom
Rrrandom
Ruslan Osmanov
Ryan Pangrle
Ryan Petrello
Ryan Prior
ryu-sato
sabaca
Sam Lee
Sam Rawlins
Samuel Ainsworth
Sam Wilson
sandeepshetty
Sander AKA Redsandro
Sander Verweij
santec
Sarah McAlear and Wenlin Zhang
Sascha Peilicke
Sasha Varlamov
satamas
satchmorun
sathyamoorthi
Saul Costa
S. Chris Colbert
SCLINIC\jdecker
Scott Aikin
Scott Feeney
Scott Goodhew
Seb35
Sebastian Wilzbach
Sebastian Zaha
Seren D
Sergey Goder
Sergey Tselovalnikov
Se-Won Kim
Shane Liesegang
shaund
shaun gilchrist
Shawn A
Shea Bunge
sheopory
Shil S
Shiv Deepak
Shmuel Englard
Shubham Jain
Siamak Mokhtari
silverwind
Simon Edwards
sinkuu
snasa
soliton4
sonson
Sorab Bisht
spastorelli
srajanpaliwal
Stanislav Oaserele
stan-z
Stas Kobzar
Stefan Borsje
Steffen Beyer
Steffen Bruchmann
Steffen Kowalski
Stephane Moore
Stephen Lavelle
Steve Champagne
Steve Hoover
Steve O'Hara
stockiNail
stoskov
Stryder Crown
Stu Kennedy
Sungho Kim
sverweij
Taha Jahangir
takamori
Tako Schotanus
Takuji Shimokawa
Takuya Matsuyama
Tarmil
T. Brandon Ashley
TDaglis
Teja
tel
Tentone
tfjgeorge
Thaddee Tyl
thanasis
TheHowl
themrmax
think
Thomas Brouard
Thomas Dvornik
Thomas Kluyver
thomasmaclean
Thomas Schmid
Tim Alby
Tim Baumann
Timothy Farrell
Timothy Gu
Timothy Hatcher
Tobias Bertelsen
TobiasBg
Todd Berman
Todd Kennedy
Tomas-A
Tomas Varaneckas
Tom Erik Støwer
Tom Klancer
Tom MacWright
Tom McLaughlin
Tony Jian
tophf
Torgeir Thoresen
totalamd
Travis Heppe
Triangle717
Tristan Tarrant
TSUYUSATO Kitsune
Tugrul Elmas
twifkak
Tyler Long
Tyler Makaro
Vadim Dyachenko
Vadzim Ramanenka
Vaibhav Sagar
VapidWorx
Vestimir Markov
vf
Victor Bocharsky
Vincent Woo
Volker Mische
vtripolitakis
wdouglashall
Weiyan Shao
wenli
Wes Cossick
Wesley Wiser
Weston Ruter
Will Binns-Smith
Will Dean
William Desportes
William Jamieson
William Stein
Willy
Wojtek Ptak
wonderboyjon
Wu Cheng-Han
Xavier Mendez
Yang Guo
Yassin N. Hassan
YNH Webdev
yoongu
Yunchi Luo
Yuvi Panda
Yvonnick Esnault
Zac Anger
Zachary Dremann
Zeno Rocha
Zhang Hao
Ziv
zoobestik
zziuni
魏鹏刚
# How to contribute
- [Getting help](#getting-help)
- [Submitting bug reports](#submitting-bug-reports)
- [Contributing code](#contributing-code)
## Getting help
Community discussion, questions, and informal bug reporting is done on the
[discuss.CodeMirror forum](http://discuss.codemirror.net).
## Submitting bug reports
The preferred way to report bugs is to use the
[GitHub issue tracker](http://github.com/codemirror/CodeMirror/issues). Before
reporting a bug, read these pointers.
**Note:** The issue tracker is for *bugs*, not requests for help. Questions
should be asked on the
[discuss.CodeMirror forum](http://discuss.codemirror.net) instead.
### Reporting bugs effectively
- CodeMirror is maintained by volunteers. They don't owe you anything, so be
polite. Reports with an indignant or belligerent tone tend to be moved to the
bottom of the pile.
- Include information about **the browser in which the problem occurred**. Even
if you tested several browsers, and the problem occurred in all of them,
mention this fact in the bug report. Also include browser version numbers and
the operating system that you're on.
- Mention which release of CodeMirror you're using. Preferably, try also with
the current development snapshot, to ensure the problem has not already been
fixed.
- Mention very precisely what went wrong. "X is broken" is not a good bug
report. What did you expect to happen? What happened instead? Describe the
exact steps a maintainer has to take to make the problem occur. We can not
fix something that we can not observe.
- If the problem can not be reproduced in any of the demos included in the
CodeMirror distribution, please provide an HTML document that demonstrates
the problem. The best way to do this is to go to
[jsbin.com](http://jsbin.com/ihunin/edit), enter it there, press save, and
include the resulting link in your bug report.
## Contributing code
Note that we are not accepting any new addons or modes into the main
distribution. If you've written such a module, please distribute it as
a separate NPM package.
- Make sure you have a [GitHub Account](https://github.com/signup/free)
- Fork [CodeMirror](https://github.com/codemirror/CodeMirror/)
([how to fork a repo](https://help.github.com/articles/fork-a-repo))
- Make your changes
- If your changes are easy to test or likely to regress, add tests.
Tests for the core go into `test/test.js`, some modes have their own
test suite under `mode/XXX/test.js`. Feel free to add new test
suites to modes that don't have one yet (be sure to link the new
tests into `test/index.html`).
- Follow the general code style of the rest of the project (see
below). Run `bin/lint` to verify that the linter is happy.
- Make sure all tests pass. Visit `test/index.html` in your browser to
run them.
- Submit a pull request
([how to create a pull request](https://help.github.com/articles/fork-a-repo)).
Don't put more than one feature/fix in a single pull request.
By contributing code to CodeMirror you
- agree to license the contributed code under CodeMirror's [MIT
license](https://codemirror.net/LICENSE).
- confirm that you have the right to contribute and license the code
in question. (Either you hold all rights on the code, or the rights
holder has explicitly granted the right to use it like this,
through a compatible open source license or through a direct
agreement with you.)
### Coding standards
- 2 spaces per indentation level, no tabs.
- Note that the linter (`bin/lint`) which is run after each commit
complains about unused variables and functions. Prefix their names
with an underscore to muffle it.
- CodeMirror does *not* follow JSHint or JSLint prescribed style.
Patches that try to 'fix' code to pass one of these linters will be
unceremoniously discarded.
MIT License
Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
# CodeMirror
[![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror)
[![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror)
[![Join the chat at https://gitter.im/codemirror/CodeMirror](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/codemirror/CodeMirror)
CodeMirror is a versatile text editor implemented in JavaScript for
the browser. It is specialized for editing code, and comes with over
100 language modes and various addons that implement more advanced
editing functionality. Every language comes with fully-featured code
and syntax highlighting to help with reading and editing complex code.
A rich programming API and a CSS theming system are available for
customizing CodeMirror to fit your application, and extending it with
new functionality.
You can find more information (and the
[manual](https://codemirror.net/doc/manual.html)) on the [project
page](https://codemirror.net). For questions and discussion, use the
[discussion forum](https://discuss.codemirror.net/).
See
[CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md)
for contributing guidelines.
The CodeMirror community aims to be welcoming to everybody. We use the
[Contributor Covenant
(1.1)](http://contributor-covenant.org/version/1/1/0/) as our code of
conduct.
### Installation
Either get the [zip file](https://codemirror.net/codemirror.zip) with
the latest version, or make sure you have [Node](https://nodejs.org/)
installed and run:
npm install codemirror
**NOTE**: This is the source repository for the library, and not the
distribution channel. Cloning it is not the recommended way to install
the library, and will in fact not work unless you also run the build
step.
### Quickstart
To build the project, make sure you have Node.js installed (at least version 6)
and then `npm install`. To run, just open `index.html` in your
browser (you don't need to run a webserver). Run the tests with `npm test`.
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
var noOptions = {};
var nonWS = /[^\s\u00a0]/;
var Pos = CodeMirror.Pos;
function firstNonWS(str) {
var found = str.search(nonWS);
return found == -1 ? 0 : found;
}
CodeMirror.commands.toggleComment = function(cm) {
cm.toggleComment();
};
CodeMirror.defineExtension("toggleComment", function(options) {
if (!options) options = noOptions;
var cm = this;
var minLine = Infinity, ranges = this.listSelections(), mode = null;
for (var i = ranges.length - 1; i >= 0; i--) {
var from = ranges[i].from(), to = ranges[i].to();
if (from.line >= minLine) continue;
if (to.line >= minLine) to = Pos(minLine, 0);
minLine = from.line;
if (mode == null) {
if (cm.uncomment(from, to, options)) mode = "un";
else { cm.lineComment(from, to, options); mode = "line"; }
} else if (mode == "un") {
cm.uncomment(from, to, options);
} else {
cm.lineComment(from, to, options);
}
}
});
// Rough heuristic to try and detect lines that are part of multi-line string
function probablyInsideString(cm, pos, line) {
return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line)
}
function getMode(cm, pos) {
var mode = cm.getMode()
return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)
}
CodeMirror.defineExtension("lineComment", function(from, to, options) {
if (!options) options = noOptions;
var self = this, mode = getMode(self, from);
var firstLine = self.getLine(from.line);
if (firstLine == null || probablyInsideString(self, from, firstLine)) return;
var commentString = options.lineComment || mode.lineComment;
if (!commentString) {
if (options.blockCommentStart || mode.blockCommentStart) {
options.fullLines = true;
self.blockComment(from, to, options);
}
return;
}
var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);
var pad = options.padding == null ? " " : options.padding;
var blankLines = options.commentBlankLines || from.line == to.line;
self.operation(function() {
if (options.indent) {
var baseString = null;
for (var i = from.line; i < end; ++i) {
var line = self.getLine(i);
var whitespace = line.slice(0, firstNonWS(line));
if (baseString == null || baseString.length > whitespace.length) {
baseString = whitespace;
}
}
for (var i = from.line; i < end; ++i) {
var line = self.getLine(i), cut = baseString.length;
if (!blankLines && !nonWS.test(line)) continue;
if (line.slice(0, cut) != baseString) cut = firstNonWS(line);
self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));
}
} else {
for (var i = from.line; i < end; ++i) {
if (blankLines || nonWS.test(self.getLine(i)))
self.replaceRange(commentString + pad, Pos(i, 0));
}
}
});
});
CodeMirror.defineExtension("blockComment", function(from, to, options) {
if (!options) options = noOptions;
var self = this, mode = getMode(self, from);
var startString = options.blockCommentStart || mode.blockCommentStart;
var endString = options.blockCommentEnd || mode.blockCommentEnd;
if (!startString || !endString) {
if ((options.lineComment || mode.lineComment) && options.fullLines != false)
self.lineComment(from, to, options);
return;
}
if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return
var end = Math.min(to.line, self.lastLine());
if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;
var pad = options.padding == null ? " " : options.padding;
if (from.line > end) return;
self.operation(function() {
if (options.fullLines != false) {
var lastLineHasText = nonWS.test(self.getLine(end));
self.replaceRange(pad + endString, Pos(end));
self.replaceRange(startString + pad, Pos(from.line, 0));
var lead = options.blockCommentLead || mode.blockCommentLead;
if (lead != null) for (var i = from.line + 1; i <= end; ++i)
if (i != end || lastLineHasText)
self.replaceRange(lead + pad, Pos(i, 0));
} else {
self.replaceRange(endString, to);
self.replaceRange(startString, from);
}
});
});
CodeMirror.defineExtension("uncomment", function(from, to, options) {
if (!options) options = noOptions;
var self = this, mode = getMode(self, from);
var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);
// Try finding line comments
var lineString = options.lineComment || mode.lineComment, lines = [];
var pad = options.padding == null ? " " : options.padding, didSomething;
lineComment: {
if (!lineString) break lineComment;
for (var i = start; i <= end; ++i) {
var line = self.getLine(i);
var found = line.indexOf(lineString);
if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;
if (found == -1 && nonWS.test(line)) break lineComment;
if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;
lines.push(line);
}
self.operation(function() {
for (var i = start; i <= end; ++i) {
var line = lines[i - start];
var pos = line.indexOf(lineString), endPos = pos + lineString.length;
if (pos < 0) continue;
if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;
didSomething = true;
self.replaceRange("", Pos(i, pos), Pos(i, endPos));
}
});
if (didSomething) return true;
}
// Try block comments
var startString = options.blockCommentStart || mode.blockCommentStart;
var endString = options.blockCommentEnd || mode.blockCommentEnd;
if (!startString || !endString) return false;
var lead = options.blockCommentLead || mode.blockCommentLead;
var startLine = self.getLine(start), open = startLine.indexOf(startString)
if (open == -1) return false
var endLine = end == start ? startLine : self.getLine(end)
var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);
var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)
if (close == -1 ||
!/comment/.test(self.getTokenTypeAt(insideStart)) ||
!/comment/.test(self.getTokenTypeAt(insideEnd)) ||
self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1)
return false;
// Avoid killing block comments completely outside the selection.
// Positions of the last startString before the start of the selection, and the first endString after it.
var lastStart = startLine.lastIndexOf(startString, from.ch);
var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);
if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;
// Positions of the first endString after the end of the selection, and the last startString before it.
firstEnd = endLine.indexOf(endString, to.ch);
var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);
lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;
if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;
self.operation(function() {
self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),
Pos(end, close + endString.length));
var openEnd = open + startString.length;
if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;
self.replaceRange("", Pos(start, open), Pos(start, openEnd));
if (lead) for (var i = start + 1; i <= end; ++i) {
var line = self.getLine(i), found = line.indexOf(lead);
if (found == -1 || nonWS.test(line.slice(0, found))) continue;
var foundEnd = found + lead.length;
if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;
self.replaceRange("", Pos(i, found), Pos(i, foundEnd));
}
});
return true;
});
});
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
var nonspace = /\S/g;
var repeat = String.prototype.repeat || function (n) { return Array(n + 1).join(this); };
function continueComment(cm) {
if (cm.getOption("disableInput")) return CodeMirror.Pass;
var ranges = cm.listSelections(), mode, inserts = [];
for (var i = 0; i < ranges.length; i++) {
var pos = ranges[i].head
if (!/\bcomment\b/.test(cm.getTokenTypeAt(pos))) return CodeMirror.Pass;
var modeHere = cm.getModeAt(pos)
if (!mode) mode = modeHere;
else if (mode != modeHere) return CodeMirror.Pass;
var insert = null, line, found;
var blockStart = mode.blockCommentStart, lineCmt = mode.lineComment;
if (blockStart && mode.blockCommentContinue) {
line = cm.getLine(pos.line);
var end = line.lastIndexOf(mode.blockCommentEnd, pos.ch - mode.blockCommentEnd.length);
// 1. if this block comment ended
// 2. if this is actually inside a line comment
if (end != -1 && end == pos.ch - mode.blockCommentEnd.length ||
lineCmt && (found = line.lastIndexOf(lineCmt, pos.ch - 1)) > -1 &&
/\bcomment\b/.test(cm.getTokenTypeAt({line: pos.line, ch: found + 1}))) {
// ...then don't continue it
} else if (pos.ch >= blockStart.length &&
(found = line.lastIndexOf(blockStart, pos.ch - blockStart.length)) > -1 &&
found > end) {
// reuse the existing leading spaces/tabs/mixed
// or build the correct indent using CM's tab/indent options
if (nonspaceAfter(0, line) >= found) {
insert = line.slice(0, found);
} else {
var tabSize = cm.options.tabSize, numTabs;
found = CodeMirror.countColumn(line, found, tabSize);
insert = !cm.options.indentWithTabs ? repeat.call(" ", found) :
repeat.call("\t", (numTabs = Math.floor(found / tabSize))) +
repeat.call(" ", found - tabSize * numTabs);
}
} else if ((found = line.indexOf(mode.blockCommentContinue)) > -1 &&
found <= pos.ch &&
found <= nonspaceAfter(0, line)) {
insert = line.slice(0, found);
}
if (insert != null) insert += mode.blockCommentContinue
}
if (insert == null && lineCmt && continueLineCommentEnabled(cm)) {
if (line == null) line = cm.getLine(pos.line);
found = line.indexOf(lineCmt);
// cursor at pos 0, line comment also at pos 0 => shift it down, don't continue
if (!pos.ch && !found) insert = "";
// continue only if the line starts with an optional space + line comment
else if (found > -1 && nonspaceAfter(0, line) >= found) {
// don't continue if there's only space(s) after cursor or the end of the line
insert = nonspaceAfter(pos.ch, line) > -1;
// but always continue if the next line starts with a line comment too
if (!insert) {
var next = cm.getLine(pos.line + 1) || '',
nextFound = next.indexOf(lineCmt);
insert = nextFound > -1 && nonspaceAfter(0, next) >= nextFound || null;
}
if (insert) {
insert = line.slice(0, found) + lineCmt +
line.slice(found + lineCmt.length).match(/^\s*/)[0];
}
}
}
if (insert == null) return CodeMirror.Pass;
inserts[i] = "\n" + insert;
}
cm.operation(function() {
for (var i = ranges.length - 1; i >= 0; i--)
cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert");
});
}
function nonspaceAfter(ch, str) {
nonspace.lastIndex = ch;
var m = nonspace.exec(str);
return m ? m.index : -1;
}
function continueLineCommentEnabled(cm) {
var opt = cm.getOption("continueComments");
if (opt && typeof opt == "object")
return opt.continueLineComment !== false;
return true;
}
CodeMirror.defineOption("continueComments", null, function(cm, val, prev) {
if (prev && prev != CodeMirror.Init)
cm.removeKeyMap("continueComment");
if (val) {
var key = "Enter";
if (typeof val == "string")
key = val;
else if (typeof val == "object" && val.key)
key = val.key;
var map = {name: "continueComment"};
map[key] = continueComment;
cm.addKeyMap(map);
}
});
});
.CodeMirror-dialog {
position: absolute;
left: 0; right: 0;
background: inherit;
z-index: 15;
padding: .1em .8em;
overflow: hidden;
color: inherit;
}
.CodeMirror-dialog-top {
border-bottom: 1px solid #eee;
top: 0;
}
.CodeMirror-dialog-bottom {
border-top: 1px solid #eee;
bottom: 0;
}
.CodeMirror-dialog input {
border: none;
outline: none;
background: transparent;
width: 20em;
color: inherit;
font-family: monospace;
}
.CodeMirror-dialog button {
font-size: 70%;
}
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
// Open simple dialogs on top of an editor. Relies on dialog.css.
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
function dialogDiv(cm, template, bottom) {
var wrap = cm.getWrapperElement();
var dialog;
dialog = wrap.appendChild(document.createElement("div"));
if (bottom)
dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";
else
dialog.className = "CodeMirror-dialog CodeMirror-dialog-top";
if (typeof template == "string") {
dialog.innerHTML = template;
} else { // Assuming it's a detached DOM element.
dialog.appendChild(template);
}
CodeMirror.addClass(wrap, 'dialog-opened');
return dialog;
}
function closeNotification(cm, newVal) {
if (cm.state.currentNotificationClose)
cm.state.currentNotificationClose();
cm.state.currentNotificationClose = newVal;
}
CodeMirror.defineExtension("openDialog", function(template, callback, options) {
if (!options) options = {};
closeNotification(this, null);
var dialog = dialogDiv(this, template, options.bottom);
var closed = false, me = this;
function close(newVal) {
if (typeof newVal == 'string') {
inp.value = newVal;
} else {
if (closed) return;
closed = true;
CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');
dialog.parentNode.removeChild(dialog);
me.focus();
if (options.onClose) options.onClose(dialog);
}
}
var inp = dialog.getElementsByTagName("input")[0], button;
if (inp) {
inp.focus();
if (options.value) {
inp.value = options.value;
if (options.selectValueOnOpen !== false) {
inp.select();
}
}
if (options.onInput)
CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);});
if (options.onKeyUp)
CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);});
CodeMirror.on(inp, "keydown", function(e) {
if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }
if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {
inp.blur();
CodeMirror.e_stop(e);
close();
}
if (e.keyCode == 13) callback(inp.value, e);
});
if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close);
} else if (button = dialog.getElementsByTagName("button")[0]) {
CodeMirror.on(button, "click", function() {
close();
me.focus();
});
if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close);
button.focus();
}
return close;
});
CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) {
closeNotification(this, null);
var dialog = dialogDiv(this, template, options && options.bottom);
var buttons = dialog.getElementsByTagName("button");
var closed = false, me = this, blurring = 1;
function close() {
if (closed) return;
closed = true;
CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');
dialog.parentNode.removeChild(dialog);
me.focus();
}
buttons[0].focus();
for (var i = 0; i < buttons.length; ++i) {
var b = buttons[i];
(function(callback) {
CodeMirror.on(b, "click", function(e) {
CodeMirror.e_preventDefault(e);
close();
if (callback) callback(me);
});
})(callbacks[i]);
CodeMirror.on(b, "blur", function() {
--blurring;
setTimeout(function() { if (blurring <= 0) close(); }, 200);
});
CodeMirror.on(b, "focus", function() { ++blurring; });
}
});
/*
* openNotification
* Opens a notification, that can be closed with an optional timer
* (default 5000ms timer) and always closes on click.
*
* If a notification is opened while another is opened, it will close the
* currently opened one and open the new one immediately.
*/
CodeMirror.defineExtension("openNotification", function(template, options) {
closeNotification(this, close);
var dialog = dialogDiv(this, template, options && options.bottom);
var closed = false, doneTimer;
var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000;
function close() {
if (closed) return;
closed = true;
clearTimeout(doneTimer);
CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');
dialog.parentNode.removeChild(dialog);
}
CodeMirror.on(dialog, 'click', function(e) {
CodeMirror.e_preventDefault(e);
close();
});
if (duration)
doneTimer = setTimeout(close, duration);
return close;
});
});
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"))
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod)
else // Plain browser env
mod(CodeMirror)
})(function(CodeMirror) {
"use strict"
CodeMirror.defineOption("autoRefresh", false, function(cm, val) {
if (cm.state.autoRefresh) {
stopListening(cm, cm.state.autoRefresh)
cm.state.autoRefresh = null
}
if (val && cm.display.wrapper.offsetHeight == 0)
startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})
})
function startListening(cm, state) {
function check() {
if (cm.display.wrapper.offsetHeight) {
stopListening(cm, state)
if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)
cm.refresh()
} else {
state.timeout = setTimeout(check, state.delay)
}
}
state.timeout = setTimeout(check, state.delay)
state.hurry = function() {
clearTimeout(state.timeout)
state.timeout = setTimeout(check, 50)
}
CodeMirror.on(window, "mouseup", state.hurry)
CodeMirror.on(window, "keyup", state.hurry)
}
function stopListening(_cm, state) {
clearTimeout(state.timeout)
CodeMirror.off(window, "mouseup", state.hurry)
CodeMirror.off(window, "keyup", state.hurry)
}
});
.CodeMirror-fullscreen {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
height: auto;
z-index: 9;
}
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineOption("fullScreen", false, function(cm, val, old) {
if (old == CodeMirror.Init) old = false;
if (!old == !val) return;
if (val) setFullscreen(cm);
else setNormal(cm);
});
function setFullscreen(cm) {
var wrap = cm.getWrapperElement();
cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,
width: wrap.style.width, height: wrap.style.height};
wrap.style.width = "";
wrap.style.height = "auto";
wrap.className += " CodeMirror-fullscreen";
document.documentElement.style.overflow = "hidden";
cm.refresh();
}
function setNormal(cm) {
var wrap = cm.getWrapperElement();
wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, "");
document.documentElement.style.overflow = "";
var info = cm.state.fullScreenRestore;
wrap.style.width = info.width; wrap.style.height = info.height;
window.scrollTo(info.scrollLeft, info.scrollTop);
cm.refresh();
}
});
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function (mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function (CodeMirror) {
CodeMirror.defineExtension("addPanel", function (node, options) {
options = options || {};
if (!this.state.panels) initPanels(this);
var info = this.state.panels;
var wrapper = info.wrapper;
var cmWrapper = this.getWrapperElement();
var replace = options.replace instanceof Panel && !options.replace.cleared;
if (options.after instanceof Panel && !options.after.cleared) {
wrapper.insertBefore(node, options.before.node.nextSibling);
} else if (options.before instanceof Panel && !options.before.cleared) {
wrapper.insertBefore(node, options.before.node);
} else if (replace) {
wrapper.insertBefore(node, options.replace.node);
options.replace.clear(true);
} else if (options.position == "bottom") {
wrapper.appendChild(node);
} else if (options.position == "before-bottom") {
wrapper.insertBefore(node, cmWrapper.nextSibling);
} else if (options.position == "after-top") {
wrapper.insertBefore(node, cmWrapper);
} else {
wrapper.insertBefore(node, wrapper.firstChild);
}
var height = (options && options.height) || node.offsetHeight;
var panel = new Panel(this, node, options, height);
info.panels.push(panel);
this.setSize();
if (options.stable && isAtTop(this, node))
this.scrollTo(null, this.getScrollInfo().top + height);
return panel;
});
function Panel(cm, node, options, height) {
this.cm = cm;
this.node = node;
this.options = options;
this.height = height;
this.cleared = false;
}
/* when skipRemove is true, clear() was called from addPanel().
* Thus removePanels() should not be called (issue 5518) */
Panel.prototype.clear = function (skipRemove) {
if (this.cleared) return;
this.cleared = true;
var info = this.cm.state.panels;
info.panels.splice(info.panels.indexOf(this), 1);
this.cm.setSize();
if (this.options.stable && isAtTop(this.cm, this.node))
this.cm.scrollTo(null, this.cm.getScrollInfo().top - this.height)
info.wrapper.removeChild(this.node);
if (info.panels.length == 0 && !skipRemove) removePanels(this.cm);
};
Panel.prototype.changed = function () {
this.height = this.node.getBoundingClientRect().height;
this.cm.setSize();
};
function initPanels(cm) {
var wrap = cm.getWrapperElement();
var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle;
var height = parseInt(style.height);
var info = cm.state.panels = {
setHeight: wrap.style.height,
panels: [],
wrapper: document.createElement("div")
};
wrap.parentNode.insertBefore(info.wrapper, wrap);
var hasFocus = cm.hasFocus();
info.wrapper.appendChild(wrap);
if (hasFocus) cm.focus();
cm._setSize = cm.setSize;
if (height != null) cm.setSize = function (width, newHeight) {
if (!newHeight) newHeight = info.wrapper.offsetHeight;
info.setHeight = newHeight;
if (typeof newHeight != "number") {
var px = /^(\d+\.?\d*)px$/.exec(newHeight);
if (px) {
newHeight = Number(px[1]);
} else {
info.wrapper.style.height = newHeight;
newHeight = info.wrapper.offsetHeight;
}
}
var editorheight = newHeight - info.panels
.map(function (p) { return p.node.getBoundingClientRect().height; })
.reduce(function (a, b) { return a + b; }, 0);
cm._setSize(width, editorheight);
height = newHeight;
};
}
function removePanels(cm) {
var info = cm.state.panels;
cm.state.panels = null;
var wrap = cm.getWrapperElement();
info.wrapper.parentNode.replaceChild(wrap, info.wrapper);
wrap.style.height = info.setHeight;
cm.setSize = cm._setSize;
cm.setSize();
}
function isAtTop(cm, dom) {
for (var sibling = dom.nextSibling; sibling; sibling = sibling.nextSibling)
if (sibling == cm.getWrapperElement()) return true
return false
}
});
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
CodeMirror.defineOption("placeholder", "", function(cm, val, old) {
var prev = old && old != CodeMirror.Init;
if (val && !prev) {
cm.on("blur", onBlur);
cm.on("change", onChange);
cm.on("swapDoc", onChange);
onChange(cm);
} else if (!val && prev) {
cm.off("blur", onBlur);
cm.off("change", onChange);
cm.off("swapDoc", onChange);
clearPlaceholder(cm);
var wrapper = cm.getWrapperElement();
wrapper.className = wrapper.className.replace(" CodeMirror-empty", "");
}
if (val && !cm.hasFocus()) onBlur(cm);
});
function clearPlaceholder(cm) {
if (cm.state.placeholder) {
cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);
cm.state.placeholder = null;
}
}
function setPlaceholder(cm) {
clearPlaceholder(cm);
var elt = cm.state.placeholder = document.createElement("pre");
elt.style.cssText = "height: 0; overflow: visible";
elt.style.direction = cm.getOption("direction");
elt.className = "CodeMirror-placeholder CodeMirror-line-like";
var placeHolder = cm.getOption("placeholder")
if (typeof placeHolder == "string") placeHolder = document.createTextNode(placeHolder)
elt.appendChild(placeHolder)
cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);
}
function onBlur(cm) {
if (isEmpty(cm)) setPlaceholder(cm);
}
function onChange(cm) {
var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);
wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : "");
if (empty) setPlaceholder(cm);
else clearPlaceholder(cm);
}
function isEmpty(cm) {
return (cm.lineCount() === 1) && (cm.getLine(0) === "");
}
});
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment