comment_extractor 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +132 -0
  4. data/bin/comment_parser_debug +45 -0
  5. data/lib/comment_extractor/code_object/comment.rb +19 -0
  6. data/lib/comment_extractor/code_object.rb +12 -0
  7. data/lib/comment_extractor/code_objects.rb +46 -0
  8. data/lib/comment_extractor/configuration.rb +50 -0
  9. data/lib/comment_extractor/encoding.rb +40 -0
  10. data/lib/comment_extractor/extractor/c.rb +8 -0
  11. data/lib/comment_extractor/extractor/cc.rb +8 -0
  12. data/lib/comment_extractor/extractor/class.rb +8 -0
  13. data/lib/comment_extractor/extractor/clojure.rb +11 -0
  14. data/lib/comment_extractor/extractor/coffee.rb +13 -0
  15. data/lib/comment_extractor/extractor/concerns/simple_extractor.rb +189 -0
  16. data/lib/comment_extractor/extractor/concerns/slash_extractor.rb +16 -0
  17. data/lib/comment_extractor/extractor/cpp.rb +8 -0
  18. data/lib/comment_extractor/extractor/cs.rb +8 -0
  19. data/lib/comment_extractor/extractor/css.rb +8 -0
  20. data/lib/comment_extractor/extractor/cxx.rb +8 -0
  21. data/lib/comment_extractor/extractor/d.rb +9 -0
  22. data/lib/comment_extractor/extractor/erlang.rb +12 -0
  23. data/lib/comment_extractor/extractor/fortran.rb +11 -0
  24. data/lib/comment_extractor/extractor/go.rb +8 -0
  25. data/lib/comment_extractor/extractor/h.rb +8 -0
  26. data/lib/comment_extractor/extractor/haml.rb +49 -0
  27. data/lib/comment_extractor/extractor/haskell.rb +12 -0
  28. data/lib/comment_extractor/extractor/hpp.rb +8 -0
  29. data/lib/comment_extractor/extractor/html.rb +13 -0
  30. data/lib/comment_extractor/extractor/java.rb +8 -0
  31. data/lib/comment_extractor/extractor/java_script.rb +12 -0
  32. data/lib/comment_extractor/extractor/lisp.rb +11 -0
  33. data/lib/comment_extractor/extractor/lua.rb +12 -0
  34. data/lib/comment_extractor/extractor/m.rb +9 -0
  35. data/lib/comment_extractor/extractor/markdown.rb +7 -0
  36. data/lib/comment_extractor/extractor/mm.rb +8 -0
  37. data/lib/comment_extractor/extractor/perl.rb +12 -0
  38. data/lib/comment_extractor/extractor/php.rb +8 -0
  39. data/lib/comment_extractor/extractor/python.rb +13 -0
  40. data/lib/comment_extractor/extractor/ruby.rb +40 -0
  41. data/lib/comment_extractor/extractor/sass.rb +8 -0
  42. data/lib/comment_extractor/extractor/scala.rb +8 -0
  43. data/lib/comment_extractor/extractor/scss.rb +8 -0
  44. data/lib/comment_extractor/extractor/shell.rb +11 -0
  45. data/lib/comment_extractor/extractor/sqf.rb +8 -0
  46. data/lib/comment_extractor/extractor/sql.rb +12 -0
  47. data/lib/comment_extractor/extractor/sqs.rb +7 -0
  48. data/lib/comment_extractor/extractor/tex.rb +12 -0
  49. data/lib/comment_extractor/extractor/text.rb +10 -0
  50. data/lib/comment_extractor/extractor/yaml.rb +12 -0
  51. data/lib/comment_extractor/extractor.rb +96 -0
  52. data/lib/comment_extractor/extractor_manager.rb +158 -0
  53. data/lib/comment_extractor/file.rb +42 -0
  54. data/lib/comment_extractor/parser.rb +33 -0
  55. data/lib/comment_extractor/smart_string_scanner.rb +11 -0
  56. data/lib/comment_extractor/version.rb +4 -0
  57. data/lib/comment_extractor.rb +18 -0
  58. data/spec/assets/binary_file +0 -0
  59. data/spec/assets/shebang_file +3 -0
  60. data/spec/assets/source_code/c.c +158 -0
  61. data/spec/assets/source_code/cc.cc +24 -0
  62. data/spec/assets/source_code/class +0 -0
  63. data/spec/assets/source_code/clojure.clj +41 -0
  64. data/spec/assets/source_code/coffee.coffee +27 -0
  65. data/spec/assets/source_code/cpp.cpp +130 -0
  66. data/spec/assets/source_code/cs.cs +53 -0
  67. data/spec/assets/source_code/css.css +37 -0
  68. data/spec/assets/source_code/cxx +0 -0
  69. data/spec/assets/source_code/d.d +110 -0
  70. data/spec/assets/source_code/erlang.es +34 -0
  71. data/spec/assets/source_code/fortran.f +41 -0
  72. data/spec/assets/source_code/golang.go +61 -0
  73. data/spec/assets/source_code/h +0 -0
  74. data/spec/assets/source_code/haml.haml +26 -0
  75. data/spec/assets/source_code/haskell.hs +36 -0
  76. data/spec/assets/source_code/hpp +0 -0
  77. data/spec/assets/source_code/html.html +139 -0
  78. data/spec/assets/source_code/java.java +39 -0
  79. data/spec/assets/source_code/java_script.js +164 -0
  80. data/spec/assets/source_code/lisp.el +18 -0
  81. data/spec/assets/source_code/lua.lua +34 -0
  82. data/spec/assets/source_code/m +0 -0
  83. data/spec/assets/source_code/mm +0 -0
  84. data/spec/assets/source_code/perl.pl +36 -0
  85. data/spec/assets/source_code/php.php +31 -0
  86. data/spec/assets/source_code/python.py +139 -0
  87. data/spec/assets/source_code/ruby.rb +36 -0
  88. data/spec/assets/source_code/sass.sass +77 -0
  89. data/spec/assets/source_code/scala.scala +46 -0
  90. data/spec/assets/source_code/scss.scss +93 -0
  91. data/spec/assets/source_code/shell.sh +5 -0
  92. data/spec/assets/source_code/sqf +0 -0
  93. data/spec/assets/source_code/sql.sql +11 -0
  94. data/spec/assets/source_code/sqs +0 -0
  95. data/spec/assets/source_code/tex.tex +20 -0
  96. data/spec/assets/source_code/text.txt +15 -0
  97. data/spec/assets/source_code/vim +17 -0
  98. data/spec/assets/source_code/yaml.yml +44 -0
  99. data/spec/assets/stripper/children/children +0 -0
  100. data/spec/assets/stripper/children/children.c +0 -0
  101. data/spec/assets/stripper/children/children.js +0 -0
  102. data/spec/assets/stripper/children/children.o +0 -0
  103. data/spec/assets/stripper/children/children.rb +1 -0
  104. data/spec/assets/stripper/test +0 -0
  105. data/spec/assets/stripper/test.c +0 -0
  106. data/spec/assets/stripper/test.js +0 -0
  107. data/spec/assets/stripper/test.o +0 -0
  108. data/spec/assets/stripper/test.rb +1 -0
  109. data/spec/comment_extractor/code_object/comment_spec.rb +15 -0
  110. data/spec/comment_extractor/code_object_spec.rb +18 -0
  111. data/spec/comment_extractor/code_objects_spec.rb +66 -0
  112. data/spec/comment_extractor/configuration_spec.rb +68 -0
  113. data/spec/comment_extractor/encoding_spec.rb +77 -0
  114. data/spec/comment_extractor/extractor/c_spec.rb +9 -0
  115. data/spec/comment_extractor/extractor/cc_spec.rb +9 -0
  116. data/spec/comment_extractor/extractor/class_spec.rb +9 -0
  117. data/spec/comment_extractor/extractor/clojure_spec.rb +9 -0
  118. data/spec/comment_extractor/extractor/coffee_spec.rb +9 -0
  119. data/spec/comment_extractor/extractor/cpp_spec.rb +9 -0
  120. data/spec/comment_extractor/extractor/cs_spec.rb +9 -0
  121. data/spec/comment_extractor/extractor/css_spec.rb +9 -0
  122. data/spec/comment_extractor/extractor/cxx_spec.rb +9 -0
  123. data/spec/comment_extractor/extractor/d_spec.rb +10 -0
  124. data/spec/comment_extractor/extractor/erlang_spec.rb +10 -0
  125. data/spec/comment_extractor/extractor/fortran_spec.rb +9 -0
  126. data/spec/comment_extractor/extractor/go_spec.rb +9 -0
  127. data/spec/comment_extractor/extractor/h_spec.rb +9 -0
  128. data/spec/comment_extractor/extractor/haml_spec.rb +9 -0
  129. data/spec/comment_extractor/extractor/haskell_spec.rb +9 -0
  130. data/spec/comment_extractor/extractor/hpp_spec.rb +9 -0
  131. data/spec/comment_extractor/extractor/html_spec.rb +9 -0
  132. data/spec/comment_extractor/extractor/java_script_spec.rb +10 -0
  133. data/spec/comment_extractor/extractor/java_spec.rb +9 -0
  134. data/spec/comment_extractor/extractor/lisp_spec.rb +9 -0
  135. data/spec/comment_extractor/extractor/lua_spec.rb +9 -0
  136. data/spec/comment_extractor/extractor/m_spec.rb +9 -0
  137. data/spec/comment_extractor/extractor/markdown_spec.rb +8 -0
  138. data/spec/comment_extractor/extractor/mm_spec.rb +9 -0
  139. data/spec/comment_extractor/extractor/perl_spec.rb +9 -0
  140. data/spec/comment_extractor/extractor/php_spec.rb +9 -0
  141. data/spec/comment_extractor/extractor/python_spec.rb +9 -0
  142. data/spec/comment_extractor/extractor/ruby_spec.rb +12 -0
  143. data/spec/comment_extractor/extractor/sass_spec.rb +9 -0
  144. data/spec/comment_extractor/extractor/scala_spec.rb +9 -0
  145. data/spec/comment_extractor/extractor/scss_spec.rb +9 -0
  146. data/spec/comment_extractor/extractor/shell_spec.rb +9 -0
  147. data/spec/comment_extractor/extractor/sqf_spec.rb +9 -0
  148. data/spec/comment_extractor/extractor/sql_spec.rb +9 -0
  149. data/spec/comment_extractor/extractor/sqs_spec.rb +9 -0
  150. data/spec/comment_extractor/extractor/tex_spec.rb +9 -0
  151. data/spec/comment_extractor/extractor/text_spec.rb +7 -0
  152. data/spec/comment_extractor/extractor/yaml_spec.rb +9 -0
  153. data/spec/comment_extractor/extractor_manager_spec.rb +233 -0
  154. data/spec/comment_extractor/extractor_spec.rb +102 -0
  155. data/spec/comment_extractor/file_spec.rb +100 -0
  156. data/spec/comment_extractor/parser_spec.rb +67 -0
  157. data/spec/comment_extractor/smart_string_scanner_spec.rb +24 -0
  158. data/spec/comment_extractor/version_spec.rb +8 -0
  159. data/spec/comment_extractor_spec.rb +15 -0
  160. data/spec/spec_helper.rb +22 -0
  161. data/spec/support/rspec/comment_extractor/extractor_example_group.rb +115 -0
  162. data/spec/support/rspec/comment_extractor/matchers/extract_comment.rb +58 -0
  163. data/spec/support/rspec/comment_extractor/matchers.rb +7 -0
  164. data/spec/support/rspec/comment_extractor.rb +6 -0
  165. metadata +370 -0
