Permalink
Please sign in to comment.
Showing
with
36,306 additions
and 2 deletions.
- +29 −0 README.md
- +1 −0 lib/widget.js
- +149 −0 lib/widgets/bigtext.js
- +10 −2 lib/widgets/video.js
- +30 −0 test/widget-bigtext.js
- +1 −0 usr/fonts/AUTHORS
- +94 −0 usr/fonts/LICENSE
- +340 −0 usr/fonts/README
- +17,826 −0 usr/fonts/ter-u14b.json
- +17,826 −0 usr/fonts/ter-u14n.json
| @@ -0,0 +1,149 @@ | ||
| +/** | ||
| + * bigtext.js - bigtext element for blessed | ||
| + * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License). | ||
| + * https://github.com/chjj/blessed | ||
| + */ | ||
| + | ||
| +/** | ||
| + * Modules | ||
| + */ | ||
| + | ||
| +var fs = require('fs'); | ||
| + | ||
| +var helpers = require('../helpers'); | ||
| + | ||
| +var Node = require('./node'); | ||
| +var Box = require('./box'); | ||
| + | ||
| +/** | ||
| + * BigText | ||
| + */ | ||
| + | ||
| +function BigText(options) { | ||
| + if (!(this instanceof Node)) { | ||
| + return new BigText(options); | ||
| + } | ||
| + options = options || {}; | ||
| + options.font = options.font | ||
| + || __dirname + '/../../usr/fonts/ter-u14n.json'; | ||
| + options.fontBold = options.font | ||
| + || __dirname + '/../../usr/fonts/ter-u14b.json'; | ||
| + this.fch = options.fch; | ||
| + this.ratio = {}; | ||
| + this.font = this.loadFont(options.font); | ||
| + this.fontBold = this.loadFont(options.font); | ||
| + Box.call(this, options); | ||
| + if (this.style.bold) { | ||
| + this.font = this.fontBold; | ||
| + } | ||
| +} | ||
| + | ||
| +BigText.prototype.__proto__ = Box.prototype; | ||
| + | ||
| +BigText.prototype.type = 'bigtext'; | ||
| + | ||
| +BigText.prototype.loadFont = function(filename) { | ||
| + var self = this | ||
| + , data | ||
| + , font; | ||
| + | ||
| + data = JSON.parse(fs.readFileSync(filename, 'utf8')); | ||
| + | ||
| + this.ratio.width = data.width; | ||
| + this.ratio.height = data.height; | ||
| + | ||
| + function convertLetter(ch, lines) { | ||
| + while (lines.length > self.ratio.height) { | ||
| + lines.shift(); | ||
| + lines.pop(); | ||
| + } | ||
| + lines = lines.map(function(line) { | ||
| + var chs = line.split(''); | ||
| + chs = chs.map(function(ch) { | ||
| + return ch === ' ' ? 0 : 1; | ||
| + }); | ||
| + while (chs.length < self.ratio.width) chs.push(0); | ||
| + return chs; | ||
| + }); | ||
| + while (lines.length < self.ratio.height) lines.push([0, 0, 0, 0, 0, 0, 0, 0]); | ||
| + return lines; | ||
| + } | ||
| + | ||
| + font = Object.keys(data.glyphs).reduce(function(out, ch) { | ||
| + var lines = data.glyphs[ch].map; | ||
| + out[ch] = convertLetter(ch, lines); | ||
| + return out; | ||
| + }, {}); | ||
| + | ||
| + delete font[' ']; | ||
| + | ||
| + return font; | ||
| +}; | ||
| + | ||
| +BigText.prototype.setContent = function(content) { | ||
| + this.content = ''; | ||
| + this.text = content || ''; | ||
| +}; | ||
| + | ||
| +BigText.prototype.render = function() { | ||
| + if (this.position.width == null || this._shrinkWidth) { | ||
| + // if (this.width - this.iwidth < this.ratio.width * this.text.length + 1) { | ||
| + this.position.width = this.ratio.width * this.text.length + 1; | ||
| + this._shrinkWidth = true; | ||
| + // } | ||
| + } | ||
| + if (this.position.height == null || this._shrinkHeight) { | ||
| + // if (this.height - this.iheight < this.ratio.height + 0) { | ||
| + this.position.height = this.ratio.height + 0; | ||
| + this._shrinkHeight = true; | ||
| + // } | ||
| + } | ||
| + | ||
| + var coords = this._render(); | ||
| + if (!coords) return; | ||
| + | ||
| + var lines = this.screen.lines | ||
| + , left = coords.xi + this.ileft | ||
| + , top = coords.yi + this.itop | ||
| + , right = coords.xl - this.iright | ||
| + , bottom = coords.yl - this.ibottom; | ||
| + | ||
| + var dattr = this.sattr(this.style) | ||
| + , bg = dattr & 0x1ff | ||
| + , fg = (dattr >> 9) & 0x1ff | ||
| + , flags = (dattr >> 18) & 0x1ff | ||
| + , attr = (flags << 18) | (bg << 9) | fg; | ||
| + | ||
| + for (var x = left, i = 0; x < right; x += this.ratio.width, i++) { | ||
| + var ch = this.text[i]; | ||
| + if (!ch) break; | ||
| + var map = this.font[ch]; | ||
| + if (!map) continue; | ||
| + for (var y = top; y < Math.min(bottom, top + this.ratio.height); y++) { | ||
| + if (!lines[y]) continue; | ||
| + var mline = map[y - top]; | ||
| + if (!mline) continue; | ||
| + for (var mx = 0; mx < this.ratio.width; mx++) { | ||
| + var mcell = mline[mx]; | ||
| + if (mcell == null) break; | ||
| + if (this.fch && this.fch !== ' ') { | ||
| + lines[y][x + mx][0] = dattr; | ||
| + lines[y][x + mx][1] = mcell === 1 ? this.fch : ' '; | ||
| + } else { | ||
| + lines[y][x + mx][0] = mcell === 1 ? attr : dattr; | ||
| + lines[y][x + mx][1] = ' '; | ||
| + } | ||
| + } | ||
| + lines[y].dirty = true; | ||
| + } | ||
| + } | ||
| + | ||
| + return coords; | ||
| +}; | ||
| + | ||
| +/** | ||
| + * Expose | ||
| + */ | ||
| + | ||
| +module.exports = BigText; | ||
| + |
| @@ -0,0 +1,30 @@ | ||
| +var blessed = require('../') | ||
| + , screen; | ||
| + | ||
| +screen = blessed.screen({ | ||
| + dump: __dirname + '/logs/bigtext.log', | ||
| + smartCSR: true | ||
| +}); | ||
| + | ||
| +var box = blessed.bigtext({ | ||
| + parent: screen, | ||
| + content: 'Hello', | ||
| + shrink: true, | ||
| + width: '80%', | ||
| + // height: '80%', | ||
| + height: 'shrink', | ||
| + // width: 'shrink', | ||
| + border: 'line', | ||
| + fch: ' ', | ||
| + style: { | ||
| + fg: 'red', | ||
| + bold: false | ||
| + } | ||
| +}); | ||
| + | ||
| +screen.key('q', function() { | ||
| + return process.exit(0); | ||
| +}); | ||
| + | ||
| +screen.render(); | ||
| + |
| @@ -0,0 +1 @@ | ||
| +Dimitar Zhekov <[email protected]> |
| @@ -0,0 +1,94 @@ | ||
| +Copyright (c) 2014 Dimitar Toshkov Zhekov, | ||
| +with Reserved Font Name "Terminus Font". | ||
| + | ||
| +This Font Software is licensed under the SIL Open Font License, Version 1.1. | ||
| +This license is copied below, and is also available with a FAQ at: | ||
| +http://scripts.sil.org/OFL | ||
| + | ||
| + | ||
| +----------------------------------------------------------- | ||
| +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 | ||
| +----------------------------------------------------------- | ||
| + | ||
| +PREAMBLE | ||
| +The goals of the Open Font License (OFL) are to stimulate worldwide | ||
| +development of collaborative font projects, to support the font creation | ||
| +efforts of academic and linguistic communities, and to provide a free and | ||
| +open framework in which fonts may be shared and improved in partnership | ||
| +with others. | ||
| + | ||
| +The OFL allows the licensed fonts to be used, studied, modified and | ||
| +redistributed freely as long as they are not sold by themselves. The | ||
| +fonts, including any derivative works, can be bundled, embedded, | ||
| +redistributed and/or sold with any software provided that any reserved | ||
| +names are not used by derivative works. The fonts and derivatives, | ||
| +however, cannot be released under any other type of license. The | ||
| +requirement for fonts to remain under this license does not apply | ||
| +to any document created using the fonts or their derivatives. | ||
| + | ||
| +DEFINITIONS | ||
| +"Font Software" refers to the set of files released by the Copyright | ||
| +Holder(s) under this license and clearly marked as such. This may | ||
| +include source files, build scripts and documentation. | ||
| + | ||
| +"Reserved Font Name" refers to any names specified as such after the | ||
| +copyright statement(s). | ||
| + | ||
| +"Original Version" refers to the collection of Font Software components as | ||
| +distributed by the Copyright Holder(s). | ||
| + | ||
| +"Modified Version" refers to any derivative made by adding to, deleting, | ||
| +or substituting -- in part or in whole -- any of the components of the | ||
| +Original Version, by changing formats or by porting the Font Software to a | ||
| +new environment. | ||
| + | ||
| +"Author" refers to any designer, engineer, programmer, technical | ||
| +writer or other person who contributed to the Font Software. | ||
| + | ||
| +PERMISSION & CONDITIONS | ||
| +Permission is hereby granted, free of charge, to any person obtaining | ||
| +a copy of the Font Software, to use, study, copy, merge, embed, modify, | ||
| +redistribute, and sell modified and unmodified copies of the Font | ||
| +Software, subject to the following conditions: | ||
| + | ||
| +1) Neither the Font Software nor any of its individual components, | ||
| +in Original or Modified Versions, may be sold by itself. | ||
| + | ||
| +2) Original or Modified Versions of the Font Software may be bundled, | ||
| +redistributed and/or sold with any software, provided that each copy | ||
| +contains the above copyright notice and this license. These can be | ||
| +included either as stand-alone text files, human-readable headers or | ||
| +in the appropriate machine-readable metadata fields within text or | ||
| +binary files as long as those fields can be easily viewed by the user. | ||
| + | ||
| +3) No Modified Version of the Font Software may use the Reserved Font | ||
| +Name(s) unless explicit written permission is granted by the corresponding | ||
| +Copyright Holder. This restriction only applies to the primary font name as | ||
| +presented to the users. | ||
| + | ||
| +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font | ||
| +Software shall not be used to promote, endorse or advertise any | ||
| +Modified Version, except to acknowledge the contribution(s) of the | ||
| +Copyright Holder(s) and the Author(s) or with their explicit written | ||
| +permission. | ||
| + | ||
| +5) The Font Software, modified or unmodified, in part or in whole, | ||
| +must be distributed entirely under this license, and must not be | ||
| +distributed under any other license. The requirement for fonts to | ||
| +remain under this license does not apply to any document created | ||
| +using the Font Software. | ||
| + | ||
| +TERMINATION | ||
| +This license becomes null and void if any of the above conditions are | ||
| +not met. | ||
| + | ||
| +DISCLAIMER | ||
| +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
| +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | ||
| +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | ||
| +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE | ||
| +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||
| +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL | ||
| +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM | ||
| +OTHER DEALINGS IN THE FONT SOFTWARE. |
Oops, something went wrong.
0 comments on commit
2b1203b