Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DD0DEE750 for ; Wed, 30 Jan 2013 00:06:11 +0000 (UTC) Received: (qmail 13210 invoked by uid 500); 30 Jan 2013 00:06:06 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 13100 invoked by uid 500); 30 Jan 2013 00:06:06 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 12683 invoked by uid 99); 30 Jan 2013 00:06:06 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Jan 2013 00:06:06 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 0F4B98273D3; Wed, 30 Jan 2013 00:06:06 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bfederle@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [36/50] [abbrv] git commit: cli: Add pygments based lexical output processing Message-Id: <20130130000606.0F4B98273D3@tyr.zones.apache.org> Date: Wed, 30 Jan 2013 00:06:06 +0000 (UTC) cli: Add pygments based lexical output processing Signed-off-by: Rohit Yadav Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ad3692cb Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ad3692cb Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ad3692cb Branch: refs/heads/ui-quick-view-v2 Commit: ad3692cbba73f702e18afc0a8fe21365e78f34ed Parents: 59d01bf Author: Rohit Yadav Authored: Mon Jan 28 17:48:49 2013 -0800 Committer: Rohit Yadav Committed: Mon Jan 28 17:48:49 2013 -0800 ---------------------------------------------------------------------- tools/cli/cloudmonkey/lexer.py | 121 +++++++++++++++++++++++++++++++++++ 1 files changed, 121 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ad3692cb/tools/cli/cloudmonkey/lexer.py ---------------------------------------------------------------------- diff --git a/tools/cli/cloudmonkey/lexer.py b/tools/cli/cloudmonkey/lexer.py new file mode 100644 index 0000000..fdd95c9 --- /dev/null +++ b/tools/cli/cloudmonkey/lexer.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +try: + from pygments import highlight + from pygments.console import ansiformat + from pygments.formatter import Formatter + from pygments.formatters import Terminal256Formatter + from pygments.lexer import bygroups, include, RegexLexer + from pygments.token import * + + import sys +except ImportError, e: + print e + + +MONKEY_COLORS = { + Token: '', + Whitespace: 'reset', + Text: 'reset', + + Name: 'green', + Operator: 'teal', + Operator.Word: 'lightgray', + String: 'purple', + + Keyword: '_red_', + Error: 'red', + Literal: 'yellow', + Number: 'blue', +} + + +def get_colorscheme(): + return MONKEY_COLORS + + +class MonkeyLexer(RegexLexer): + keywords = ['[a-z]*id', '[a-zA-Z]*:'] + attributes = ['[Tt]rue', '[Ff]alse'] + params = ['[a-z]*[Nn]ame', 'type', '[Ss]tate'] + + uuid_rgx = r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + date_rgx = r'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9:]{8}-[0-9]{4}' + + def makelistre(lis): + return r'(' + r'|'.join(lis) + r')' + + tokens = { + 'root': [ + (r' ', Whitespace), + (date_rgx, Number), + (uuid_rgx, Literal), + (r'(?:\b\d+\b(?:-\b\d+|%)?)', Number), + (r'^[-=]*\n', Operator.Word), + (r'Error', Error), + (makelistre(keywords), Keyword), + (makelistre(attributes), Literal), + (makelistre(params) + r'( = )(.*)', bygroups(Name, Operator, + String)), + (makelistre(params), Name), + (r'(^[a-zA-Z]* )(=)', bygroups(Name, Operator)), + (r'\S+', Text), + ] + } + + def analyse_text(text): + npos = text.find('\n') + if npos < 3: + return False + return text[0] == '[' and text[npos - 1] == ']' + + +class MonkeyFormatter(Formatter): + def __init__(self, **options): + Formatter.__init__(self, **options) + self.colorscheme = get_colorscheme() + + def format(self, tokensource, outfile): + self.encoding = outfile.encoding + return Formatter.format(self, tokensource, outfile) + + def format_unencoded(self, tokensource, outfile): + for ttype, value in tokensource: + color = self.colorscheme.get(ttype) + while color is None: + ttype = ttype[:-1] + color = self.colorscheme.get(ttype) + if color: + spl = value.split('\n') + for line in spl[:-1]: + if line: + outfile.write(ansiformat(color, line)) + outfile.write('\n') + if spl[-1]: + outfile.write(ansiformat(color, spl[-1])) + else: + outfile.write(value) + + +def monkeyprint(text): + fmter = MonkeyFormatter() + lexer = MonkeyLexer() + lexer.encoding = 'utf-8' + fmter.encoding = 'utf-8' + highlight(text, lexer, fmter, sys.stdout)