@@ -0,0 +1,42 @@
1
+ require 'comment_extractor/encoding'
2
+
3
+ module CommentExtractor
4
+ module DetectableSchemeFile
5
+ THRESHOLD_BINARY = 0.3
6
+
7
+ refine File do
8
+ attr_accessor :content, :shebang
9
+
10
+ # [review] - How can I refine class method?
11
+ def File.shebang(path)
12
+ if File.extname(path).empty?
13
+ line = File.open(path) { |f| f.gets }
14
+ if /\A#!\s*(?<shebang_path>.+)/ =~ line
15
+ shebang_path
16
+ end
17
+ end
18
+ end
19
+
20
+ def File.binary?(file_path)
21
+ header = File.read(file_path, File.stat(file_path).blksize) || nil
22
+
23
+ if header.nil? || header.empty?
24
+ false
25
+ else
26
+ chars = header.chars
27
+ (chars.grep(' '..'~').size / chars.size.to_f) <= THRESHOLD_BINARY
28
+ end
29
+ end
30
+
31
+ def read_content
32
+ return if File.binary?(self.path)
33
+
34
+ if File.shebang(self.path)
35
+ self.gets # Remove shebang
36
+ end
37
+
38
+ CommentExtractor::Encoding.encode(self.read)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ require 'comment_extractor/file'
2
+ require 'comment_extractor/extractor_manager'
3
+
4
+ using CommentExtractor::DetectableSchemeFile
5
+
6
+ module CommentExtractor
7
+ class Parser
8
+ attr_accessor :extractor
9
+
10
+ def initialize(extractor)
11
+ @extractor = extractor
12
+ end
13
+
14
+ def extract_comments
15
+ @extractor.extract_comments
16
+ rescue NoMethodError
17
+ raise TypeError, "#{@extractor} should be a instance of #{Extractor}"
18
+ end
19
+
20
+ class << self
21
+ def for(file_path)
22
+ if extractor = ExtractorManager.can_extract(file_path)
23
+ content = File.open(file_path, 'r') { |f| f.read_content }
24
+
25
+ # Initialize parser
26
+ code_objects = CodeObjects.new(file: file_path)
27
+ instance_of_extractor = extractor.new(content, code_objects)
28
+ new(instance_of_extractor)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ require 'strscan'
2
+
3
+ module CommentExtractor
4
+ module SmartStringScanner
5
+ refine StringScanner do
6
+ def current_line
7
+ string[0...charpos].count("\n") + 1
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ module CommentExtractor
2
+ Version = '1.0.1'
3
+ VERSION = Version
4
+ end
@@ -0,0 +1,18 @@
1
+ require 'comment_extractor/code_object'
2
+ require 'comment_extractor/configuration'
3
+ require 'comment_extractor/encoding'
4
+ require 'comment_extractor/extractor'
5
+ require 'comment_extractor/extractor_manager'
6
+ require 'comment_extractor/file'
7
+ require 'comment_extractor/parser'
8
+ require 'comment_extractor/version'
9
+
10
+ module CommentExtractor
11
+ def self.configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+
15
+ def self.configure
16
+ yield(configuration)
17
+ end
18
+ end
Binary file
@@ -0,0 +1,3 @@
1
+ #! /usr/local/bin/ruby
2
+ 1
3
+ 2
@@ -0,0 +1,158 @@
1
+ //[-1-]Attribution-Share Alike 3.0 License, copyright (c) 2010 Pieter Hintjens, modified @alpaca-tc
2
+ //[-2-] Copyright (c) 2010-2013 iMatix Corporation and Contributors
3
+ //[-3-] Lets us build this source without creating a library
4
+ #include "kvmsg.c"
5
+
6
+ //[-6-] zloop reactor handlers
7
+ static int s_snapshots (zloop_t *loop, zmq_pollitem_t *poller, void *args);
8
+ static int s_collector (zloop_t *loop, zmq_pollitem_t *poller, void *args);
9
+ static int s_flush_ttl (zloop_t *loop, int timer_id, void *args);
10
+
11
+ //[-11-] Our server is defined by these properties
12
+ typedef struct {
13
+ zctx_t *ctx; //[-13-] Context wrapper
14
+ zhash_t *kvmap; //[-14-] Key-value store
15
+ zloop_t *loop; //[-15-] zloop reactor
16
+ int port; //[-16-] Main port we're working on
17
+ int64_t sequence; //[-17-] How many updates we're at
18
+ void *snapshot; //[-18-] Handle snapshot requests
19
+ void *publisher; //[-19-] Publish updates to clients
20
+ void *collector; //[-20-] Collect updates from clients
21
+ } clonesrv_t;
22
+
23
+ int main (void)
24
+ {
25
+ clonesrv_t *self = (clonesrv_t *) zmalloc (sizeof (clonesrv_t));
26
+ self->port = 5556;
27
+ self->ctx = zctx_new ();
28
+ self->kvmap = zhash_new ();
29
+ self->loop = zloop_new ();
30
+ zloop_set_verbose (self->loop, false);
31
+
32
+ //[-32-] Set up our clone server sockets
33
+ self->snapshot = zsocket_new (self->ctx, ZMQ_ROUTER);
34
+
35
+ self->publisher = zsocket_new (self->ctx, ZMQ_PUB);
36
+ zsocket_bind (self->publisher, "tcp://*:%d", self->port + 1);
37
+ self->collector = zsocket_new (self->ctx, ZMQ_PULL);
38
+ zsocket_bind (self->collector, "tcp://*:%d", self->port + 2);
39
+
40
+ //[-40-] Register our handlers with reactor
41
+ zmq_pollitem_t poller = { 0, 0, ZMQ_POLLIN };
42
+ poller.socket = self->snapshot;
43
+ zloop_poller (self->loop, &poller, s_snapshots, self);
44
+ poller.socket = self->collector;
45
+ zloop_poller (self->loop, &poller, s_collector, self);
46
+ zloop_timer (self->loop, 1000, 0, s_flush_ttl, self);
47
+
48
+ //[-48-] Run reactor until process interrupted
49
+ zloop_start (self->loop);
50
+
51
+ zloop_destroy (&self->loop);
52
+ zhash_destroy (&self->kvmap);
53
+ zctx_destroy (&self->ctx);
54
+ free (self);
55
+ return 0;
56
+ }
57
+
58
+ typedef struct {
59
+ void *socket; //[-59-] ROUTER socket to send to
60
+ zframe_t *identity; //[-60-] Identity of peer who requested state
61
+ char *subtree; //[-61-] Client subtree specification
62
+ } kvroute_t;
63
+
64
+ static int
65
+ s_send_single (const char *key, void *data, void *args)
66
+ {
67
+ kvroute_t *kvroute = (kvroute_t *) args;
68
+ kvmsg_t *kvmsg = (kvmsg_t *) data;
69
+ if (strlen (kvroute->subtree) <= strlen (kvmsg_key (kvmsg))
70
+ && memcmp (kvroute->subtree,
71
+ kvmsg_key (kvmsg), strlen (kvroute->subtree)) == 0) {
72
+ zframe_send (&kvroute->identity, //[-72-] Choose recipient
73
+ kvroute->socket, ZFRAME_MORE + ZFRAME_REUSE);
74
+ kvmsg_send (kvmsg, kvroute->socket);
75
+ }
76
+ return 0;
77
+ }
78
+
79
+ static int
80
+ s_snapshots (zloop_t *loop, zmq_pollitem_t *poller, void *args)
81
+ {
82
+ clonesrv_t *self = (clonesrv_t *) args;
83
+
84
+ zframe_t *identity = zframe_recv (poller->socket);
85
+ if (identity) {
86
+ char *request = zstr_recv (poller->socket);
87
+ char *subtree = NULL;
88
+ if (streq (request, "ICANHAZ?")) {
89
+ free (request);
90
+ subtree = zstr_recv (poller->socket);
91
+ }
92
+ else
93
+ printf ("E: bad request, aborting\n");
94
+
95
+ if (subtree) {
96
+ kvroute_t routing = { poller->socket, identity, subtree };
97
+ zhash_foreach (self->kvmap, s_send_single, &routing);
98
+
99
+ zclock_log ("I: sending shapshot=%d", (int) self->sequence);
100
+ zframe_send (&identity, poller->socket, ZFRAME_MORE);
101
+ kvmsg_t *kvmsg = kvmsg_new (self->sequence);
102
+ kvmsg_set_key (kvmsg, "KTHXBAI");
103
+ kvmsg_set_body (kvmsg, (byte *) subtree, 0);
104
+ kvmsg_send (kvmsg, poller->socket);
105
+ kvmsg_destroy (&kvmsg);
106
+ free (subtree);
107
+ }
108
+ zframe_destroy(&identity);
109
+ }
110
+ return 0;
111
+ }
112
+
113
+ static int
114
+ s_collector (zloop_t *loop, zmq_pollitem_t *poller, void *args)
115
+ {
116
+ clonesrv_t *self = (clonesrv_t *) args;
117
+
118
+ kvmsg_t *kvmsg = kvmsg_recv (poller->socket);
119
+ if (kvmsg) {
120
+ kvmsg_set_sequence (kvmsg, ++self->sequence);
121
+ kvmsg_send (kvmsg, self->publisher);
122
+ int ttl = atoi (kvmsg_get_prop (kvmsg, "ttl"));
123
+ if (ttl)
124
+ kvmsg_set_prop (kvmsg, "ttl",
125
+ "%" PRId64, zclock_time () + ttl * 1000);
126
+ kvmsg_store (&kvmsg, self->kvmap);
127
+ zclock_log ("I: publishing update=%d", (int) self->sequence);
128
+ }
129
+ return 0;
130
+ }
131
+
132
+ //[-132-] .split flush ephemeral values
133
+ static int
134
+ s_flush_single (const char *key, void *data, void *args)
135
+ {
136
+ clonesrv_t *self = (clonesrv_t *) args;
137
+
138
+ kvmsg_t *kvmsg = (kvmsg_t *) data;
139
+ int64_t ttl;
140
+ sscanf (kvmsg_get_prop (kvmsg, "ttl"), "%" PRId64, &ttl);
141
+ if (ttl && zclock_time () >= ttl) {
142
+ kvmsg_set_sequence (kvmsg, ++self->sequence);
143
+ kvmsg_set_body (kvmsg, (byte *) "", 0);
144
+ kvmsg_send (kvmsg, self->publisher);
145
+ kvmsg_store (&kvmsg, self->kvmap);
146
+ zclock_log ("I: publishing delete=%d", (int) self->sequence);
147
+ }
148
+ return 0;
149
+ }
150
+
151
+ static int
152
+ s_flush_ttl (zloop_t *loop, int timer_id, void *args)
153
+ {
154
+ clonesrv_t *self = (clonesrv_t *) args;
155
+ if (self->kvmap)
156
+ zhash_foreach (self->kvmap, s_flush_single, args);
157
+ return 0;
158
+ }
@@ -0,0 +1,24 @@
1
+ //[-1-](C) 2013 Sebastian Mach (1983), this file is published under the terms of the
2
+ //[-2-]GNU General Public License, Version 3 (a.k.a. GPLv3).
3
+ //[-3-]See COPYING in the root-folder of the excygen project folder.
4
+ #ifndef INTERSECTION_HH_INCLUDED_20130718
5
+ #define INTERSECTION_HH_INCLUDED_20130718
6
+
7
+ #include "DifferentialGeometry.hh"
8
+ #include "Photometry/Material/Material.hh"
9
+ #include <memory>
10
+
11
+ namespace excyrender {
12
+
13
+ struct Intersection
14
+ {
15
+ DifferentialGeometry dg;
16
+ std::shared_ptr<const Photometry::Material::Material> material;
17
+ };
18
+
19
+ inline real distance(Intersection const &i) noexcept {
20
+ return i.dg.d;
21
+ } /*[-21-] multi line [-end-]*/
22
+ }
23
+
24
+ #endif //[-24-]INTERSECTION_HH_INCLUDED_20130718
File without changes
@@ -0,0 +1,41 @@
1
+ (ns mtrelay
2
+ (:refer-clojure :exclude [send])
3
+ (:require [zhelpers :as mq])
4
+ (:import [org.zeromq ZMQ$Context]))
5
+
6
+ ;;[-6-]Attribution-Share Alike 3.0 License, copyright (c) 2010 Pieter Hintjens, modified @alpaca-tc
7
+ ;;[-7-]Multithreaded relay in Clojure
8
+ ;;[-8-] Isaiah Peng <issaria@gmail.com>
9
+
10
+ (defrecord Step1 [^ZMQ$Context ctx]
11
+ Runnable
12
+ (run [this]
13
+ (let [xmitter (mq/socket ctx mq/pair)]
14
+ (mq/connect xmitter "inproc://step2")
15
+ (println "Step 1 is ready, signaling step 2")
16
+ (mq/send xmitter "READY\u0000")
17
+ (.close xmitter))))
18
+
19
+ (defrecord Step2 [^ZMQ$Context ctx]
20
+ Runnable
21
+ (run [this]
22
+ (let [receiver (mq/socket ctx mq/pair)
23
+ xmitter (mq/socket ctx mq/pair)]
24
+ (mq/bind receiver "inproc://step2")
25
+ (-> ctx Step1. Thread. .start)
26
+ ;;[-26-] Wait for signal and pass it on
27
+ (mq/recv-str receiver) ;;[-27-] Wait for signal and pass it on
28
+ (mq/connect xmitter "inproc://step3") ;;;;[-28-] Wait for signal and pass it on
29
+ (println "Step 2 is ready, signaling step 3") ;[-29-] Wait for signal and pass it on
30
+ (mq/send xmitter "READY\u0000")
31
+ (.close xmitter))))
32
+
33
+ (defn -main []
34
+ (let [ctx (mq/context 1)
35
+ receiver (mq/socket ctx mq/pair)]
36
+ (mq/bind receiver "inproc://step3")
37
+ (-> ctx Step2. Thread. .start)
38
+ (mq/recv-str receiver)
39
+ (.close receiver)
40
+ (println "Test successful!")
41
+ (.term ctx)))
@@ -0,0 +1,27 @@
1
+ #[-1-] singleline
2
+ class GiftModel
3
+ constructor: (gifts) -> #[-3-] singleline
4
+ @gifts = ko.observableArray gifts
5
+
6
+ @addGift = =>
7
+ @gifts.push({ name: "" })
8
+
9
+ @removeGift = (gift) =>
10
+ @gifts.remove gift
11
+
12
+ regexp = /// #[-12-] regexp comment
13
+ reg(exp) #[-13-] regexp comment
14
+ reg(exp) #[-14-] regexp comment
15
+ ///
16
+ @save = (form) =>
17
+ alert "Could now transmit to server: #{ko.utils.stringifyJson @gifts}"
18
+ ###[-18-] singleline
19
+ [-19-] multi line
20
+ ###
21
+ viewModel = new GiftModel(
22
+ [
23
+ { name: "Tall Hat", price: "39.95" } #[-23-] singleline
24
+ { name: "Long Cloak", price: "120.00"}
25
+ ])
26
+ ko.applyBindings viewModel
27
+ $("form").validate submitHandler: viewModel.save
@@ -0,0 +1,130 @@
1
+ #include "zhelpers.hpp"
2
+ #include <queue>
3
+ //[-3-]Attribution-Share Alike 3.0 License, copyright (c) 2010 Pieter Hintjens, modified @alpaca-tc
4
+ //[-4-]Basic request-reply client using REQ socket
5
+ static void *
6
+ client_thread (void *arg) {
7
+ zmq::context_t context(1);
8
+ zmq::socket_t client (context, ZMQ_REQ);
9
+ s_set_id (client); //[-9-]Makes tracing easier
10
+ client.connect("ipc://frontend.ipc");
11
+
12
+ //[-12-] Send request, get reply
13
+ s_send (client, "HELLO");
14
+ std::string reply = s_recv (client);
15
+ /*[-15-] Send request, get reply [-end-]*/
16
+ return (NULL);
17
+ }
18
+
19
+ static void *
20
+ worker_thread (void *arg) {
21
+ zmq::context_t context(1);
22
+ zmq::socket_t worker (context, ZMQ_REQ);
23
+ s_set_id (worker);
24
+ worker.connect("ipc://backend.ipc");
25
+
26
+ s_send (worker, "READY");
27
+
28
+ while (1) {
29
+ /*[-29-]
30
+ [-30-]Read and save all frames until we get an empty frame
31
+ [-31-]In this example there is only 1 but it could be more [-end-]*/
32
+ std::string address = s_recv (worker);
33
+ {
34
+ std::string empty = s_recv (worker);
35
+ assert (empty.size() == 0);
36
+ }
37
+
38
+ std::string request = s_recv (worker);
39
+ std::cout << "Worker: " << request << std::endl;
40
+
41
+ s_sendmore (worker, address);
42
+ s_sendmore (worker, "");
43
+ s_send (worker, "OK");
44
+ }
45
+ return (NULL);
46
+ }
47
+
48
+ int main (int argc, char *argv[])
49
+ {
50
+
51
+ zmq::context_t context(1);
52
+ zmq::socket_t frontend (context, ZMQ_ROUTER);
53
+ zmq::socket_t backend (context, ZMQ_ROUTER);
54
+ frontend.bind("ipc://frontend.ipc");
55
+ backend.bind("ipc://backend.ipc");
56
+
57
+ int client_nbr;
58
+ for (client_nbr = 0; client_nbr < 10; client_nbr++) {
59
+ pthread_t client;
60
+ pthread_create (&client, NULL, client_thread, NULL);
61
+ }
62
+ int worker_nbr;
63
+ for (worker_nbr = 0; worker_nbr < 3; worker_nbr++) {
64
+ pthread_t worker;
65
+ pthread_create (&worker, NULL, worker_thread, NULL);
66
+ }
67
+ std::queue<std::string> worker_queue;
68
+
69
+ while (1) {
70
+
71
+ zmq::pollitem_t items [] = {
72
+ { backend, 0, ZMQ_POLLIN, 0 },
73
+ { frontend, 0, ZMQ_POLLIN, 0 }
74
+ };
75
+ if (worker_queue.size())
76
+ zmq::poll (&items [0], 2, -1);
77
+ else
78
+ zmq::poll (&items [0], 1, -1);
79
+
80
+ if (items [0].revents & ZMQ_POLLIN) {
81
+
82
+ worker_queue.push(s_recv (backend));
83
+
84
+ {
85
+ std::string empty = s_recv (backend);
86
+ assert (empty.size() == 0);
87
+ }
88
+
89
+ std::string client_addr = s_recv (backend);
90
+
91
+ if (client_addr.compare("READY") != 0) {
92
+
93
+ {
94
+ std::string empty = s_recv (backend);
95
+ assert (empty.size() == 0);
96
+ }
97
+
98
+ std::string reply = s_recv (backend);
99
+ s_sendmore (frontend, client_addr);
100
+ s_sendmore (frontend, "");
101
+ s_send (frontend, reply);
102
+
103
+ if (--client_nbr == 0)
104
+ break;
105
+ }
106
+ }
107
+ if (items [1].revents & ZMQ_POLLIN) {
108
+
109
+ std::string client_addr = s_recv (frontend);
110
+
111
+ {
112
+ std::string empty = s_recv (frontend);
113
+ assert (empty.size() == 0);
114
+ }
115
+
116
+ std::string request = s_recv (frontend);
117
+
118
+ std::string worker_addr = worker_queue.front();
119
+ worker_queue.pop();
120
+
121
+ s_sendmore (backend, worker_addr);
122
+ s_sendmore (backend, "");
123
+ s_sendmore (backend, client_addr);
124
+ s_sendmore (backend, "");
125
+ s_send (backend, request);
126
+ }
127
+ }
128
+ sleep (1);
129
+ return 0;
130
+ }
@@ -0,0 +1,53 @@
1
+ //[-1-]Attribution-Share Alike 3.0 License, copyright (c) 2010 Pieter Hintjens, modified @alpaca-tc
2
+ //[-2-] Author: Yan Cui
3
+ //[-3-] Email: theburningmonk@gmail.com
4
+
5
+ using System;
6
+ using System.Collections.Generic;
7
+ using System.Threading;
8
+ using ZeroMQ;
9
+
10
+ namespace zguide.clonesrv1
11
+ {
12
+ internal class Program
13
+ {
14
+ public static void Main(string[] args)
15
+ {
16
+ using (var context = ZmqContext.Create())
17
+ {
18
+ using (var publisher = context.CreateSocket(SocketType.PUB))
19
+ {
20
+ publisher.Bind("tcp://*:5556");
21
+ Thread.Sleep(TimeSpan.FromMilliseconds(200));
22
+
23
+ var interrupted = false; //[-23-] single line
24
+ var sequence = 0L;/*[-24-] multi line [-end-]*/
25
+ var random = new Random((int)DateTime.UtcNow.Ticks);
26
+ var dict = new Dictionary<string, KvMsg>();
27
+ /*[-27-]
28
+ [-28-] multi line [-end-]
29
+ */
30
+ Console.CancelKeyPress += (s, e) => { interrupted = true; };
31
+
32
+ while (!interrupted)
33
+ {
34
+ sequence++;
35
+ var kvmsg = new KvMsg(sequence);
36
+ kvmsg.Key = random.Next(1, 10000).ToString();
37
+ kvmsg.Body = random.Next(1, 1000000).ToString();
38
+
39
+ kvmsg.Send(publisher);
40
+ kvmsg.Store(dict);
41
+
42
+ Console.WriteLine("Published {0}", kvmsg);
43
+
44
+ Thread.Sleep(TimeSpan.FromMilliseconds(100));
45
+ }
46
+
47
+ Console.WriteLine(" Interrupted\n{0} messages out\n", sequence);
48
+ Console.ReadKey();
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,37 @@
1
+ @charset "UTF-8";
2
+ @font-face {
3
+ font-family: ClumsyRegular;
4
+ src: url(/font/clumsy-webfont.eot);
5
+ src: local("☺"), url(/font/clumsy-webfont.woff) format("woff"), url(/font/clumsy-webfont.ttf) format("truetype"), url(/font/clumsy-webfont.svg#webfontYlE9Voyi) format("svg");
6
+ font-weight: normal;
7
+ font-style: normal;
8
+ }
9
+ /*[-9-] single comment [-end-]*/
10
+
11
+ /*[-11-] multi line comment
12
+ [-12-] multi line comment
13
+ */
14
+ @font-face {
15
+ font-family: "Courier10BTRoman";
16
+ src: url(/font/courier-10-pitch-bt-webfont.eot);
17
+ src: local("☺"), url(/font/courier-10-pitch-bt-webfont.woff) format("woff"), url(/font/courier-10-pitch-bt-webfont.ttf) format("truetype"), url(/font/courier-10-pitch-bt-webfont.svg#webfontKRtE3TYu) format("svg");
18
+ font-weight: normal;
19
+ font-style: normal;
20
+ }
21
+
22
+ @font-face {
23
+ font-family: "LietzLindauHamburgRegular";
24
+ src: url(/font/lietzlindauhamburg-webfont.eot);
25
+ src: local("☺"), url(/font/lietzlindauhamburg-webfont.woff) format("woff"), url(/font/lietzlindauhamburg-webfont.ttf) format("truetype"), url(/font/lietzlindauhamburg-webfont.svg#webfont7wlycxIS) format("svg");
26
+ font-weight: normal;
27
+ font-style: normal;
28
+ }
29
+
30
+ .heading {
31
+ font-family: "PT Serif", "Georgia", "Helvetica Neue", Arial, sans-serif;
32
+ }
33
+
34
+ .sans, html .gist .gist-file .gist-meta {
35
+ font-family: "PT Sans", "Helvetica Neue", Arial, sans-serif;
36
+ }
37
+
File without changes