public List<ExternalChangeCommand> parseFile(InputStream inputStream, Settings settings) {
        if (settings.debug) {
            EobLogger.println("Parsing external data...");
        }

        final List<ExternalChangeCommand> result = new ArrayList<ExternalChangeCommand>();
        try {
            Scanner scanner = new Scanner(inputStream, "UTF-8");
            try {
                int rowPos = 0;
                while (scanner.hasNextLine()) {
                    rowPos++;
                    final String commandStr = scanner.nextLine().trim();
                    if (commandStr.length() == 0) {
                        continue;
                    }

                    boolean executed = false;
                    for (ExternalChangeCommand externalChangeCommand : registeredCommands) {
                        final ExternalChangeCommand changeCommand = externalChangeCommand.parse(rowPos, commandStr);
                        if (changeCommand != null) {
                            if (!(changeCommand instanceof CommentCommand)) {
                                result.add(changeCommand);
                            }
                            executed = true;
                        }
                    }

                    if (!executed) {
                        EobLogger.println("Command at row " + rowPos + " was supported. Row: " + commandStr);
                    }
                }
            } finally {
                scanner.close();
            }
        } catch (Exception e) {
            EobLogger.println("[Error] " + e.getMessage());
        }

        if (settings.debug) {
            EobLogger.println("External changes count: " + result.size());
        }
        return result;
    }