Skip to content

Instantly share code, notes, and snippets.

@ivanguy
Created March 17, 2015 21:46
Show Gist options
  • Select an option

  • Save ivanguy/d6a1a6934317edc7b24a to your computer and use it in GitHub Desktop.

Select an option

Save ivanguy/d6a1a6934317edc7b24a to your computer and use it in GitHub Desktop.
<component name="ProjectDictionaryState">
<dictionary name="ivan">
<words>
<w>glavnoe</w>
<w>nadmenu</w>
<w>podmenu</w>
<w>trpstr</w>
</words>
</dictionary>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DaemonCodeAnalyzer">
<disable_hints />
</component>
<component name="DependencyValidationManager">
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</component>
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectModuleManager">
<modules />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.4.2 (/usr/bin/python3.4)" project-jdk-type="Python SDK" />
<component name="RunManager">
<list size="0" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/2.iml" filepath="$PROJECT_DIR$/.idea/2.iml" />
</modules>
</component>
</project>
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="4a6be4a1-b9e9-4174-b1c2-296e9d13bbff" name="Default" comment="" />
<ignored path="2.iws" />
<ignored path=".idea/workspace.xml" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
</component>
<component name="DaemonCodeAnalyzer">
<disable_hints />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FavoritesManager">
<favorites_list name="2" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.63100964">
<split-first>
<leaf>
<file leaf-file-name="module.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/module.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="342" max-vertical-offset="1890">
<caret line="23" column="22" selection-start-line="23" selection-start-column="22" selection-end-line="23" selection-end-column="22" />
<folding>
<element signature="e#280#438#0" expanded="false" />
<element signature="e#2180#2433#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="classified menus.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/classified menus.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.061797753" vertical-offset="1349" max-vertical-offset="2304">
<caret line="78" column="24" selection-start-line="78" selection-start-column="24" selection-end-line="78" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="test.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="108" max-vertical-offset="2106">
<caret line="6" column="6" selection-start-line="6" selection-start-column="6" selection-end-line="6" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="sys.py" pinned="false" current-in-tab="false">
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/sys.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1512" max-vertical-offset="10782">
<caret line="19" column="5" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
<leaf>
<file leaf-file-name="kod.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/kod.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.047191013" vertical-offset="1524" max-vertical-offset="2466">
<caret line="142" column="0" selection-start-line="142" selection-start-column="0" selection-end-line="142" selection-end-column="0" />
<folding>
<element signature="e#3045#5111#0" expanded="false" />
<element signature="e#5144#7778#0" expanded="false" />
<element signature="e#7819#8491#0" expanded="false" />
<element signature="e#8530#9066#0" expanded="false" />
<element signature="e#9107#9728#0" expanded="false" />
<element signature="e#9759#10189#0" expanded="false" />
<element signature="e#10222#10624#0" expanded="false" />
<element signature="e#10656#11141#0" expanded="false" />
<element signature="e#11183#11677#0" expanded="false" />
<element signature="e#12153#12826#0" expanded="false" />
<element signature="e#12855#13383#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</split-second>
</splitter>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/classified triplets.py" />
<option value="$PROJECT_DIR$/kod.py" />
<option value="$PROJECT_DIR$/module.py" />
<option value="$PROJECT_DIR$/test.py" />
<option value="$PROJECT_DIR$/classified menus.py" />
</list>
</option>
</component>
<component name="ProjectFrameBounds">
<option name="x" value="337" />
<option name="y" value="24" />
<option name="width" value="960" />
<option name="height" value="1056" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="2" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="2" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="2" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="last_opened_file_path" value="$PROJECT_DIR$/../3" />
<property name="recentsLimit" value="5" />
<property name="options.lastSelected" value="editor.preferences.appearance" />
<property name="options.splitter.main.proportions" value="0.3" />
<property name="options.splitter.details.proportions" value="0.2" />
</component>
<component name="PyConsoleOptionsProvider">
<option name="myPythonConsoleState">
<console-settings />
</option>
</component>
<component name="RunManager" selected="Python.classified menus">
<configuration default="false" name="module" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/module.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<RunnerSettings RunnerId="PyDebugRunner" />
<RunnerSettings RunnerId="PythonRunner" />
<ConfigurationWrapper RunnerId="PyDebugRunner" />
<ConfigurationWrapper RunnerId="PythonRunner" />
<method />
</configuration>
<configuration default="false" name="classified menus" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/classified menus.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<RunnerSettings RunnerId="PythonRunner" />
<ConfigurationWrapper RunnerId="PythonRunner" />
<method />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="PUREUNITTEST" value="true" />
<option name="PARAMS" value="" />
<option name="USE_PARAM" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="py.test">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="testToRun" value="" />
<option name="keywords" value="" />
<option name="params" value="" />
<option name="USE_PARAM" value="false" />
<option name="USE_KEYWORD" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Attests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Nosetests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="2" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="PARAMS" value="" />
<option name="USE_PARAM" value="false" />
<method />
</configuration>
<list size="2">
<item index="0" class="java.lang.String" itemvalue="Python.module" />
<item index="1" class="java.lang.String" itemvalue="Python.classified menus" />
</list>
<recent_temporary>
<list size="2">
<item index="0" class="java.lang.String" itemvalue="Python.classified menus" />
<item index="1" class="java.lang.String" itemvalue="Python.module" />
</list>
</recent_temporary>
</component>
<component name="ShelveChangesManager" show_recycled="false" />
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="4a6be4a1-b9e9-4174-b1c2-296e9d13bbff" name="Default" comment="" />
<created>1425753199761</created>
<option name="number" value="Default" />
<updated>1425753199761</updated>
</task>
<servers />
</component>
<component name="TodoView" selected-index="0">
<todo-panel id="selected-file">
<are-packages-shown value="false" />
<are-modules-shown value="false" />
<flatten-packages value="false" />
<is-autoscroll-to-source value="false" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="false" />
<are-modules-shown value="false" />
<flatten-packages value="false" />
<is-autoscroll-to-source value="false" />
</todo-panel>
<todo-panel id="default-changelist">
<are-packages-shown value="false" />
<are-modules-shown value="false" />
<flatten-packages value="false" />
<is-autoscroll-to-source value="false" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="337" y="24" width="960" height="1056" extended-state="4" />
<editor active="false" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24919786" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33887735" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="12" side_tool="true" content_ui="tabs" />
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32848233" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24986821" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33783785" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32848233" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3991684" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout>
<layout-to-restore>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3397642" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="12" side_tool="true" content_ui="tabs" />
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3290461" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3290461" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.3386924" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24919786" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24986821" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout-to-restore>
</component>
<component name="Vcs.Log.UiProperties">
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="VcsManagerConfiguration">
<option name="myTodoPanelSettings">
<TodoPanelSettings />
</option>
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="14" />
</breakpoint-manager>
<watches-manager>
<configuration name="PythonConfigurationType">
<watch expression="act" language="Python" />
<watch expression="view_stroki()" language="Python" />
<watch expression="choice" language="Python" />
</configuration>
</watches-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/module.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="342" max-vertical-offset="1890">
<caret line="23" column="22" selection-start-line="23" selection-start-column="22" selection-end-line="23" selection-end-column="22" />
<folding>
<element signature="e#280#438#0" expanded="false" />
<element signature="e#2180#2433#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/classified menus.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1485" max-vertical-offset="2304">
<caret line="107" column="76" selection-start-line="107" selection-start-column="76" selection-end-line="107" selection-end-column="76" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="108" max-vertical-offset="2106">
<caret line="6" column="6" selection-start-line="6" selection-start-column="6" selection-end-line="6" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/sys.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1512" max-vertical-offset="10782">
<caret line="19" column="5" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kod.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2466">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#3045#5111#0" expanded="false" />
<element signature="e#5144#7778#0" expanded="false" />
<element signature="e#7819#8491#0" expanded="false" />
<element signature="e#8530#9066#0" expanded="false" />
<element signature="e#9107#9728#0" expanded="false" />
<element signature="e#9759#10189#0" expanded="false" />
<element signature="e#10222#10624#0" expanded="false" />
<element signature="e#10656#11141#0" expanded="false" />
<element signature="e#11183#11677#0" expanded="false" />
<element signature="e#12153#12826#0" expanded="false" />
<element signature="e#12855#13383#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/module.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="342" max-vertical-offset="1890">
<caret line="23" column="22" selection-start-line="23" selection-start-column="22" selection-end-line="23" selection-end-column="22" />
<folding>
<element signature="e#280#438#0" expanded="false" />
<element signature="e#2180#2433#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/classified menus.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="198" max-vertical-offset="1638">
<caret line="18" column="35" selection-start-line="18" selection-start-column="35" selection-end-line="18" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="108" max-vertical-offset="2106">
<caret line="6" column="6" selection-start-line="6" selection-start-column="6" selection-end-line="6" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/sys.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1512" max-vertical-offset="10782">
<caret line="19" column="5" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kod.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2862">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#3045#5111#0" expanded="false" />
<element signature="e#5144#7778#0" expanded="false" />
<element signature="e#7819#8491#0" expanded="false" />
<element signature="e#8530#9066#0" expanded="false" />
<element signature="e#9107#9728#0" expanded="false" />
<element signature="e#9759#10189#0" expanded="false" />
<element signature="e#10222#10624#0" expanded="false" />
<element signature="e#10656#11141#0" expanded="false" />
<element signature="e#11183#11677#0" expanded="false" />
<element signature="e#12153#12826#0" expanded="false" />
<element signature="e#12855#13383#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/module.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="342" max-vertical-offset="1890">
<caret line="23" column="22" selection-start-line="23" selection-start-column="22" selection-end-line="23" selection-end-column="22" />
<folding>
<element signature="e#280#438#0" expanded="false" />
<element signature="e#2180#2433#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/classified menus.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="936">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/builtins.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="2840" max-vertical-offset="102474">
<caret line="175" column="4" selection-start-line="175" selection-start-column="4" selection-end-line="175" selection-end-column="4" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/pydevd.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="39574" max-vertical-offset="40122">
<caret line="2221" column="0" selection-start-line="2221" selection-start-column="0" selection-end-line="2222" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/_pydev_imps/_pydev_execfile.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="306" max-vertical-offset="414">
<caret line="17" column="0" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1980" max-vertical-offset="2106">
<caret line="111" column="0" selection-start-line="111" selection-start-column="0" selection-end-line="111" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/sys.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1512" max-vertical-offset="10782">
<caret line="19" column="5" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/binascii.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1721" max-vertical-offset="3546">
<caret line="107" column="6" selection-start-line="107" selection-start-column="6" selection-end-line="107" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/_sqlite3.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.33261803" vertical-offset="13496" max-vertical-offset="18882">
<caret line="767" column="8" selection-start-line="767" selection-start-column="8" selection-end-line="767" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file:///usr/lib/python3.4/logging/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.21980414" vertical-offset="6584" max-vertical-offset="35172">
<caret line="379" column="8" selection-start-line="379" selection-start-column="8" selection-end-line="379" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file:///usr/lib/python3/dist-packages/aptdaemon/loop.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.4828326" vertical-offset="0" max-vertical-offset="932">
<caret line="25" column="0" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/sys.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="1512" max-vertical-offset="10782">
<caret line="19" column="5" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/_pydev_imps/_pydev_execfile.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="414">
<caret line="17" column="0" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/pydevd.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="39574" max-vertical-offset="40122">
<caret line="2221" column="0" selection-start-line="2221" selection-start-column="0" selection-end-line="2222" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.PyCharm40/system/python_stubs/-1247971765/builtins.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="2840" max-vertical-offset="102474">
<caret line="175" column="4" selection-start-line="175" selection-start-column="4" selection-end-line="175" selection-end-column="4" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/module.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="342" max-vertical-offset="1890">
<caret line="23" column="22" selection-start-line="23" selection-start-column="22" selection-end-line="23" selection-end-column="22" />
<folding>
<element signature="e#280#438#0" expanded="false" />
<element signature="e#2180#2433#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2106">
<caret line="6" column="6" selection-start-line="6" selection-start-column="6" selection-end-line="6" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/classified menus.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.061797753" vertical-offset="1349" max-vertical-offset="2304">
<caret line="78" column="24" selection-start-line="78" selection-start-column="24" selection-end-line="78" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kod.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.047191013" vertical-offset="1524" max-vertical-offset="2466">
<caret line="142" column="0" selection-start-line="142" selection-start-column="0" selection-end-line="142" selection-end-column="0" />
<folding>
<element signature="e#3045#5111#0" expanded="false" />
<element signature="e#5144#7778#0" expanded="false" />
<element signature="e#7819#8491#0" expanded="false" />
<element signature="e#8530#9066#0" expanded="false" />
<element signature="e#9107#9728#0" expanded="false" />
<element signature="e#9759#10189#0" expanded="false" />
<element signature="e#10222#10624#0" expanded="false" />
<element signature="e#10656#11141#0" expanded="false" />
<element signature="e#11183#11677#0" expanded="false" />
<element signature="e#12153#12826#0" expanded="false" />
<element signature="e#12855#13383#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
</component>
</project>
__author__ = 'ivan'
from kod import *
try:
strings = open('триплексные строки.txt').read().split('\n')
except FileNotFoundError:
strings = ['']
if len(strings) > 1:
for i in range(len(strings)):
if strings[i] == '':
del strings[i]
class Menu():
def __init__(self, name, nadmenu=None, function=None):
"""
:param name: printable name
:param nadmenu: в какое меню добавить себя
:param function: action of this item : print trpStrings or add trp
"""
self.items = []
self.name = name
if nadmenu is not None:
nadmenu.items.append(self)
if function is not None:
self.foo = function
else:
self.foo = None
def print_items(self):
"""Отрисовка пунктов меню"""
for item in self.items:
print(self.items.index(item), '-', item.name)
def add_item(self, menu):
"""сохраняет подпункт при его добавлении"""
self.items.append(menu)
def __call__(self):
"""Осовной способ вызова объекта"""
print(self.name.center(45, '-'))
if self.foo is not None:
self.foo()
self.print_items()
if len(self.items) > 0:
try:
self.items[int(input())]()
except IndexError:
pass
except ValueError:
pass
def print_strings():
"""Вывести все триплексные строки"""
for string in strings:
print(strings.index(string), string, sep='-')
check_strings()
def type_value(value):
try:
int(value)
return 0
except ValueError:
return 1
def adding():
"""Добавление триплета в существующую/новую триплексную строку"""
print_strings()
number = int(input('Номер строки в которую добавить триплет:'))
if number > len(strings) - 1:
strings.append('')
number = len(strings) - 1
prefix = input('Префикс:')
name = input('Имя триплета:')
value = input('Значение триплета:')
rem = input('Комментарий к добавляемому триплету:')
code, temp_string = trpAddStr(strings[number], prefix, name, value, type_value(value), rem)
# code 0 - good, 1 - wrong
strings[number] = temp_string
print('Триплет {} добавлен в строку {}'.format(prefix+trpPoint+name+trpEqual+value+trpKv+rem+trpKv, str(number)))
def del_string():
"""Удаление триплексой строки"""
print_strings()
number = int(input('Номер строки для удаления:'))
if len(strings) > 1:
del strings[number]
else:
strings[number] = ''
def del_trp_pref():
"""Удаление триплета по префиксу"""
print_strings()
string_number = int(input('Номер строки содержащей триплет:'))
code, strings[string_number] = trpDelPref(strings[string_number], input('Префикс:'))
def del_trp_name():
"""Удаление триплета по префиксу и имени"""
print_strings()
string_number = int(input('Номер строки содержащей триплет:'))
code, strings[string_number] = trpDel(strings[string_number], input('Префикс:'), input('Имя:'))
def merge_strings():
"""Объединение двух строк + удаление добавленной строки"""
print_strings()
string_main = strings[int(input('Номер основной триплексной строки:'))]
string_adding = strings[int(input('Номер добавляемой триплексной строки:'))]
code, strings[strings.index(string_main)] = trpMergeStr(string_main, string_adding)
del strings[strings.index(string_adding)]
def check_strings(_list=strings):
"""'Проверка корректности триплексных строк в списке'"""
for item in _list:
code = trpCheck(item)
if code != 0:
print('-'*10)
print('String {} is broken'.format(_list.index(item)))
def main_exit():
"""Запись триплексных строк в файл, выход из программы"""
with open('триплексные строки.txt', 'w') as file:
for i in range(len(strings)):
file.write(strings[i])
if i < len(strings)-1:
file.write('\n')
exit()
if __name__ == '__main__':
check_strings()
menu_glavnoe = Menu('Главное меню')
glavnoe_printing = Menu('Показать триплексые строки', menu_glavnoe, print_strings)
glavnoe_adding = Menu('Добавить триплет', menu_glavnoe, adding)
glavnoe_delete = Menu('Удалить строку/триплет', menu_glavnoe)
glavnoe_merge = Menu('Объединить две триплексые строки', menu_glavnoe, merge_strings)
glavnoe_exit = Menu('Выход', menu_glavnoe, main_exit)
delete_triplet = Menu('Удалить триплет', glavnoe_delete)
delete_string = Menu('Удалить строку', glavnoe_delete, del_string)
triplet_pr = Menu('Удалить триплет по префиксу', delete_triplet, del_trp_pref)
triplet_pr_name = Menu('Удалить триплет по префиксу и имени', delete_triplet, del_trp_name)
while True:
menu_glavnoe()
# Зарезервированные символы ВСПТД:
trpBeg = '$' # Начало триплета.
trpEnd = ';' # Конец триплета.
trpAps = '\'' # Начало и конец текстового значения.
trpKv = '\"' # Начало и конец комментария.
trpPoint = '.' # Точка, разделяющая префикс и имя триплета.
trpEqual = '=' # Знак присваивания.
trpRequest = ':' # Запрос.
systemSymbols = [trpBeg, trpEnd, trpAps, trpKv, trpPoint, trpEqual, trpRequest]
def trpAddStr(trpStr, prefix, name, value, typeValue=1, rem=""):
'''
Добавляет триплет в триплетную строку по лексикографическому возрастанию префиксов триплетов.
Параметры:
trpStr - триплексная строка, в которую производится добавление;
prefix - префикс добавляемого триплета;
name - имя добавляемого триплета;
value - значение добавляемого триплета;
typeValue - тип значения триплета:
0 - числовое значение;
1 - текстовое значение (заключается в апострофы);
rem - комментарий к добавляемому триплету.
'''
try:
if (int(typeValue) not in [0, 1]):
return (-1,);
except ValueError:
return (-1,);
if (typeValue == 0):
try:
value = int(value);
except ValueError:
return (-1,);
else:
value = str(value);
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
prefix = str(prefix);
name = str(name);
rem = str(rem);
currentIndex = 0; # Текущий индекс при проходе по триплексной строке.
lenStr = len(trpStr); # Длина триплексной строки.
# Формирование добавляемого триплета.
triplet = trpBeg + prefix + trpPoint + name + trpEqual;
if (typeValue == 0):
triplet += str(value);
else:
triplet += trpAps + value + trpAps;
if (rem != ""):
triplet += trpKv + rem + trpKv;
triplet += trpEnd;
while (currentIndex < lenStr):
tmp = trpStr[currentIndex:]; # Часть строки, начинающаяся с текущего индекса.
# Получение префикса и имени текущего триплета.
currentPrefix = trpGetPrefix(tmp)[1];
currentName = trpGetName(tmp)[1];
# Вставка триплета.
if (currentPrefix >= prefix):
# 1. Вставка с заменой (если триплет с такими же префиксом и именем уже есть в исходной строке).
if (currentPrefix == prefix and currentName == name):
lenOld = trpStr[currentIndex:].index(trpEnd) + 1; # Длина заменяемого триплета.
res = trpStr[:currentIndex] + triplet + trpStr[currentIndex + lenOld:];
return (0, res);
# 2. Вставка с добавлением (если такого же трилета в исходной строке нет).
res = trpStr[:currentIndex] + triplet + trpStr[currentIndex:];
return (0, res);
currentIndex = trpGoNext(trpStr, currentIndex + 1)[1]; # Переход к следующему триплету.
res = trpStr + triplet; # Добавление триплета в конец строки.
return (0, res);
def trpCheck(trpStr):
'''
Проверка корректности триплексной строки.
Коды ошибок:
1 - между триплетами есть посторонние символы;
2 - попытка начать новый триплет при незакрытом предыдущем или отсутствие конца последнего триплета;
3 - отсутствие префикса триплета;
4 - некорректный префикс;
5 - не задано имя триплета;
6 - наличие недопустимых символов в имени триплета (или отсутствие знака присваивания);
7 - отсутствие закрывающего апострофа в значении триплета;
8 - строковое значение триплета не обрамлено в апострофы;
9 - наличие посторонних символов после значения триплета, не оформленных в комментарий;
10 - отсутствие закрывающей кавычки в комментарии (или есть посторонние символы после комментария).
Параметры:
trpStr - проверяемая строка.
'''
# ПЕРВЫЙ ЭТАП ПРОВЕРКИ: можно ли строку корректно разбить на триплеты?
inTrp = 0; # Увеличивается на 1 при входе в триплет и уменьшается на 1 при выходе из него.
trpStr = str(trpStr);
lenStr = len(trpStr); # Количество символов в строке.
i = 0;
while (i < lenStr):
if (trpStr[i] == trpBeg):
inTrp += 1;
if (trpStr[i] == trpEnd):
inTrp -= 1;
if (inTrp == 0):
if (trpStr[i] not in [trpEnd, " ", "\n", "\0"]):
return 1; # Ошибка: посторонние символы между триплетами.
else:
if (trpStr[i] != trpEnd):
trpStr = trpStr[:i] + trpStr[i + 1:];
lenStr -= 1;
i -= 1;
if (abs(inTrp) > 1 or (inTrp != 0 and i == lenStr - 1)):
return 2; # Ошибка: несоответствие начала и конца триплета (начало нового триплета при незакрытом предыдущем).
i += 1;
triplets = trpSplit(trpStr); # Разбиение строки на отдельные триплеты.
kolTrp = len(triplets);
for i in range(kolTrp):
# ВТОРОЙ ЭТАП ПРОВЕРКИ: проверка синтаксиса каждого триплета.
isTrpRegular = tripletCheck(triplets[i]);
if (isTrpRegular != 0):
return isTrpRegular;
return 0;
def tripletCheck(trpStr):
'''
Проверка триплета.
Параметры:
trpStr - проверяемый триплет.
'''
trpStr = str(trpStr);
# Проверка префикса.
i = 1;
while ((trpStr[i] not in systemSymbols) and (trpStr[i] != " ")):
i += 1;
if (i == 1):
if (trpStr[i] == trpPoint):
return 3; # Ошибка: отсутствие префикса триплета.
if (trpStr[i] == trpEqual):
return 5; # Ошибка: не задано имя триплета.
if (trpStr[i] != trpPoint):
return 4; # Ошибка: некорректный префикс.
# Проверка имени.
i += 1;
while ((trpStr[i] not in systemSymbols) and (trpStr[i] != " ")):
i += 1;
if (trpStr[i - 1] == trpPoint):
return 5; # Ошибка: не задано имя триплета.
if (trpStr[i] == " "):
while (trpStr[i] == " "):
i += 1;
if (trpStr[i] != trpEqual):
return 6; # Ошибка: наличие недопустимых символов в имени триплета (или отсутствие знака присваивания).
while (trpStr[i] not in systemSymbols):
i += 1;
if (trpStr[i] != trpEqual):
return 6; # Ошибка: наличие недопустимых символов в имени триплета (или отсутствие знака присваивания).
# Проверка значения.
i += 1;
while (trpStr[i] == " "):
i += 1;
value = "";
if (trpStr[i] == trpAps): # Если триплет имеет строковое значение.
i += 1;
while ((trpStr[i] != trpAps) and (i != len(trpStr) - 1)):
i += 1;
if (i == len(trpStr) - 1):
return 7; # Ошибка: отсутствие закрывающего апострофа в значении триплета.
i += 1;
else:
if (trpStr[i] == trpRequest): # Если значение триплета представляет собой запрос.
i += 1;
else: # Если триплет имеет численное значение.
while ((trpStr[i] != trpKv) and (i != len(trpStr) - 1)):
value += trpStr[i];
i += 1;
try:
value = float(value);
except ValueError:
return 8; # Ошибка: строковое значение триплета не обрамлено в апострофы.
# Проверка комментария.
if (i >= len(trpStr) - 2):
return 0;
while (trpStr[i] == " "):
i += 1;
if (trpStr[i] != trpKv and trpStr[
i] != trpEnd):
return 9; # Ошибка: наличие посторонних символов после значения триплета, не оформленных в комментарий.
if (trpStr[
-2] != trpKv):
return 10; # Ошибка: отсутствие закрывающей кавычки в комментарии (или есть посторонние символы после комментария).
if (trpStr[i + 1:-2].count(
trpKv) != 0):
return 9; # Ошибка: наличие посторонних символов после значения триплета, не оформленных в комментарий.
return 0;
def trpDel(trpStr, prefix, name):
'''
Удаляет все триплеты с заданными префиксом и именем из триплексной строки.
Параметры:
trpStr - триплексная строка;
prefix - префикс, по которому производится удаление;
name - имя, по которому при соответствующем префиксе производится удаление.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
triplets = trpSplit(trpStr);
kolTrp = len(triplets);
result = "";
for i in range(kolTrp):
if ((trpGetPrefix(triplets[i])[1] != prefix) or (trpGetName(triplets[i])[1] != name)):
result += triplets[i];
return (0, result);
def trpDelPref(trpStr, prefix):
'''
Удаляет все триплеты с заданным префиксом из триплексной строки.
Параметры:
trpStr - триплексная строка;
prefix - префикс, по которому производится удаление.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
triplets = trpSplit(trpStr);
kolTrp = len(triplets);
result = "";
for i in range(kolTrp):
if (trpGetPrefix(triplets[i])[1] != prefix):
result += triplets[i];
return (0, result);
def trpGet(trpStr, prefix, name):
'''
Возвращает значение триплета с заданными префиксом и именем.
Параметры:
trpStr - строка, в которой производится поиск;
prefix - префикс искомого триплета;
name - имя искомого триплета.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
triplets = trpSplit(trpStr);
kolTrp = len(triplets);
for i in range(kolTrp):
if ((trpGetPrefix(triplets[i])[1] == prefix) and (trpGetName(triplets[i])[1] == name)):
return (0, trpGetValue(triplets[i])[1]);
return (-1,);
def trpGetName(trpStr):
'''
Возвращает имя триплета в соответствии с синтаксисом:
$<префикс>.<имя>=<значение>["Комментарий"];
Параметры:
trpStr - триплексная строка.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
result = trpStr[trpStr.index(trpPoint) + 1: trpStr.index(trpEqual)];
result = result.strip();
return (0, result);
def trpGetPrefix(trpStr):
'''
Возвращает префикс триплета в соответствии с синтаксисом:
$<префикс>.<имя>=<значение>["Комментарий"];
Параметры:
trpStr - триплексная строка.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
result = trpStr[trpStr.find(trpBeg) + 1: trpStr.index(trpPoint)];
return (0, result);
def trpGetValue(trpStr):
'''
Возвращает значение триплета в соответствии с синтаксисом:
$<префикс>.<имя>=<значение>["Комментарий"];
Параметры:
trpStr - триплексная строка.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
result = trpStr[trpStr.index(trpEqual) + 1: trpStr.find(trpKv)];
result = result.strip();
if (result[0] == trpAps):
result = result[1: -1];
return (0, result);
def trpGoNext(trpStr, beginIndex):
'''
Возвращает индекс начала следующего триплета, осуществляя поиск с заданного индекса.
Параметры:
trpStr - триплексная строка;
currentIndex - индекс, с которого нужно начинать поиск.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
index = beginIndex;
lenStr = len(trpStr);
while (index < lenStr and trpStr[index] != trpBeg):
index += 1;
return (0, index);
def trpMergeStr(trpStr, trpStrAdd):
'''
Сливает две триплексных строки. Возвращает результат слияния.
Параметры:
trpStr - основная триплексная строка;
trpStrAdd - добавляемая триплексная строка.
'''
# Если исходные строки содержат ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0 or trpCheck(trpStrAdd) != 0):
return (-1,);
return (0, trpStr.strip() + trpStrAdd.strip());
def trpSort(trpStr):
'''
Cортирует триплексную строку в лексикографическом порядке имен. Возвращает отсортированную триплексную строку.
Параметры:
trpStr - триплексная строка.
'''
# Если исходная строка содержит ошибки, то функция прекращает свою работу.
if (trpCheck(trpStr) != 0):
return (-1,);
triplets = trpSplit(trpStr);
kolTrp = len(triplets);
for i in range(kolTrp):
triplets[i] = triplets[i][1:]; # Удаление символа $ в триплетах.
triplets.sort(); # Сортировка строки.
result = "";
for i in range(kolTrp): # Генерация результирующей строки.
result += trpBeg + str(triplets[i]);
return (0, result);
def trpSplit(trpStr):
'''
Разбивает триплексную строку на триплеты. Возвращает список триплетов.
Параметры:
trpStr - триплексная строка.
'''
arr = trpStr.split(trpEnd);
kolTrp = len(arr); # Количество триплетов в исходной строке.
for i in range(kolTrp):
try:
arr[i] = arr[i].strip();
arr[i] = arr[i][1:];
except IndexError:
break;
if (len(arr[i]) == 0):
del arr[i];
else:
arr[i] = trpBeg + arr[i] + trpEnd;
return arr;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment