xaizek / zograscope (License: AGPLv3 only) (since 2018-12-07)
Mainly a syntax-aware diff that also provides a number of additional tools.
<root> / src / mtypes.cpp (f2242970831dbb422c8d548cf325595110420883) (1,939B) (mode 100644) [raw]
// Copyright (C) 2018 xaizek <xaizek@posteo.net>
//
// This file is part of zograscope.
//
// zograscope is free software: you can redistribute it and/or modify
// it under the terms of version 3 of the GNU Affero General Public License as
// published by the Free Software Foundation.
//
// zograscope is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with zograscope.  If not, see <http://www.gnu.org/licenses/>.

#include "mtypes.hpp"

#include <cassert>

#include <ostream>

std::ostream &
operator<<(std::ostream &os, MType mtype)
{
    switch (mtype) {
        case MType::Other:       return (os << "Other");
        case MType::Declaration: return (os << "Declaration");
        case MType::Statement:   return (os << "Statement");
        case MType::Function:    return (os << "Function");
        case MType::Call:        return (os << "Call");
        case MType::Parameter:   return (os << "Parameter");
        case MType::Comment:     return (os << "Comment");
        case MType::Directive:   return (os << "Directive");
        case MType::Block:       return (os << "Block");
    }

    assert(false && "Unhandled enumeration item");
    return (os << "<UNKNOWN:" << static_cast<int>(mtype) << '>');
}

bool
canNest(MType mtype)
{
    switch (mtype) {
        case MType::Call:
        case MType::Block:
            return true;
        case MType::Other:
        case MType::Declaration:
        case MType::Statement:
        case MType::Function:
        case MType::Parameter:
        case MType::Comment:
        case MType::Directive:
            return false;
    }

    assert(false && "Unhandled enumeration item");
    return false;
}
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/zograscope

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/zograscope

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master