{"action":"created","issue":{"url":"https://api.github.com/repos/BobBuildTool/bob/issues/70","repository_url":"https://api.github.com/repos/BobBuildTool/bob","labels_url":"https://api.github.com/repos/BobBuildTool/bob/issues/70/labels{/name}","comments_url":"https://api.github.com/repos/BobBuildTool/bob/issues/70/comments","events_url":"https://api.github.com/repos/BobBuildTool/bob/issues/70/events","html_url":"https://github.com/BobBuildTool/bob/pull/70","id":188741109,"number":70,"title":"Replaced the old StringParser with a new one.","user":{"login":"karheinz","id":986894,"avatar_url":"https://avatars.githubusercontent.com/u/986894?v=3","gravatar_id":"","url":"https://api.github.com/users/karheinz","html_url":"https://github.com/karheinz","followers_url":"https://api.github.com/users/karheinz/followers","following_url":"https://api.github.com/users/karheinz/following{/other_user}","gists_url":"https://api.github.com/users/karheinz/gists{/gist_id}","starred_url":"https://api.github.com/users/karheinz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karheinz/subscriptions","organizations_url":"https://api.github.com/users/karheinz/orgs","repos_url":"https://api.github.com/users/karheinz/repos","events_url":"https://api.github.com/users/karheinz/events{/privacy}","received_events_url":"https://api.github.com/users/karheinz/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2016-11-11T11:33:15Z","updated_at":"2016-11-15T19:18:27Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/BobBuildTool/bob/pulls/70","html_url":"https://github.com/BobBuildTool/bob/pull/70","diff_url":"https://github.com/BobBuildTool/bob/pull/70.diff","patch_url":"https://github.com/BobBuildTool/bob/pull/70.patch"},"body":"The new StringParser is actually a suite of parsers and tokenizers.\r\nWhich parser and tokenizer is used depends on the actual context.\r\nThe behaviour is controlled by rules configured within each tokenizer.\r\nAfter the tokenizer has finished, the corresponding parser checks, if\r\nthe detected tokens match the grammar of the actual context.  If not, a\r\nParseError with the detected tokens and their textual values is raised.\r\n\r\nThe hierarchical structure allows solid nesting of different contexts.\r\nIf required, tokens and grammar of each context can easily be modified.\r\nThe evaluation of the parse result is done in a seperate function.\r\n\r\nThis new implementation adds some more parameter expansion capabilities:\r\n\r\n    * substring removal (%, %%, #, ##)\r\n    * search and replace (//pattern/string, /pattern/string)\r\n    * case modifications (^/^^/,/,,)\r\n\r\nWithin the patterns character classes ([...]) and wildcards (*, ?)\r\ncan be used. Variable substitution is also done within patterns."},"comment":{"url":"https://api.github.com/repos/BobBuildTool/bob/issues/comments/260738558","html_url":"https://github.com/BobBuildTool/bob/pull/70#issuecomment-260738558","issue_url":"https://api.github.com/repos/BobBuildTool/bob/issues/70","id":260738558,"user":{"login":"karheinz","id":986894,"avatar_url":"https://avatars.githubusercontent.com/u/986894?v=3","gravatar_id":"","url":"https://api.github.com/users/karheinz","html_url":"https://github.com/karheinz","followers_url":"https://api.github.com/users/karheinz/followers","following_url":"https://api.github.com/users/karheinz/following{/other_user}","gists_url":"https://api.github.com/users/karheinz/gists{/gist_id}","starred_url":"https://api.github.com/users/karheinz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karheinz/subscriptions","organizations_url":"https://api.github.com/users/karheinz/orgs","repos_url":"https://api.github.com/users/karheinz/repos","events_url":"https://api.github.com/users/karheinz/events{/privacy}","received_events_url":"https://api.github.com/users/karheinz/received_events","type":"User","site_admin":false},"created_at":"2016-11-15T19:18:27Z","updated_at":"2016-11-15T19:18:27Z","body":"The parser works correct in both cases! Maybe we should introduce a grammar (parser class) for if-conditions.\r\n\r\nre.compile( '^{cmd}|{var}|{text}$'.format(...) )\r\n\r\nCommand args could be stripped before evaluation. This would solve the first case."}}
{"actor":{"display_login":"karheinz"}}