Guest User

Untitled

a guest
Nov 20th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #! ruby -Ks
  2. # -*- coding: Shift_JIS -*-
  3.  
  4. #Memento / あの頃に戻りたい
  5.  
  6. #メメントのメメは女々しいのメメです。
  7. #スナップショット作るなりして、後々戻せるようにする機能を指すっぽいです。
  8. #エディタのundo/redoが分かりやすいんじゃなかろうか
  9. #MementoもハッシュやStructで済む気がする・・・簡略簡略
  10.  
  11. class Editor
  12. Buffer = Struct.new(:text, :font_size, :font_type) #簡単だけど、これがMemento
  13.  
  14. def initialize
  15. @text = ''
  16. @font_size = 10
  17. @font_type = '明朝'
  18. @buffers = []
  19. end
  20.  
  21. attr_reader :text, :font_size, :font_type
  22.  
  23. def view
  24. puts "(#{@font_type}で#{@font_size}ぐらいの表示がされていると考えます)", @text, '---------Separator----------'
  25. end
  26.  
  27. def write(string)
  28. snapshot #操作する人が手動で呼び出すって考えもあるけど、今回は自動呼び出しさせます。
  29. @text += string
  30. end
  31.  
  32. def undo(count=1)
  33. count *= -1
  34. @text, @font_size, @font_type = @buffers[count].text, @buffers[count].font_size, @buffers[count].font_type
  35. end
  36.  
  37. def change_font(size, type=nil)
  38. snapshot
  39. @font_size = size
  40. @font_type = type if type
  41. end
  42.  
  43. private
  44.  
  45. def snapshot
  46. @buffers << Buffer.new(@text, @font_size, @font_type)
  47. end
  48. end
  49.  
  50. editor = Editor.new
  51.  
  52. editor.write "そういえば、株価めっちゃ落ちてますよね\n"
  53. editor.view
  54.  
  55. editor.change_font 99, 'ゴシック'
  56. editor.write "もーもーもー\nマジであの頃に帰りたい・・・"
  57. editor.view
  58.  
  59. editor.undo 2
  60. editor.view
  61.  
  62. # 意図しないBuffer破壊メソッドを作ってしまわないよう気をつけるべきでしょう(戻せなくなる!)
  63. # ※もし本当にこういうのを作るんであれば、各メソッドの返り値はselfにしてメソッドチェーン出来るようにしておいたほうがいいと思う
Add Comment
Please, Sign In to add comment