コード例 #1
0
ファイル: QueryEditor.cs プロジェクト: kissge/StarryEyes
 private bool CheckPreviousIsVariable(Token token)
 {
     if (token.Type == TokenType.CloseBracket) return true;
     if (token.Type == TokenType.String) return false;
     if (token.Type == TokenType.Literal)
     {
         if (String.IsNullOrEmpty(token.Value))
         {
             return true;
         }
         #region determine defined variables
         switch (token.Value.ToLower())
         {
             case "we":
             case "our":
             case "us":
             case "@":
             case "block":
             case "blocks":
             case "blocking":
             case "blockings":
             case "user":
             case "retweeter":
             case "protected":
             case "isprotected":
             case "is_protected":
             case "verified":
             case "isverified":
             case "is_verified":
             case "translator":
             case "istranslator":
             case "is_translator":
             case "contributorsenabled":
             case "contributors_enabled":
             case "iscontributorsenabled":
             case "is_contributors_enabled":
             case "geoenabled":
             case "geo_enabled":
             case "isgeoenabled":
             case "is_geo_enabled":
             case "id":
             case "status":
             case "statuses":
             case "statuscount":
             case "status_count":
             case "statusescount":
             case "statuses_count":
             case "friend":
             case "friends":
             case "following":
             case "followings":
             case "friendscount":
             case "friends_count":
             case "followingscount":
             case "followings_count":
             case "follower":
             case "followers":
             case "followerscount":
             case "followers_count":
             case "fav":
             case "favs":
             case "favorite":
             case "favorites":
             case "favscount":
             case "favs_count":
             case "favoritescount":
             case "favorites_count":
             case "list":
             case "listed":
             case "listcount":
             case "list_count":
             case "listedcount":
             case "listed_count":
             case "screenname":
             case "screen_name":
             case "name":
             case "username":
             case "bio":
             case "desc":
             case "description":
             case "loc":
             case "location":
             case "lang":
             case "language":
             case "dm":
             case "isdm":
             case "is_dm":
             case "message":
             case "ismessage":
             case "is_message":
             case "directmessage":
             case "direct_message":
             case "isdirectmessage":
             case "is_direct_message":
             case "rt":
             case "retweet":
             case "isretweet":
             case "is_retweet":
             case "replyto":
             case "reply_to":
             case "inreplyto":
             case "in_reply_to":
             case "mention":
             case "to":
             case "favorer":
             case "favorers":
             case "rts":
             case "retweets":
             case "retweeters":
             case "text":
             case "body":
             case "via":
             case "from":
             case "source":
             case "client":
                 return true;
         }
         #endregion
         switch (token.Value[0])
         {
             case '@':
             case '#':
                 return true;
         }
         long n;
         return Int64.TryParse(token.Value, out n);
     }
     return false;
 }
コード例 #2
0
ファイル: QueryCompiler.cs プロジェクト: Mojopon/StarryEyes
 private static ValueBase GetValue(TokenReader reader)
 {
     var literal = reader.LookAhead();
     if (literal.Type == TokenType.String)
     {
         // immediate string value
         return new StringValue(reader.AssertGet(TokenType.String).Value);
     }
     if (literal.Type == TokenType.OperatorMultiple)
     {
         // for parsing asterisk user
         var pseudo = reader.AssertGet(TokenType.OperatorMultiple);
         literal = new Token(TokenType.Literal, "*", pseudo.DebugIndex);
     }
     else
     {
         literal = reader.AssertGet(TokenType.Literal);
     }
     // check first letter
     switch (literal.Value[0])
     {
         case '@':
             // user screen name
             return GetAccountValue(literal.Value.Substring(1), reader);
         case '#':
             // user id
             return GetAccountValue(literal.Value, reader);
     }
     // check first layers
     switch (literal.Value.ToLower())
     {
         case "*":
         case "we":
         case "our":
         case "us":
             return GetAccountValue("*", reader);
         case "@":
             reader.AssertGet(TokenType.Period);
             return GetAccountValue(reader.AssertGet(TokenType.Literal).Value, reader);
         case "user":
         case "retweeter":
             return GetUserValue(literal.Value == "retweeter", reader);
         case "list":
             return GetListValue(reader);
         default:
             long iv;
             if (Int64.TryParse(literal.Value, out iv))
             {
                 return new NumericValue(iv);
             }
             return GetStatusValue(literal.Value, reader);
     }
 }
コード例 #3
0
ファイル: QueryCompiler.cs プロジェクト: Aeri912/StarryEyes
 private static ValueBase InstantiateValue(TokenReader reader)
 {
     Token literal = reader.LookAhead();
     if (literal.Type == TokenType.String)
     {
         // immediate string value
         return new StringValue(reader.AssertGet(TokenType.String).Value);
     }
     if (literal.Type == TokenType.OperatorMultiple)
     {
         // for parsing asterisk user
         Token pseudo = reader.AssertGet(TokenType.OperatorMultiple);
         literal = new Token(TokenType.Literal, "*", pseudo.DebugIndex);
     }
     else
     {
         literal = reader.AssertGet(TokenType.Literal);
     }
     // check first layers
     switch (literal.Value)
     {
         case "*":
             return InstantiateLocalUsers("*", reader);
         case "local":
             reader.AssertGet(TokenType.Period);
             return InstantiateLocalUsers(reader.AssertGet(TokenType.Literal).Value, reader);
         case "user":
         case "retweeter":
             return InstantiateUserValue(literal.Value == "retweeter", reader);
         default:
             long iv;
             if (Int64.TryParse(literal.Value, out iv))
             {
                 return new NumericValue(iv);
             }
             return InstantiateStatusValue(literal.Value, reader);
     }
 }